Skip to content

fix(seo): fix JSON-LD structured data on /wallets/find-wallet/#17721

Merged
wackerow merged 3 commits intoethereum:devfrom
konopkja:fix/find-wallet-jsonld
Mar 6, 2026
Merged

fix(seo): fix JSON-LD structured data on /wallets/find-wallet/#17721
wackerow merged 3 commits intoethereum:devfrom
konopkja:fix/find-wallet-jsonld

Conversation

@konopkja
Copy link
Contributor

@konopkja konopkja commented Mar 5, 2026

Summary

  • Fix i18n namespace bug: page-jsonld.tsx used namespace "page-find-wallet" instead of "page-wallets-find-wallet", causing all translation keys to output as raw strings (e.g. "page-find-wallet-meta-title" instead of "List of Ethereum Wallets") in the JSON-LD script tag
  • Replace incorrect Article schema type: the find-wallet page is an interactive comparison tool, not an article. Changed to CollectionPage + ItemList with SoftwareApplication entries per wallet, matching the pattern already used on /layer-2/networks/
  • Add wallet metadata to structured data: each wallet now includes platform availability, open source status, self custody, hardware wallet support, L2 support, staking, and NFT support as additionalProperty values

Context

The HTML <title> and <meta> tags were correctly translated — only the JSON-LD block had the wrong namespace, so the bug was invisible in the browser but broken for search engines.

The ArticleCollectionPage + ItemList + SoftwareApplication change follows the same approach as app/[locale]/layer-2/networks/page-jsonld.tsx and gives Google actionable structured data about the actual wallets on the page.

Closes #17719

Test plan

  • Verify JSON-LD output contains translated text (not raw i18n keys) by viewing page source or using Google Rich Results Test
  • Verify CollectionPage and ItemList render correctly in structured data
  • Verify wallet count in numberOfItems matches displayed wallets
  • Check non-English locale (e.g. /es/wallets/find-wallet/) also outputs translated JSON-LD

🤖 Generated with Claude Code

…let/

- Fix i18n namespace from "page-find-wallet" to "page-wallets-find-wallet"
  so translation keys resolve to actual text instead of raw keys
- Replace incorrect Article type with CollectionPage + ItemList containing
  SoftwareApplication entries per wallet (matches layer-2/networks pattern)
- Include wallet metadata (platforms, open source, self custody, L2 support,
  staking, NFT support) as structured properties for rich results

Closes ethereum#17719

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@netlify
Copy link

netlify bot commented Mar 5, 2026

Deploy Preview for ethereumorg ready!

Name Link
🔨 Latest commit 58744aa
🔍 Latest deploy log https://app.netlify.com/projects/ethereumorg/deploys/69aa3ba4fc97bc0008c6af98
😎 Deploy Preview https://deploy-preview-17721.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: 62 (🟢 up 2 from production)
Accessibility: 94 (🟢 up 1 from production)
Best Practices: 100 (no change from production)
SEO: 99 (no change 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.

@myelinated-wackerow
Copy link
Collaborator

Review Summary

What this PR fixes well

Namespace bug fix -- The core fix ("page-find-wallet" -> "page-wallets-find-wallet") is correct and important. The page-find-wallet namespace doesn't exist as a translation file, so every t() call in the JSON-LD was emitting raw key strings to search engines. The browser-visible <title> and <meta> tags were unaffected since page.tsx and generateMetadata already used the correct namespace -- making this bug invisible to humans but broken for crawlers.

Schema type change -- Replacing Article with CollectionPage + ItemList of SoftwareApplication entries is semantically accurate for an interactive comparison tool, and consistent with the existing layer-2/networks/page-jsonld.tsx pattern.

Wallet metadata in structured data -- Adding platform availability, open source status, self custody, L2 support, staking, and NFT support as additionalProperty values gives Google actionable structured data about each wallet.


Suggestions before merging

1. chromium maps to "Chrome OS" -- this is inaccurate

if (wallet.chromium) os.push("Chrome OS")

The chromium field indicates a Chromium browser extension, not Chrome OS operating system support. Consider "Chromium (Extension)" or similar. As-is, this would misrepresent wallet capabilities to search engines.

2. Dropped image property -- SEO regression

The old Article node had image: "https://ethereum.org/images/wallets/wallet-hero.png". The new schema drops this entirely. Google's structured data guidelines favor entries with images for rich results. Consider keeping an image on the CollectionPage node, or adding per-wallet images using wallet.image on each SoftwareApplication.

3. Minor: CollectionPage vs WebPage inconsistency with reference

The first @graph node was changed from "WebPage" to "CollectionPage". The layer-2/networks reference keeps "WebPage". CollectionPage is arguably more accurate here (it's a valid subtype), but the two list pages should probably be consistent -- either update both or keep both as WebPage.

Items 1 and 2 are worth addressing before merge. Item 3 is minor.


Reviewed by Claude (Opus 4.6)

myelinated-wackerow and others added 2 commits March 6, 2026 02:26
The chromium field indicates browser extension support,
not Chrome OS. "Chrome OS" misrepresents wallet
capabilities to search engines.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Re-add the hero image to the CollectionPage node.
It was present on the old Article node but dropped
during the schema type migration.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: wackerow <54227730+wackerow@users.noreply.github.com>
Copy link
Collaborator

@myelinated-wackerow myelinated-wackerow left a comment

Choose a reason for hiding this comment

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

Approved

The namespace fix alone is valuable -- raw i18n keys were being emitted to search engines while the browser-visible title/meta tags worked fine. The schema migration from Article to CollectionPage + ItemList is the right call for a comparison tool page.

Two follow-up commits have been pushed addressing review feedback:

  • Chromium platform label: "Chrome OS" corrected to "Chromium (Extension)" -- the chromium field represents browser extension support, not an operating system
  • Restored hero image: Re-added image property on the CollectionPage node that was dropped during the Article -> CollectionPage migration

A separate issue (#17724) has been opened to align layer-2/networks/page-jsonld.tsx with the CollectionPage type used here.


Reviewed by Claude (Opus 4.6)

@wackerow wackerow merged commit 6716d46 into ethereum:dev Mar 6, 2026
7 of 8 checks passed
@wackerow wackerow mentioned this pull request Mar 6, 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.

fix(seo): JSON-LD structured data contains untranslated i18n keys on /wallets/find-wallet/

3 participants