schema: make Organization node resolvable on Article/TechArticle pages - #20524
Conversation
BlogPosting, FAQPage, and TechArticle nodes emit publisher (and related
fields) as a bare {"@id": "https://www.pulumi.com/#organization"}
reference. That @id only resolves to concrete data (name, logo) when the
same page's JSON-LD @graph also defines the Organization node — but only
the homepage does. Structured-data parsers evaluate each URL's JSON-LD
independently and do not dereference @id links across pages, so
publisher.name (required by schema.org/Article) and publisher.logo
(recommended for rich results) have been undefined on every blog post and
docs page.
This adds a minimal, resolvable Organization node (name, url, logo) to
the @graph on every non-home page, with values copied verbatim from the
homepage's node so the entity stays consistent site-wide. The homepage
keeps its existing full corporate entity (founders, address, sameAs,
etc.) unchanged and does not get a duplicate node.
Verified via local Hugo build: publisher @id now resolves to a concrete
Organization node with name + logo on both a blog post
(/blog/infrastructure-as-code-tools/) and a docs page
(/docs/iac/concepts/), while the homepage still emits exactly one
Organization node.
Pre-merge Review — Last updated 2026-07-26T12:45:37ZTip Summary: This is an infrastructure/template change to the JSON-LD structured-data builder ( Review confidence:
Investigation log
🔍 Verification trail4 claims extracted · 0 verified · 0 unverifiable · 0 contradicted
🚨 Outstanding in this PRNo outstanding findings in this PR.
|
|
Your site preview for commit b2ccb64 is ready! 🎉 http://www-testing-pulumi-docs-origin-pr-20524-b2ccb647.s3-website.us-west-2.amazonaws.com |
Lighthouse Performance ReportCommit: b2ccb64 | Metric definitions
|
Summary
Adds a minimal, resolvable
Organizationnode to the JSON-LD@graphon every non-homepage page (blog posts, docs pages, comparison pages, etc.) so that thepublisher(and other)@idreferences those pages already emit actually resolve to concrete data.Why
BlogPosting,TechArticle, and other Article-type nodes emitpublisher(and related fields) as a bare reference:That
@idonly resolves to concrete data (name,logo) when the same page's JSON-LD@graphalso defines anOrganizationnode with that@id— but today only the homepage does. Google (and other structured-data consumers) evaluate each URL's JSON-LD independently and do not dereference@idlinks across pages, sopublisher.name(required by schema.org/Article) andpublisher.logo(recommended for rich results and AI citation) have been effectively undefined on every blog post and docs page site-wide, including Pulumi's most AI-cited page (/blog/infrastructure-as-code-tools/).This is a single change to the shared graph-builder partial, so it fixes the entire blog + docs corpus (thousands of pages) at once — the same "fix once, apply everywhere" pattern as the FAQPage/ItemList schema work shipped in #20499/#20522/#20413.
What changed
layouts/partials/schema/graph-builder.html: in the{{ else }}branch (i.e. every page that is not the homepage), append a minimalOrganizationnode —@type,@id,name,alternateName,url,logo(as anImageObject) — copied verbatim from the homepage's existing Organization node values, so the entity stays consistent site-wide.sameAs, etc.) completely unchanged; it is not touched by this change and does not receive a duplicate node.Verification
hugo --minifyequivalent viahugo server-style build) covering the homepage, a representative blog post (/blog/infrastructure-as-code-tools/), and a representative docs page (/docs/iac/concepts/).@graphnow contains exactly oneOrganizationnode (@idhttps://www.pulumi.com/#organization,name"Pulumi Corporation",logopresent as anImageObject), andpublisher.@idon theBlogPosting/TechArticlenode matches it.Organizationnode (the existing full corporate entity) — no duplicate was introduced.git diff --statconfirms exactly one file changed (layouts/partials/schema/graph-builder.html, +28 lines, 0 removed) — purely additive, no existing logic touched.#new-review
@claude please review
🧠 This PR was created by workprentice via automated technical-SEO agent on behalf of the Pulumi marketing/growth workspace.