feat(landing): centralize SEO metadata generation#268
Merged
Conversation
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
onequery-landing | ee717d8 | Commit Preview URL Branch Preview URL |
Jun 01 2026, 08:07 AM |
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.
One-Line Summary
Centralizes landing SEO metadata generation so pages and docs emit consistent canonical links, social tags, and schema.org JSON-LD.
User-Facing Changes
Why This Changed
SEO metadata was split between the landing layout, docs frontmatter, and page-specific schema helpers, which made updates easy to duplicate or drift. Blog reading time also lived in post frontmatter, so content edits could leave stale "min read" labels unless authors remembered to update them by hand.
How It Changed
@onequery/astro-seowith typed metadata builders, Astro head components, JSON-LD normalization, and script-safe JSON-LD serialization.BaseLayout.astroto delegate shared SEO tags and structured data scripts toSeoHead.astro.remarkReadingTimeplugin usingmdast-util-to-stringandreading-time, then made blog collection loading read and validate the generatedreadTimefrom Astro render frontmatter.Bug Fixes
</script>, rawJSON.stringifyoutput could terminate the inline JSON-LD script early; the new serializer escapes those characters while preserving parsed JSON values.readTimefrontmatter could become stale; read time now comes from the rendered Markdown tree.Extra Context / Decisions (Optional)
No README changes. No visual screenshots are included because the behavior is in document head metadata and generated structured data.
Verification
rtk bun run formatrtk bun lint --format jsonrtk bunx turbo typecheck --jsonrtk bunx turbo test --jsonlint-fullsuccessfully duringrtk git push -u origin landing-seo-schema-integration.Video / Screenshot (Optional)