Skip to content

fix(seo): link orphan pages from nav/footer, drop dead URLs from sitemap#35

Merged
lacymorrow merged 3 commits into
mainfrom
lac-2783/fix-orphan-pages
Jul 14, 2026
Merged

fix(seo): link orphan pages from nav/footer, drop dead URLs from sitemap#35
lacymorrow merged 3 commits into
mainfrom
lac-2783/fix-orphan-pages

Conversation

@lacymorrow

Copy link
Copy Markdown
Contributor

Summary

Fixes LAC-2783 — Ahrefs Site Audit (project "Bones") reports 6 orphan pages on bones.sh, stable across weekly crawls (Jun 27, Jul 4, Jul 11 2026).

Root cause: the global footer only linked Home, Sign in (plus external Shipkit links) and the legal pages. Every other page — /about, /bones/cli-www, /changelog, /cli, /contact, /faq, /features — had zero incoming internal links. The sitemap also advertised two dead URLs: /docs (planned route with no page) and /v1 (the CLI logger API endpoint), both returning 404.

Note: a previous fix for the sitemap 404s (LAC-2431) landed in lacymorrow/bones-www, but bones.sh actually deploys from this repo (shipkit-io/bones, Vercel project bones), so it never reached production.

Changes

  • Footer (src/components/footers/footer.tsx): link Features, CLI, CLI Demo, Changelog, About, FAQ, Contact, EULA, and Legal. Also points the "Shipkit" link at shipkit.io — it previously duplicated the self-referencing bones.sh link.
  • Header nav (src/config/navigation.ts): add Features, CLI, FAQ.
  • Sitemap (src/app/sitemap.ts): exclude /docs and /v1 (no pages exist; /v1 is an API endpoint).
  • Regression test (tests/unit/seo-internal-links.test.ts): asserts every sitemap URL is linked from the header nav or footer, and that dead routes stay out of the sitemap.
  • Dev deps: install vitest, jsdom, @vitejs/plugin-react, vite-tsconfig-paths, @testing-library/* — the repo's test scripts and vitest.config.ts already referenced them but they were never installed.

Acceptance criteria / verification

Per the ticket, re-ran a local crawl after the fix (production build via next start, BFS over all internal <a href> from /, diffed against /sitemap.xml):

Before (prod crawl) After (local build crawl)
Sitemap URLs 14 (incl. two 404s) 12
Orphan pages 9 (Ahrefs reports 6) 0 — every sitemap URL has 13 incoming links

bun run test passes (3 tests). Ahrefs orphan count should drop to 0 on the next weekly crawl after deploy.

Ahrefs Site Audit reported 6 orphan pages on bones.sh (sitemap URLs with
no incoming internal links). Root cause: the global footer only linked
Home, Sign in, and legal pages, so /about, /bones/cli-www, /changelog,
/cli, /contact, /faq, and /features were unreachable from any internal
link. The sitemap also advertised /docs (planned route, no page) and /v1
(CLI logger API endpoint), both 404s.

- Footer: link Features, CLI, CLI Demo, Changelog, About, FAQ, Contact,
  EULA, and Legal; point the Shipkit link at shipkit.io instead of a
  duplicate self-referencing bones.sh link
- Header nav: add Features, CLI, and FAQ
- Sitemap: exclude /docs and /v1
- Add regression test asserting every sitemap URL is linked from the
  site chrome and dead routes stay out of the sitemap; install the
  missing vitest/testing-library dev deps the repo's test scripts and
  vitest.config.ts already referenced

Verified by crawling the production build locally: sitemap 14 -> 12
URLs, orphans 9 -> 0 (every sitemap URL now has 13 incoming links).

LAC-2783

Co-Authored-By: Paperclip <noreply@paperclip.ing>
@vercel

vercel Bot commented Jul 14, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
bones Ready Ready Preview, Comment Jul 14, 2026 7:43pm

Request Review

@github-actions

Copy link
Copy Markdown

Failed to generate code suggestions for PR

Vercel installs with pnpm --frozen-lockfile; the new vitest/testing-library
dev deps were only in bun.lock, failing the preview build.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
…t commit status

The smoke test passed but the final "Report check result" step 403'd
(Resource not accessible by integration) because the workflow token
had no statuses:write permission, marking the whole check as failed.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
@lacymorrow
lacymorrow merged commit 5b1c49d into main Jul 14, 2026
6 of 7 checks passed
@lacymorrow
lacymorrow deleted the lac-2783/fix-orphan-pages branch July 14, 2026 20:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant