Skip to content

TigerSEO: Article (BlogPosting) + BreadcrumbList JSON-LD#17

Merged
WebTigers merged 1 commit into
mainfrom
feat/seo-jsonld-article
Jul 17, 2026
Merged

TigerSEO: Article (BlogPosting) + BreadcrumbList JSON-LD#17
WebTigers merged 1 commit into
mainfrom
feat/seo-jsonld-article

Conversation

@WebTigers

Copy link
Copy Markdown
Owner

The last slice of the structured-data layer — the per-content rich-results nodes, on top of the site-identity graph.

BreadcrumbList (every page)

Derived from the URL path: Home → each path segment, with the leaf labelled by the page's real title and intermediate segments humanized (getting-startedGetting Started). Emitted for CMS pages from Seo_Plugin_Head; a home/single-item trail emits nothing. Each ListItem carries an absolute item URL and position.

BlogPosting (every article)

headline, description (SEO desc → excerpt), image (the feature image resolved through the media row → real absolute URL + dimensions), datePublished / dateModified, author (a Person, or the Organization when no byline), publisher#organization, isPartOf#website, mainEntityOfPage → the article URL. Plus the article's own Home → Blog → title breadcrumb.

How it's wired

Both emit as additional @graph blocks on the same tigerJsonLd head placeholder, cross-referencing the site graph by @id. The blog controller hands Seo_Service_Schema its presented article — the schema builder never learns "blog" (same ownership rule as the sitemap providers). Everything is fail-soft.

Verified

  • Reflection unit-test of the builders: trail humanization + leaf-title, BreadcrumbList positions, and a BlogPosting with correct ISO dates / author / publisher cross-ref — all valid, tag-breakout-safe JSON.
  • Smoke now asserts the seeded CMS page carries a valid BreadcrumbList and that every ld+json block on the page parses.

That closes out the SEO/structured-data track: head meta · OG · sitemap/robots · JSON-LD (Organization/WebSite/SiteNav) · Article + Breadcrumb · Site Identity.

🤖 Generated with Claude Code

Completes the structured-data layer with the per-content nodes:

- BreadcrumbList — every CMS page derives a trail from its URL path (Home -> each
  segment; the leaf labelled with the page's real title, intermediate segments
  humanized: "getting-started" -> "Getting Started"). Emitted from Seo_Plugin_Head.
- BlogPosting — every blog article emits headline, description, feature image (resolved
  through the media row for a real URL + dimensions), datePublished/dateModified, author
  (Person, else the Organization), publisher -> #organization, isPartOf -> #website,
  mainEntityOfPage -> the article URL. Plus its own Home -> Blog -> <title> breadcrumb.
  The blog controller hands Seo_Service_Schema its presented article, so the schema
  builder never learns "blog".

Both ride the same tigerJsonLd head placeholder as additional @graph blocks that
cross-reference the site graph (Organization/WebSite) by @id. Fail-soft; a home/single-
segment page emits no breadcrumb. Smoke now asserts the seeded page carries a valid
BreadcrumbList and that EVERY ld+json block parses.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@WebTigers
WebTigers merged commit d133c5c into main Jul 17, 2026
5 checks passed
@WebTigers
WebTigers deleted the feat/seo-jsonld-article branch July 17, 2026 17:03
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