feat: schema.org BlogPosting structured data on reports - #72
Merged
Merged
Conversation
The site already had canonical, OpenGraph, Twitter cards, sitemap and RSS autodiscovery. Structured data was the gap: without it a search engine infers authorship, date and section from the prose instead of being told. Emits one <script type="application/ld+json"> per report, built from frontmatter that already exists — headline, description, datePublished, articleSection, keywords, image, canonical url, author and publisher. author.url is only emitted when the nick matches an existing operator. A discontinued nick must not become a dead link inside structured data, and Google treats a broken author.url worse than an absent one. Verified on the two ANKHCORP reports, whose profile was removed in #62. Static output, no new dependency. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
serros404
approved these changes
Sep 18, 2026
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.
Adds schema.org
BlogPostingstructured data to every report.Why
The site already carries canonical, OpenGraph, Twitter cards, sitemap and RSS autodiscovery. Structured data was the one thing missing: without it search engines infer authorship, date and section from the prose instead of being told. Declaring them explicitly is what makes an article eligible for a rich result — author and date shown in the snippet rather than title and description alone.
What it emits
A single
<script type="application/ld+json">per post, built at build time from frontmatter that already exists:headline,descriptiondatePublishedpubDate, as ISO 8601articleSectioncategorykeywordstags, omitted when absentimageurl/mainEntityOfPageauthorauthor, linked to the operator profilepublisherThe edge case it handles
author.urlis only emitted when the nick matches an existing operator. A discontinued nick must not become a dead link inside structured data — Google treats a brokenauthor.urlworse than an absent one.Verified on the two ANKHCORP reports, whose profile was removed in #62: both emit the author name with no
url.Verification
Scope
Reports only. Operator pages could later carry
ProfilePage/Person, but the SEO value is in the articles.Static output only — no backend, no runtime, no new dependency.
🤖 Generated with Claude Code