LearnNewsExamplesServices
Frontmatter
id12753
titleRecency-tier release-note SEO priority instead of flat 0.9
stateClosed
labels
enhancementaibuild
assigneesneo-opus-vega
createdAtJun 8, 2026, 12:12 PM
updatedAtJun 8, 2026, 4:55 PM
githubUrlhttps://github.com/neomjs/neo/issues/12753
authorneo-opus-vega
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtJun 8, 2026, 4:55 PM

Recency-tier release-note SEO priority instead of flat 0.9

Closed v13.0.0/archive-v13-0-0-chunk-17 enhancementaibuild
neo-opus-vega
neo-opus-vega commented on Jun 8, 2026, 12:12 PM

Context

@tobiu flagged (2026-06-08) that the SEO generator assigns a flat 0.9 priority to all release notes. Surfaced now because #12728's recursive glob (merged) makes the generator collect all release-note files (vs 1 before), so a sitemap regen emits the whole catalog at 0.9.

V-B-A:

  • buildScripts/docs/seo/generate.mjs getPriority(): if (id.startsWith('/news/releases/')) return 0.9; — flat, no recency.
  • Release-note distribution (find resources/content/release-notes -name '*.md'): 167 total — v8: 72, v9: 27, v10: 35, v11: 30, v12: 2, v13: 1. So ~99 (59%) are ancient v8/v9 patch notes.
  • Curated evergreen tier (the PRIORITIES map): MCP guides 1.0; blog / key benefits / landing 0.9; most guides 0.7–0.8. The other /news/* is already below evergreen (pulls 0.6, tickets 0.5, discussions 0.4). Release notes are the lone value-inversion.
  • package.json version = 12.1.0 (v13 is in-progress, not yet cut) — relevant to the recency anchor (below).
  • Live latest-open sweep (2026-06-08): no equivalent ticket.

The Problem

Flat-0.9-for-all-release-notes does two harms once the recursive glob regenerates the sitemap:

  1. Value inversion — a 5-year-old v8.1.2 patch note at 0.9 is priority-equal to the blog posts and above the building-blocks guides (0.8). Backwards.
  2. Signal dilution — flooding the 0.9 tier (currently ~25 curated routes) with 167 release notes makes <priority> useless as the crawl-budget hint it exists to be; crawlers spread budget thin instead of refreshing landing / guides / current-release first.

The Architectural Reality

  • Owning surface: buildScripts/docs/seo/generate.mjs getPriority() (the central priority resolver, ~line 139).
  • collectReleaseRoutes() already semver-sorts + parses version per release — recency data is in hand.
  • Recency anchor: package.json is 12.1.0 (lags the in-progress v13), so a naive "delta from package.json major" mis-anchors. Anchor on the max release-note major (currently 13) OR a static per-major map (operator-tunable).
  • Scope: only /news/releases/ — the other /news/* (tickets/pulls/discussions) are already sensibly below evergreen.

The Fix

Replace the flat return 0.9 for /news/releases/ in getPriority with a recency-tiered value. Operator-confirmed mapping (@tobiu):

Releases Priority Note
v13.x (in-progress current) 0.9 the release everyone searches
v12.x (current published) 0.9 only 2 releases — no tier flood
v11.x 0.7 last full generation
v10.x 0.6 extended (confirm)
v9.x 0.5 extended — = DEFAULT → omitted from sitemap
v8.x 0.4 extended — ancient patch notes

(v13/v12 = 0.9 and v11 = 0.7 are operator-specified; v10–v8 extended for a smooth decay below the evergreen 0.7+ tier — confirm in review.)

Implementation — two viable shapes (settle in PR):

  • (a) delta from the max release-note major (self-maintaining): δ0/δ1 = 0.9, δ2 = 0.7, δ3 = 0.6, δ4 = 0.5, δ5+ = 0.4.
  • (b) static per-major map (explicit, operator-tunable per release).

Either reads the version already parsed by collectReleaseRoutes. Do NOT anchor on package.json major (it lags the in-progress release).

Contract Ledger Matrix

Target Surface Source of Authority Proposed Behavior Fallback Docs Evidence
getPriority('/news/releases/…') @tobiu directive + sitemap crawl-budget semantics recency-tiered (current/recent 0.9, decaying to 0.4 for ancient) DEFAULT_PRIORITY 0.5 if version unparseable inline JSDoc unit test asserts the tier per major
evergreen PRIORITIES map existing curated map UNCHANGED — now genuinely outranks old release notes n/a n/a sitemap diff: old releases < 0.7

Decision Record impact

none — heuristic tuning of an existing build-script resolver; no ADR.

Acceptance Criteria

  • getPriority gives /news/releases/ a recency-tiered priority (not flat 0.9): v13/v12 → 0.9, v11 → 0.7, older decaying to 0.4.
  • Old release notes (≤ v11) sit below the evergreen tier (guides/blog/benefits 0.7–1.0) — no value-inversion.
  • The recency anchor does NOT use package.json major (it lags the in-progress v13); anchor on max-release-note-major or a static map.
  • A unit test asserts the priority per major tier (e.g. v13 = 0.9, v8 = 0.4).
  • No change to non-release /news/* (tickets/pulls/discussions) or the curated PRIORITIES map.
  • Regenerate the sitemap; confirm the release-note priority distribution matches the tiers.

Out of Scope

  • The other /news/* priorities (tickets/pulls/discussions) — already sensibly below evergreen.
  • The curated PRIORITIES evergreen map — unchanged.
  • The #12728 recursive glob + the #12749 mutable-link guard (sibling generate.mjs work).

Related

  • #12728 — recursive glob; surfaced all 167 releases into the sitemap, exposing the flat-0.9.
  • #12749 — sibling generate.mjs work (the /blob/main mutable-link guard).
  • #12696 — v13 release epic (timely for the v13 sitemap regen; not release-blocking).

Origin Session ID: 728442d6-a2a0-4481-a631-a3112ce6d703 Retrieval Hint: "release-note SEO sitemap priority recency tier flat 0.9 getPriority generate.mjs #12728"

Authored by Claude Opus 4.8 (neo-opus-vega, Claude Code).

tobiu referenced in commit 5c5723c - "fix(build): recency-tier release-note SEO priority (#12753) (#12771) on Jun 8, 2026, 4:55 PM
tobiu closed this issue on Jun 8, 2026, 4:55 PM