TigerSEO: Article (BlogPosting) + BreadcrumbList JSON-LD#17
Merged
Conversation
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>
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.
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-started→Getting Started). Emitted for CMS pages fromSeo_Plugin_Head; a home/single-item trail emits nothing. EachListItemcarries an absoluteitemURL andposition.BlogPosting (every article)
headline,description(SEO desc → excerpt),image(the feature image resolved through themediarow → real absolute URL + dimensions),datePublished/dateModified,author(aPerson, 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
@graphblocks on the sametigerJsonLdhead placeholder, cross-referencing the site graph by@id. The blog controller handsSeo_Service_Schemaits presented article — the schema builder never learns "blog" (same ownership rule as the sitemap providers). Everything is fail-soft.Verified
BlogPostingwith correct ISO dates / author / publisher cross-ref — all valid, tag-breakout-safe JSON.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