Context
A production crawl on 2026-07-12 checked all 45 Punk Rock AI sitemap URLs:
- every URL returned
200
- every page had a title, description, canonical, and one H1
- no sitemap URL emitted
noindex
- 28 sitemap pages lacked
og:image, concentrated in widgets plus /decisions, /signal, and /workshop
This is a social-preview and discoverability quality gap, not an indexability failure.
Scope
- Give every sitemap-listed HTML page a valid absolute
og:image.
- Prefer an existing page-specific asset where one is clearly owned by the page.
- Use one existing canonical Punk Rock AI fallback image where no page-specific asset exists.
- Add matching Twitter image metadata or prove the platform fallback contract.
- Extend the existing index-hygiene checker instead of adding a disconnected audit script.
Acceptance Criteria
Tests/Evals
- Extend
scripts/check-index-hygiene.mjs to fail when a sitemap-listed HTML page lacks og:image or uses a malformed/non-absolute URL.
- Add focused fixture coverage for missing, malformed, fallback, and existing page-specific images.
- Keep all existing index-hygiene assertions green.
Verification
- Run
npm run seo:index-hygiene.
- Run
npm run check.
- Run a local HTTP smoke test and review the rendered metadata diff.
- After deployment, crawl all 45 production sitemap URLs and verify each image asset returns
200 with an image content type.
Agent Instructions
- Work from a clean worktree based on current
origin/main.
- Preserve unrelated changes and existing page-specific images.
- Extend the existing checker and project conventions.
- Commit, push, open a draft PR, and comment here with commands and results.
- Do not merge or deploy from the worker lane.
Out of Scope
- New image generation.
- Page-copy changes.
- Canonical, sitemap, title, description, or route changes.
- Interactive behavior changes.
- Broad schema or structured-data work.
Related to WalksWithASwagger/kk-kb#2027.
Context
A production crawl on 2026-07-12 checked all 45 Punk Rock AI sitemap URLs:
200noindexog:image, concentrated in widgets plus/decisions,/signal, and/workshopThis is a social-preview and discoverability quality gap, not an indexability failure.
Scope
og:image.Acceptance Criteria
og:image.200with an image content type.Tests/Evals
scripts/check-index-hygiene.mjsto fail when a sitemap-listed HTML page lacksog:imageor uses a malformed/non-absolute URL.Verification
npm run seo:index-hygiene.npm run check.200with an image content type.Agent Instructions
origin/main.Out of Scope
Related to WalksWithASwagger/kk-kb#2027.