Skip to content

seo(jsonld): VideoGallery + WebPage for video pages#18026

Merged
wackerow merged 3 commits into
devfrom
jsonld-videos
Apr 23, 2026
Merged

seo(jsonld): VideoGallery + WebPage for video pages#18026
wackerow merged 3 commits into
devfrom
jsonld-videos

Conversation

@wackerow
Copy link
Copy Markdown
Member

@wackerow wackerow commented Apr 23, 2026

Summary

  • /videos/: promoted CollectionPage to VideoGallery (more specific subclass per Schema.org's CollectionPage > MediaGallery > VideoGallery hierarchy). ItemList retained as mainEntity for carousel rich-result eligibility, and the 10-item slice was dropped so the full catalog is exposed to crawlers.
  • /videos/[slug]/: wrapped the previously orphaned VideoObject in a proper @graph. Spreads BASE_GRAPH_NODES, adds a WebPage node that owns the 3-item breadcrumb and points mainEntity at the VideoObject, and adds VideoObject.isPartOf → the gallery. VideoObject.publisher switched from the full ORGANIZATION.ETHEREUM_FOUNDATION object to REFERENCE.ETHEREUM_FOUNDATION (the full object is already declared in BASE_GRAPH_NODES).
  • Added a minimal {"@type": "VideoGallery", "@id": videoGalleryUrl} stub on the viewing page so VideoObject.isPartOf's cross-page @id resolves to a typed entity instead of the generic CreativeWork fallback strict validators infer from an unresolved reference.

Key decisions

  • VideoGallery over CollectionPage — more specific, and the subclass chain (VideoGallery is-a CollectionPage is-a WebPage) keeps it backward-compatible with anything that only understood the parent.
  • WebPage wrapper on video pages — matches the pattern used by every other page on the site. The previously bare VideoObject worked for Google's video rich result but was semantically orphaned from the site graph.
  • VideoObject.isPartOf points to the VideoGallery, not the WebPage or WebSite. A video is naturally a part of the gallery collection; pointing at the page or the site is technically valid but semantically weak.
  • Minimal type-assertion stub for VideoGallery on the viewing page — @id references 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

  • Render /videos/ locally, paste the application/ld+json from the DOM into validator.schema.org — expect VideoGallery with ItemList nested via mainEntity, no dangling references.
  • Render /videos/[slug]/ for at least one slug, paste into validator.schema.org — expect WebPage with VideoObject nested via mainEntity, VideoGallery stub nested under VideoObject.isPartOf, and no generic CreativeWork fallback.
  • Browser smoke-test the gallery and at least one video page.
  • Verify breadcrumb renders correctly on the video page UI.

Message generated by Claude (Opus 4.7)

- 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)
@netlify
Copy link
Copy Markdown

netlify Bot commented Apr 23, 2026

Deploy Preview for ethereumorg ready!

Name Link
🔨 Latest commit 93e2cec
🔍 Latest deploy log https://app.netlify.com/projects/ethereumorg/deploys/69ea80517531e90008058b9f
😎 Deploy Preview https://deploy-preview-18026.ethereum.it
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
Lighthouse
Lighthouse
7 paths audited
Performance: 57 (🔴 down 1 from production)
Accessibility: 93 (no change from production)
Best Practices: 100 (no change from production)
SEO: 98 (🔴 down 1 from production)
PWA: 59 (no change from production)
View the detailed breakdown and full score reports

To edit notification comments on pull requests, go to your Netlify project configuration.

Copy link
Copy Markdown
Contributor

@mnelsonBT mnelsonBT left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks excellent - thank you @wackerow !

@wackerow
Copy link
Copy Markdown
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.

@wackerow wackerow merged commit 1f594f9 into dev Apr 23, 2026
9 checks passed
@wackerow wackerow deleted the jsonld-videos branch April 23, 2026 22:26
@wackerow wackerow mentioned this pull request Apr 24, 2026
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