seo(jsonld): VideoGallery + WebPage for video pages#18026
Merged
Conversation
- Adds type-assertion node to reference VideoObject as "isPartOf" the parent VideoGallery - Includes WebPage node with "mainEntity" pointing to the VideoObject - Replaced ORGANIZATION with REFERENCE for EF publisher (node now available from BASE_GRAPH_NODES)
✅ Deploy Preview for ethereumorg ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
Member
Author
|
@pettinarip Going to pull this one in per @mnelsonBT's approval so it can be part of the deploy. Please note if you see any issues though and I'll make sure to patch in a follow up. |
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.

Summary
/videos/: promotedCollectionPagetoVideoGallery(more specific subclass per Schema.org'sCollectionPage > MediaGallery > VideoGalleryhierarchy).ItemListretained asmainEntityfor carousel rich-result eligibility, and the 10-item slice was dropped so the full catalog is exposed to crawlers./videos/[slug]/: wrapped the previously orphanedVideoObjectin a proper@graph. SpreadsBASE_GRAPH_NODES, adds aWebPagenode that owns the 3-item breadcrumb and pointsmainEntityat theVideoObject, and addsVideoObject.isPartOf→ the gallery.VideoObject.publisherswitched from the fullORGANIZATION.ETHEREUM_FOUNDATIONobject toREFERENCE.ETHEREUM_FOUNDATION(the full object is already declared inBASE_GRAPH_NODES).{"@type": "VideoGallery", "@id": videoGalleryUrl}stub on the viewing page soVideoObject.isPartOf's cross-page@idresolves to a typed entity instead of the genericCreativeWorkfallback strict validators infer from an unresolved reference.Key decisions
VideoGalleryoverCollectionPage— more specific, and the subclass chain (VideoGallery is-a CollectionPage is-a WebPage) keeps it backward-compatible with anything that only understood the parent.WebPagewrapper on video pages — matches the pattern used by every other page on the site. The previously bareVideoObjectworked for Google's video rich result but was semantically orphaned from the site graph.VideoObject.isPartOfpoints to theVideoGallery, not theWebPageorWebSite. A video is naturally a part of the gallery collection; pointing at the page or the site is technically valid but semantically weak.VideoGalleryon the viewing page —@idreferences work across documents, but not every parser reconciles cross-document graphs. A{@type, @id}stub keeps the viewing page's graph self-contained without duplicating the canonical definition from/videos/page-jsonld.tsx.Test plan
/videos/locally, paste theapplication/ld+jsonfrom the DOM into validator.schema.org — expectVideoGallerywithItemListnested viamainEntity, no dangling references./videos/[slug]/for at least one slug, paste into validator.schema.org — expectWebPagewithVideoObjectnested viamainEntity,VideoGallerystub nested underVideoObject.isPartOf, and no genericCreativeWorkfallback.Message generated by Claude (Opus 4.7)