When a user visits any page on the Metaplex Developer Hub, the SEOHead component automatically generates comprehensive SEO tags.
For a Core documentation page at /core, here's what gets generated for each language:
/core)<head>
<!-- Primary Meta Tags -->
<title>Core | Metaplex Developer Hub</title>
<meta name="description" content="Learn about Metaplex Core NFT standard" />
<!-- Canonical URL - points to itself -->
<link rel="canonical" href="https://developers.metaplex.com/core" />
<!-- Language Alternates (hreflang) -->
<link rel="alternate" hreflang="en" href="https://developers.metaplex.com/core" />
<link rel="alternate" hreflang="ja" href="https://developers.metaplex.com/ja/core" />
<link rel="alternate" hreflang="ko" href="https://developers.metaplex.com/ko/core" />
<link rel="alternate" hreflang="x-default" href="https://developers.metaplex.com/core" />
<!-- Open Graph -->
<meta property="og:title" content="Core | Metaplex Developer Hub" />
<meta property="og:description" content="Learn about Metaplex Core NFT standard" />
<meta property="og:url" content="https://developers.metaplex.com/core" />
<meta property="og:type" content="website" />
<meta property="og:image" content="https://developers.metaplex.com/assets/social/dev-hub-preview.jpg" />
<meta property="og:locale" content="en_US" />
<meta property="og:locale:alternate" content="ja_JP" />
<meta property="og:locale:alternate" content="ko_KR" />
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Core | Metaplex Developer Hub" />
<meta name="twitter:description" content="Learn about Metaplex Core NFT standard" />
<meta name="twitter:image" content="https://developers.metaplex.com/assets/social/dev-hub-preview.jpg" />
<meta property="twitter:domain" content="developers.metaplex.com" />
</head>
/ja/core)<head>
<!-- Primary Meta Tags -->
<title>Core | Metaplex 開発者向け</title>
<meta name="description" content="Metaplex Core NFT標準について学ぶ" />
<!-- Canonical URL - points to ITSELF (Japanese version) -->
<link rel="canonical" href="https://developers.metaplex.com/ja/core" />
<!-- Language Alternates (hreflang) - SAME for all versions -->
<link rel="alternate" hreflang="en" href="https://developers.metaplex.com/core" />
<link rel="alternate" hreflang="ja" href="https://developers.metaplex.com/ja/core" />
<link rel="alternate" hreflang="ko" href="https://developers.metaplex.com/ko/core" />
<link rel="alternate" hreflang="x-default" href="https://developers.metaplex.com/core" />
<!-- Open Graph -->
<meta property="og:title" content="Core | Metaplex 開発者向け" />
<meta property="og:description" content="Metaplex Core NFT標準について学ぶ" />
<meta property="og:url" content="https://developers.metaplex.com/ja/core" />
<meta property="og:type" content="website" />
<meta property="og:image" content="https://developers.metaplex.com/assets/social/dev-hub-preview.jpg" />
<meta property="og:locale" content="ja_JP" />
<meta property="og:locale:alternate" content="en_US" />
<meta property="og:locale:alternate" content="ko_KR" />
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Core | Metaplex 開発者向け" />
<meta name="twitter:description" content="Metaplex Core NFT標準について学ぶ" />
<meta name="twitter:image" content="https://developers.metaplex.com/assets/social/dev-hub-preview.jpg" />
<meta property="twitter:domain" content="developers.metaplex.com" />
</head>
/ko/core)<head>
<!-- Primary Meta Tags -->
<title>Core | Metaplex 개발자 허브</title>
<meta name="description" content="Metaplex Core NFT 표준에 대해 알아보기" />
<!-- Canonical URL - points to ITSELF (Korean version) -->
<link rel="canonical" href="https://developers.metaplex.com/ko/core" />
<!-- Language Alternates (hreflang) - SAME for all versions -->
<link rel="alternate" hreflang="en" href="https://developers.metaplex.com/core" />
<link rel="alternate" hreflang="ja" href="https://developers.metaplex.com/ja/core" />
<link rel="alternate" hreflang="ko" href="https://developers.metaplex.com/ko/core" />
<link rel="alternate" hreflang="x-default" href="https://developers.metaplex.com/core" />
<!-- Open Graph -->
<meta property="og:title" content="Core | Metaplex 개발자 허브" />
<meta property="og:description" content="Metaplex Core NFT 표준에 대해 알아보기" />
<meta property="og:url" content="https://developers.metaplex.com/ko/core" />
<meta property="og:type" content="website" />
<meta property="og:image" content="https://developers.metaplex.com/assets/social/dev-hub-preview.jpg" />
<meta property="og:locale" content="ko_KR" />
<meta property="og:locale:alternate" content="en_US" />
<meta property="og:locale:alternate" content="ja_JP" />
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Core | Metaplex 개발자 허브" />
<meta name="twitter:description" content="Metaplex Core NFT 표준에 대해 알아보기" />
<meta name="twitter:image" content="https://developers.metaplex.com/assets/social/dev-hub-preview.jpg" />
<meta property="twitter:domain" content="developers.metaplex.com" />
</head>
Each language version points to itself as canonical:
Why? Tells Google these are all equally important, just in different languages.
All three versions have the exact same hreflang tags pointing to all alternates.
Why? Creates a complete bidirectional relationship between language versions.
Each version declares its own locale and lists others as alternates:
og:locale="en_US" + alternates for ja_JP, ko_KRog:locale="ja_JP" + alternates for en_US, ko_KRog:locale="ko_KR" + alternates for en_US, ja_JPWhy? Social media platforms serve the right version when shared.
All versions include hreflang="x-default" pointing to English.
Why? If user's language isn't available, Google serves the default (English).
/ja/core/ko/core/core/core (x-default)/core → Shows English title/description/ja/core → Shows Japanese title/description/ko/core → Shows Korean title/descriptionGoogle understands these are translations, not duplicates, because:
After deployment, test with:
Google Rich Results Test
Facebook Sharing Debugger
Twitter Card Validator
Google Search Console
All of this is handled automatically by the SEOHead component:
// In _app.jsx
<SEOHead
title={page.title} // From markdown frontmatter
description={page.description}
metaTitle={page.metaTitle}
locale={page.locale} // Auto-detected from URL
/>
The component:
Zero manual configuration needed per page! 🎉