Skip to content

Enhance homepage Schema.org structured data#16866

Merged
corwintines merged 9 commits into
devfrom
addMetadata
Dec 17, 2025
Merged

Enhance homepage Schema.org structured data#16866
corwintines merged 9 commits into
devfrom
addMetadata

Conversation

@minimalsm
Copy link
Copy Markdown
Contributor

@minimalsm minimalsm commented Dec 11, 2025

Changes

  • Add standalone WebSite schema with @id for proper graph linking between schemas
  • Add EducationalOrganization type via additionalType to signal educational purpose
  • Add knowsAbout property listing expertise areas: Ethereum, blockchain, cryptocurrency, DeFi, smart contracts, Web3, decentralized applications
  • Add parentOrganization referencing Ethereum Foundation to establish authority chain
  • Use @id references to properly link WebSite, WebPage, and Organization schemas into a connected graph
  • Fix foundingDate to 2015 (Ethereum network launch year)
  • Remove deprecated SearchAction - Google sunset the sitelinks search box feature in November 2024
  • Clean up redundant properties - removed author/reviewedBy since publisher is sufficient

Schema Graph Structure

WebSite (#website)
    └─> publisher: Organization (#organization)

WebPage (locale URL)
    ├─> isPartOf: WebSite (#website)
    ├─> publisher: Organization (#organization)
    ├─> about: Organization (#organization)
    └─> mainEntity: Organization (#organization)

Organization (#organization)
    ├─> additionalType: EducationalOrganization
    ├─> logo: ImageObject (#logo)
    └─> parentOrganization: Ethereum Foundation

Notes

  • EducationalOrganization and knowsAbout are valid Schema.org vocabulary but not specifically recognized by Google's rich results - they still provide semantic value and may be used by other structured
    data consumers
  • The @id hash fragments (#website, #organization, #logo) are JSON-LD node identifiers for graph linking, not actual URLs

Test plan

Summary by CodeRabbit

  • Chores
    • Updated homepage structured metadata, including revised publisher details, enhanced maintainer information, and additional platform description attributes.

✏️ Tip: You can customize this high-level summary in your review settings.

- Add standalone WebSite schema with @id for proper graph linking
- Add EducationalOrganization as additionalType to signal educational purpose
- Add knowsAbout property listing expertise areas (Ethereum, blockchain, DeFi, etc.)
- Add parentOrganization referencing Ethereum Foundation
- Use @id references to link WebSite, WebPage, and Organization schemas
- Fix foundingDate to 2015 (Ethereum network launch)
- Remove deprecated SearchAction (Google sunset sitelinks search box Nov 2024)
- Clean up redundant author/reviewedBy properties (publisher suffices)

These changes help establish ethereum.org as an authoritative educational
resource, which is important for YMYL (Your Money Your Life) content
classification by search engines.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@mnelsonBT
Copy link
Copy Markdown
Contributor

Please do not merge this into the other changes in its current state. @minimalsm can you please change this PR to draft?

@minimalsm minimalsm marked this pull request as draft December 11, 2025 20:53
Replace multi-schema approach with single WebSite schema optimized for
EEAT (Experience, Expertise, Authoritativeness, Trust) signals:

- Use WebSite as primary type (educational platform vs business entity)
- Set publisher to Ethereum Foundation (avoids self-referential loop)
- Add Wikidata sameAs links for Knowledge Graph integration
  - Ethereum Foundation: Q114736857
  - Ethereum network: Q16783523
- Add MIT license URL (open-source signal)
- Add EducationalAudience with developer role
- Set educationalUse to "instruction" (LRMI vocabulary)
- Add maintainer referencing GitHub contributors
- Define "about" as Ethereum (SoftwareApplication) with Wikipedia/GitHub links
- Add keywords for YMYL disambiguation from financial products

This approach establishes ethereum.org as an educational resource
published by a recognized non-profit (EF) rather than self-vouching.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@minimalsm
Copy link
Copy Markdown
Contributor Author

@coderabbitai please review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Dec 11, 2025

@minimalsm: I'll review the changes in this PR that enhance the Schema.org structured data for the homepage.

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Dec 11, 2025

Walkthrough

Modified the homepage JSON-LD structured data schema in a single file, transitioning from a WebPage-based structure to a WebSite-based structure. Updated publisher information, replaced review blocks with maintainer details, introduced an about section, and consolidated the output to return a single JSON-LD entry.

Changes

Cohort / File(s) Summary
JSON-LD Schema Restructuring
app/[locale]/page-jsonld.tsx
Updated homepage structured data: replaced WebPage @type with WebSite; expanded publisher details (renamed to Ethereum Foundation, added ownershipFundingInfo, logo, sameAs links); replaced reviewedBy with maintainer block; introduced about block defining Ethereum as SoftwareApplication; removed separate organization JSON-LD block; consolidated output to single webSiteJsonLd entry

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

  • Verify JSON-LD schema correctness and semantic alignment with WebSite type requirements
  • Confirm that the migration from WebPage to WebSite is appropriate for the use case
  • Review publisher and maintainer field mappings and URL accuracy
  • Validate the about/SoftwareApplication structure and all sameAs references

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Enhance homepage Schema.org structured data' directly and clearly summarizes the main change: improving the JSON-LD schema structure on the homepage with a WebSite-based structure, enhanced publisher details, and better schema graph linking.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch addMetadata

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
app/[locale]/page-jsonld.tsx (1)

54-67: Consider translating the about.description for i18n SEO benefits.

The about section's description is hardcoded in English. While Schema.org metadata is often kept in English, translating this description could improve SEO in non-English locales since it may appear in search results.

You could add a translation key and use:

       description:
-        "A decentralized, open-source blockchain with smart contract functionality.",
+        t("page-index-about-ethereum-description"),
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 51aba45 and 71b575f.

📒 Files selected for processing (1)
  • app/[locale]/page-jsonld.tsx (1 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
app/**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

app/**/*.{ts,tsx}: Use kebab-case for page files following Next.js conventions
Prioritize Server Components; use App Router and Server Components when possible

Files:

  • app/[locale]/page-jsonld.tsx
**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.{ts,tsx}: Use interface for defining object shapes in TypeScript, and type for unions and intersections
Avoid using any types; use unknown instead and prefer explicit typing (ESLint enforces fixToUnknown)
Export types from dedicated files in @/lib/types

Files:

  • app/[locale]/page-jsonld.tsx
{app,src/components}/**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

Ensure all user-facing text is translatable using getTranslations and getLocale helpers

Files:

  • app/[locale]/page-jsonld.tsx
🧬 Code graph analysis (1)
app/[locale]/page-jsonld.tsx (1)
src/components/PageJsonLD.tsx (1)
  • PageJsonLD (5-21)
🔇 Additional comments (3)
app/[locale]/page-jsonld.tsx (3)

20-30: LGTM! Schema structure follows JSON-LD best practices.

The transition from WebPage to WebSite schema is appropriate for the homepage. The @id using a hardcoded base URL is correct for JSON-LD entity identification, while the url field uses the localized path. Technical metadata like keywords and educationalUse are acceptable in English.


70-70: LGTM! Array wrapping is compatible with PageJsonLD.

The return statement correctly wraps the structured data in an array, which the PageJsonLD component handles properly by iterating over the array to generate script tags.


20-68: Verify implementation matches PR objectives.

The PR description mentions several features that are not present in the current implementation:

  1. Missing: Organization additionalType: "EducationalOrganization"
  2. Missing: knowsAbout property with expertise areas
  3. Missing: foundingDate: 2015
  4. Missing: Separate Organization schema with @id: "#organization" for graph linking
  5. Missing: WebPage schema linking to WebSite via isPartOf

Instead, the code implements audience: EducationalAudience, maintainer, and about sections which aren't described in the PR objectives.

Since this is a draft PR and mnelsonBT requested not to merge, please confirm whether the current implementation represents the intended schema structure or if it's still being aligned with the PR description.

Comment thread app/[locale]/page-jsonld.tsx Outdated
name: "Ethereum Foundation",
url: "https://ethereum.foundation",
ownershipFundingInfo: "https://ethereum.foundation/ef",
logo: "https://cdn.jsdelivr.net/gh/ethereum/ethereum-foundation-website@master/src/assets/images/ef-logo.svg",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Replace external CDN logo URL with stable source.

The logo URL uses jsDelivr CDN pointing to the master branch of an external GitHub repository. This creates a fragile dependency that could break if:

  • The upstream repository is restructured or deleted
  • The file path changes
  • The master branch is renamed

Consider using a direct URL to ethereum.foundation's hosted logo or a local asset instead.

-      logo: "https://cdn.jsdelivr.net/gh/ethereum/ethereum-foundation-website@master/src/assets/images/ef-logo.svg",
+      logo: "https://ethereum.foundation/images/ef-logo.svg",

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In app/[locale]/page-jsonld.tsx around line 42, replace the fragile jsDelivr CDN
URL for the logo with a stable source: either point to the official
ethereum.foundation-hosted absolute URL or move the SVG into the app's static
assets (e.g. public/images/ef-logo.svg) and reference that local path; update
the JSON-LD property to use the new absolute or local URL and ensure the asset
path is correct for production builds.

@corwintines corwintines self-assigned this Dec 14, 2025
@github-actions github-actions Bot added the tooling 🔧 Changes related to tooling of the project label Dec 15, 2025
Base automatically changed from homepageSEO to dev December 15, 2025 20:47
@corwintines corwintines marked this pull request as ready for review December 16, 2025 16:38
Comment thread src/lib/utils/jsonld.ts Outdated
@netlify
Copy link
Copy Markdown

netlify Bot commented Dec 16, 2025

Deploy Preview for ethereumorg ready!

Name Link
🔨 Latest commit 83ebfcf
🔍 Latest deploy log https://app.netlify.com/projects/ethereumorg/deploys/69430cc7fa4dab0008817978
😎 Deploy Preview https://deploy-preview-16866--ethereumorg.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
Lighthouse
Lighthouse
7 paths audited
Performance: 45 (🔴 down 7 from production)
Accessibility: 94 (no change from production)
Best Practices: 92 (🔴 down 8 from production)
SEO: 100 (🟢 up 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.

Comment thread src/lib/utils/jsonld.ts Outdated
Co-authored-by: mnelsonBT <74370515+mnelsonBT@users.noreply.github.com>
Copy link
Copy Markdown
Member

@pettinarip pettinarip left a comment

Choose a reason for hiding this comment

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

LGTM

Comment on lines 81 to 82
reviewedBy: {
"@type": "Organization",
Copy link
Copy Markdown
Member

@pettinarip pettinarip Dec 17, 2025

Choose a reason for hiding this comment

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

shouldn't it be ethereumFoundationOrganization like the others?

Comment thread src/lib/utils/jsonld.ts Outdated
@corwintines corwintines merged commit 244cb2d into dev Dec 17, 2025
6 checks passed
@corwintines corwintines deleted the addMetadata branch December 17, 2025 22:06
This was referenced Dec 18, 2025
@wackerow wackerow mentioned this pull request Jan 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

tooling 🔧 Changes related to tooling of the project

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants