Skip to content

feat(seo): ship WA3 keyword-cluster hubs#39

Merged
Bissbert merged 1 commit into
mainfrom
feat/wa3-hubs
May 13, 2026
Merged

feat(seo): ship WA3 keyword-cluster hubs#39
Bissbert merged 1 commit into
mainfrom
feat/wa3-hubs

Conversation

@Bissbert
Copy link
Copy Markdown
Contributor

Summary

Adds the four remaining keyword-cluster hub pages from the SEO v3 plan, completing WA3:

Route Head term Body words JSON-LD blocks Child links
/learn/identification/ "how to identify gemstones" 922 2 (LearningResource + BreadcrumbList) 15
/learn/equipment/ "how to use a refractometer gemstone" 931 2 (LearningResource + BreadcrumbList) 14
/learn/identification/treatments/ "synthetic diamond identification" 876 2 (LearningResource + BreadcrumbList) 8
/reference/properties/ (new route) "gemstone properties chart" 1209 3 (Dataset + WebPage:Table + BreadcrumbList) 6

Each hub follows the template defined in ~/.claude/plans/piped-frolicking-matsumoto.md §WA3:
<h1> claims the head term verbatim, a ~200-word lead positions the page, a child-link grid points at existing articles, and the JSON-LD declares the hub as a study unit (LearningResource with hasPart) or a structured dataset (the properties table). The properties hub's mainEntity: Table is the table-rich-result eligibility lever flagged in keywords.md.

Route collision

The treatments YAML article (gemmology-knowledge/docs/learn/identification/treatments.yaml) generates /learn/identification/treatments via the dynamic catch-all. This PR adds a static pages/learn/identification/treatments/index.astro at the same URL. The catch-all is updated to filter the slug from getStaticPaths so the content stays in the collection (referenced by the hub) without producing a duplicate-route build error.

Acceptance (plan §WA3)

  • each hub ≥400 server-rendered body words
  • each emits ≥1 JSON-LD block (Course/LearningResource or Dataset/WebPage)
  • each links to ≥4 existing child pages via <a>
  • npm run build clean (916 pages, 0 schema errors)
  • Rich Results Test per URL — to be run post-deploy and logged in audits/seo-2026-05/v3-validation.md

Test plan

  • npm run build succeeds locally
  • All four hub URLs render in dist/ with the expected word count / JSON-LD count / child-link count
  • Verify Rich Results Test passes on production for each of the four URLs
  • Resubmit sitemap in GSC and request reindex on the four new URLs

…treatments, properties)

Adds four content-cluster hub pages claiming high-intent head terms from the
v3 keyword landscape:

- /learn/identification — "how to identify gemstones" (9-step protocol, 14
  child articles linked, LearningResource JSON-LD with hasPart)
- /learn/equipment — "how to use a refractometer (and the rest of the
  gemmological toolkit)" (7-step refractometer workflow table, 13 child
  articles, LearningResource JSON-LD)
- /learn/identification/treatments — "synthetic diamond identification,
  treatments & composite stones" (11-row detection matrix, LearningResource
  with about[] covering HPHT/CVD/heat/diffusion/composite stones)
- /reference/properties — "gemstone properties chart" (50-row RI/SG/hardness/
  birefringence/system/cleavage reference table, Dataset + WebPage
  mainEntity:Table JSON-LD for table-rich-result eligibility)

Each hub renders >=400 body words, emits at least one JSON-LD block, links
to >=4 existing child pages, and breadcrumbs back to /learn/.

The treatments hub collides with the dynamic [...slug] route from the
gemmology-knowledge YAML article of the same path; the static hub takes
precedence and the YAML slug is filtered from getStaticPaths so its content
remains in the collection (referenced by the hub) without producing a
duplicate route.
@github-actions
Copy link
Copy Markdown

🚀 Preview deployed to: https://06272442.gemmology-dev.pages.dev

@Bissbert Bissbert merged commit ae9e717 into main May 13, 2026
5 of 6 checks passed
@Bissbert Bissbert deleted the feat/wa3-hubs branch May 13, 2026 07:51
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