Build the SERP <title>. The executive-brief H1 โ which the cascade has already localized into 14 languages โ IS the SERP title. Per seo-metadata-contract.md ยง2.1, the title is always sourced from the executive brief (cleanArticleTitle strips boilerplate; titleFromBluf synthesises from BLUF when the H1 is unusable).
No date prefix (since 2026-05-24, audit on 480-article EN corpus):
198/480 (41%) of EN titles shipped with an ugly "Mon DD, 2026 ยท " prefix that ate ~15 chars of the 70-char SERP budget.
143/480 (30%) of EN titles shipped truncated mid-phrase (e.g. "Apr 19, 2026 ยท Deep Inspection HD03231 (Russia ยท Cyber ยท Defence ยทโฆ") when the bare H1 would have fit the budget cleanly.
The date is already carried by five other signals: the URL slug (2026-04-19-deep-inspection-en.html), og:article:published_time, JSON-LD datePublished, the visible page byline, and the SERP's own auto-rendered date snippet. Forcing the date into <title> is duplicative, destroys precious budget chars, and yields visually broken truncated titles.
Reader-friendly newsroom datelines remain on the <meta description> (see buildSeoDescription) โ that's where the convention belongs.
Daily-series articles (election-cycle/current, year-ahead, โฆ) that historically reused identical H1s across dates are now policed at the content layer (scripts/check-headline-quality.ts + brief generator prompts) โ the renderer no longer papers over duplicate H1s by glue-mounting a date prefix on top.
Latin LTR (en sv da no fi de fr es nl) โ 55-70 chars.
RTL (ar he) โ 45-60 chars.
CJK (ja ko zh) โ 30-45 glyphs.
Composition cascade (richest form first, fall back step by step):
{H1} โ Riksdagsmonitor โ story + brand (preferred).
{H1} โ bare story (brand dropped to fit budget).
truncated {H1} with โฆ ellipsis (last-resort).
Brand suffix is dropped when the H1 already mentions Riksdagsmonitor (avoid duplication). Empty-bracket artefacts left behind by upstream brief-generator template-substitution defects (( ), [ ], { - }) are scrubbed by stripEmptyBrackets before any length / truncation logic runs โ see live regression on analysis/daily/2026-05-08/election-cycle/next/article.md which shipped title: "Post-2026 Coalition: Next Mandate 2026-2030 ( )".
Build the SERP
<title>. The executive-brief H1 โ which the cascade has already localized into 14 languages โ IS the SERP title. Perseo-metadata-contract.mdยง2.1, the title is always sourced from the executive brief (cleanArticleTitlestrips boilerplate;titleFromBlufsynthesises from BLUF when the H1 is unusable).No date prefix (since 2026-05-24, audit on 480-article EN corpus):
"Mon DD, 2026 ยท "prefix that ate ~15 chars of the 70-char SERP budget."Apr 19, 2026 ยท Deep Inspection HD03231 (Russia ยท Cyber ยท Defence ยทโฆ") when the bare H1 would have fit the budget cleanly.2026-04-19-deep-inspection-en.html),og:article:published_time, JSON-LDdatePublished, the visible page byline, and the SERP's own auto-rendered date snippet. Forcing the date into<title>is duplicative, destroys precious budget chars, and yields visually broken truncated titles.<meta description>(see buildSeoDescription) โ that's where the convention belongs.scripts/check-headline-quality.ts+ brief generator prompts) โ the renderer no longer papers over duplicate H1s by glue-mounting a date prefix on top.Per-language SERP budgets (
seo-metadata-contract.mdยง4):en sv da no fi de fr es nl) โ 55-70 chars.ar he) โ 45-60 chars.ja ko zh) โ 30-45 glyphs.Composition cascade (richest form first, fall back step by step):
{H1} โ Riksdagsmonitorโ story + brand (preferred).{H1}โ bare story (brand dropped to fit budget).{H1}withโฆellipsis (last-resort).Brand suffix is dropped when the H1 already mentions
Riksdagsmonitor(avoid duplication). Empty-bracket artefacts left behind by upstream brief-generator template-substitution defects (( ),[ ],{ - }) are scrubbed by stripEmptyBrackets before any length / truncation logic runs โ see live regression onanalysis/daily/2026-05-08/election-cycle/next/article.mdwhich shippedtitle: "Post-2026 Coalition: Next Mandate 2026-2030 ( )".