Repository navigation
feat(seo): SEO v2 — close indexing gap with knowledge subdomain - #23
Merged
Merged
Conversation
Six-agent SEO audit (audits/seo-2026-05/) diagnosed why gemmology.dev is indexed worse than knowledge.gemmology.dev despite being the better product: 48% of sitemap URLs were /og/ image templates and high-value surfaces (/tools, /quiz, /playground) were client:load React shells with no server-rendered prose. This wave addresses the structural gap; v3 will layer keyword-clustered content on top. Sitemap & indexability (W1, W2): - astro.config.mjs: filter excludes /og/, /og-image/, /study/review, /study/settings; drop priority/changefreq (Google ignores since 2023) - /og/learn, /og/minerals, /og-image: noindex,nofollow meta added - Result: sitemap 910 → 466 URLs (zero /og/, zero /study/) Tool pages SSG prose + schema (W3+W4): - 7 tool pages now have 581–1326 server-rendered body words each (was 0–28 words); 3 paragraphs covering definition, method, and diagnostic application with named gem examples - New ToolsSchema.astro component emits SoftwareApplication JSON-LD on every tool page (applicationCategory EducationalApplication, free Offer, gemmology.dev creator) - /tools/index gains h1, intro, static category nav before React island Learn schema (W5, W6): - /learn/index: Course (FGA Diploma prep, 8 categories, PT100H workload) + CollectionPage with ItemList of all 138 articles + BreadcrumbList - LearnSchema.astro: BreadcrumbList fragment URL bug fixed (was emitting /learn#fundamentals as a crumb), datePublished now wired through from new publishedAt content-collection field, hasPart Quiz emitted when an article has curated pretest questions - src/content/config.ts: publishedAt field added to learn collection Quiz hub (W7): - 250-word SSG intro with all 8 categories listed statically - Course JSON-LD with 8 hasCourseInstance entries + Quiz JSON-LD - /quiz/ now returns 541 body words (was 30) About page E-E-A-T (W8): - Visible Maintainers & Editors block with credentials list - Person JSON-LD via extended StructuredData component - TODO(author) markers for real name+credential before deploy Verification: - npm run build: 912 pages, clean - Sitemap: 466 URLs, zero junk paths - All key pages emit valid JSON-LD (homepage 2, /learn 3, /quiz 2, /tools 1, /about 3 blocks) - 441 /og/ pages all carry noindex,nofollow Audit corpus: workspace/gemmology.dev/audits/seo-2026-05/
Replaces author placeholders in /about with the actual maintainer. Person JSON-LD now emits a real name and verified GitHub sameAs, without fabricated FGA/GIA credentials.
…alidation report - llms.txt: add ## Tools section listing the six tool categories with one-line procedural descriptions; convert the bare mineral URL list into titled entries with crystal system, hardness, RI, SG, and origin signal; expand intro to surface the 121/171 reference-data counts and FGA syllabus alignment; add a Licensing (training use) section that explicitly addresses AI training use under MIT + CC BY-SA 4.0. - robots.txt: add named Allow stanzas for GPTBot, OAI-SearchBot, ClaudeBot, Claude-Web, PerplexityBot, Google-Extended, CCBot, and Applebot-Extended in addition to the wildcard rule (some AI engines, notably Perplexity, require an explicit per-name Allow). - audits/seo-2026-05/v2-validation.md: record build assertions and the JSON-LD validation matrix across 15 representative pages (31 blocks, all parse cleanly and satisfy required-field heuristics).
|
🚀 Preview deployed to: https://3e939eeb.gemmology-dev.pages.dev |
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes the indexing gap with
knowledge.gemmology.devby fixing three structural issues identified by a six-agent SEO audit (audits/seo-2026-05/):/og/1200×630 image-template pages. The filter inastro.config.mjsnow excludes/og/,/og-image/,/study/review,/study/settings; the built sitemap drops from 910 → 466 URLs. OG template HTML files also carrynoindex,nofollow./tools/, all six tool category pages, and/quiz/previously shipped 0–28 server-rendered body words. They now ship 429–1213 body words (server-rendered) before the React island, with structured copy on what each calculator measures, the diagnostic workflow, and named gem examples.Course+CollectionPage+BreadcrumbListto/learn/,Course+Quizto/quiz/,SoftwareApplicationto all seven tool pages,QuizhasParton learn articles with pretests, namedPersonJSON-LD on/about/(Bissbert, with verified GitHubsameAs), and fixed the prior-audit BreadcrumbList fragment-URL bug.AI-search readiness:
llms.txtrestructured: added## Toolssection with per-category procedural descriptions; converted mineral bare-URL list into titled entries with crystal system / hardness / RI / SG; addedLicensing (training use)section.robots.txtnow carries namedAllowstanzas for GPTBot, OAI-SearchBot, ClaudeBot, Claude-Web, PerplexityBot, Google-Extended, CCBot, Applebot-Extended (PerplexityBot requires named-allow per their docs).Validation
Full report in
audits/seo-2026-05/v2-validation.md. Highlights:/og/URLs in sitemap/tools/body words/tools/measurement/body words/quiz/body words/learn//about/All 31 JSON-LD blocks across 15 representative page templates parse as valid JSON and satisfy required-field heuristics (
Course/provider,LearningResource/learningResourceType,SoftwareApplication/applicationCategory, etc.).Test plan
npm run buildsucceeds locally (verified — 912 pages, 8.83s)dist/sitemap-0.xmlcontains 466 URLs, zero under/og/,/og-image/,/study/,/admindist/tools/**/index.htmlcontains ≥300 server-rendered body words and ≥1 JSON-LD blockdist/llms.txtcontains## Tools, titled mineral entries, and a## Licensing (training use)sectiondist/robots.txtcontains named stanzas for GPTBot, ClaudeBot, PerplexityBot, Google-Extendedhttps://gemmology.dev/learn/,/quiz/,/tools/measurement/,/about/,/minerals/diamond/through Google's Rich Results Test post-deployNotes
This PR supersedes the closed #22; the branch was rebased onto current
origin/main(which now includes the British-English language pass #20 and tools waves A/B/C #21). The three commits on this branch (8569a31,2a13118,c764626) sit cleanly on top of4971bd1.Out of scope (deferred)
gemmology-knowledgerepo; separate cross-repo PR)robots.txt+llms.txtonknowledge.gemmology.dev(separate cross-repo PR)