Skip to content

feat(web): technical SEO foundation for sqlritedb.com (SQLR-32)#118

Merged
joaoh82 merged 1 commit into
mainfrom
feat/sqlr-32-seo-foundation
May 10, 2026
Merged

feat(web): technical SEO foundation for sqlritedb.com (SQLR-32)#118
joaoh82 merged 1 commit into
mainfrom
feat/sqlr-32-seo-foundation

Conversation

@joaoh82
Copy link
Copy Markdown
Owner

@joaoh82 joaoh82 commented May 9, 2026

Summary

Lays down the table-stakes technical SEO so search engines and LLM crawlers
can index and understand sqlritedb.com.

  • Per-route <title> / <meta description> / canonical on / and /docs
  • Full OpenGraph + Twitter Card set, with auto-generated 1200×630 OG /
    Twitter images via next/og ImageResponse (shared OgFrame JSX in
    src/lib/og.tsx)
  • /sitemap.xml + /robots.txt as Next 15 metadata routes, mutually
    referenced; hostnamed at the new canonical https://sqlritedb.com
  • JSON-LD: SoftwareApplication on the landing page, BreadcrumbList
    on /docs — both stringified inline so they have no client-runtime cost
  • Heading hierarchy fixes (footer h4h3; /docs TOC h4h2
    with aria-label) so each route descends in order from a single <h1>
  • Placeholder metadata.verification block in the root layout, ready for
    Google Search Console + Bing Webmaster Tools tokens
  • web/README.md SEO surface section documents where each piece lives
    and the Next-15 shallow-merge gotcha for openGraph / twitter

Closes SQLR-32.

Notable implementation notes

  • Next 15 metadata is shallow-merged for openGraph and twitter. Every
    page that overrides them has to restate siteName, card, site,
    creator, etc. — verified against the built index.html / docs.html.
  • Brand mark in OG images is inlined SVG. Satori's dynamic-font fetcher
    400s on the ▸ (U+25B8) glyph, so the mark renders from a <path> instead
    of relying on a font subset that may not exist.

Test plan

  • npm run typecheck clean
  • npm run lint clean
  • npm run build clean (no font-fetch warnings)
  • Verified built index.html / docs.html contain distinct <title>,
    <meta name="description">, <link rel="canonical">, og:*,
    twitter:card="summary_large_image", og:site_name, and JSON-LD blocks
  • Verified .next/server/app/sitemap.xml.body and
    robots.txt.body render the expected XML / text with the correct
    canonical host
  • Post-deploy: Lighthouse SEO ≥ 95 on / and /docs
  • Post-deploy: Google Rich Results Test
    passes for landing JSON-LD
  • Post-deploy: Verify ownership in GSC + Bing, paste tokens into
    metadata.verification in web/src/app/layout.tsx, submit sitemap
  • Post-deploy: Capture Core Web Vitals baseline (LCP / INP / CLS)
    and file follow-ups for any red metric

Out of scope (follow-ups)

  • Wrapping the 17 <pre> blocks in /docs as <pre><code class="language-…">
    for syntax-highlight semantics — wants a small <CodeBlock> component
  • Switching app/sitemap.ts to enumerate MDX frontmatter once
    /docs/[slug] lands
  • Richer JSON-LD (Article for blog, FAQPage for landing FAQ) when
    those surfaces exist

🤖 Generated with Claude Code

- Per-route titles / descriptions / canonicals on / and /docs
- OpenGraph + Twitter cards (siteName, locale, summary_large_image)
  restated at the page level since Next 15 shallow-merges these
- Auto-generated OG + Twitter images via next/og ImageResponse,
  shared `OgFrame` JSX in src/lib/og.tsx; brand mark inlined as SVG
  so Satori's dynamic-font fetcher doesn't 400 on the ▸ glyph
- app/sitemap.ts + app/robots.ts metadata routes; sitemap pointer
  in robots and SITE.url canonical in both
- JSON-LD: SoftwareApplication on landing, BreadcrumbList on /docs
- Site-wide robots policy, keywords, author, and a placeholder
  verification block in the root layout for GSC + Bing tokens
- Heading hierarchy: footer column h4→h3, /docs TOC h4→h2 (with
  aria-label) so headings descend in order
- web/README.md SEO surface section documenting each piece

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented May 9, 2026

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

Project Deployment Actions Updated (UTC)
rust-sqlite Ready Ready Preview, Comment May 9, 2026 0:38am

Request Review

@joaoh82 joaoh82 merged commit 5f8b211 into main May 10, 2026
18 checks passed
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