Skip to content

feat: schema.org BlogPosting structured data on reports - #72

Merged
serros404 merged 1 commit into
mainfrom
feat/structured-data-blogposting
Sep 18, 2026
Merged

serros404 merged 1 commit into
mainfrom
feat/structured-data-blogposting

Conversation

@0xd3lta

@0xd3lta 0xd3lta commented Sep 18, 2026

Copy link
Copy Markdown
Contributor

Adds schema.org BlogPosting structured 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:

Field Source
headline, description frontmatter
datePublished pubDate, as ISO 8601
articleSection category
keywords tags, omitted when absent
image the per-post OG image
url / mainEntityOfPage the canonical URL
author author, linked to the operator profile
publisher 0xDelta Research + site logo

The edge case it handles

author.url is only emitted when the nick matches an existing operator. A discontinued nick must not become a dead link inside structured data — Google treats a broken author.url worse 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

  • Build clean, 31 pages
  • 20 of 20 reports carry valid JSON-LD, parsed and checked field by field — 0 parse failures
  • Every URL inside the payload resolves 200: profile, OG image, logo

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

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
serros404 merged commit eb7f9fb into main Sep 18, 2026
1 check passed
@0xd3lta
0xd3lta deleted the feat/structured-data-blogposting branch September 18, 2026 11:59
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.

2 participants