seo-hreflang について
HTML、HTTPヘッダー、XMLサイトマップのhreflangを検証・生成する国際SEOスキルです。言語間のコンテンツ整合性、ロケール形式、文化的な適応も監査します。
主な機能
- 01hreflangの関係とコードの検証
- 02タグとサイトマップ項目の生成
- 03canonicalとプロトコルの整合性確認
- 04多言語コンテンツの整合性監査
- 05ロケール形式と文化適応の評価
活用シーン
- 01多言語サイトのhreflang検証
- 02サイトマップ用hreflangの生成
- 03翻訳ページやSEO要素の欠落発見
- 04地域別形式と文化適応の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ agricidaniel/ codex-seo --skill seo-hreflangインストール後、Claude Code で/seo-hreflangを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSE.txtreferences/content-parity.mdcultural-profiles.mdlocale-formats.md詳細
Hreflang と国際 SEO
共有データキャッシュ
ステップ 0 -- 共有データキャッシュを確認する:
情報を収集する前に、関連する SEO スキルから再利用できるコンテキストが .seo-cache/ にないか確認してください。
スキーマと依存関係マップについては、../seo/references/shared-data-cache.md を参照してください。
次のキャッシュファイルが存在する場合は確認してください:
-
ドメイン、ビジネスタイプ、業界、クロールのコンテキストについては
.seo-cache/site-meta.json -
以前のフル監査での優先事項については
.seo-cache/audit-scores.json -
URL が指定されている場合、ページレベルのコンテキストについては
.seo-cache/pages/{url-slug}/page-analysis.json -
見つかった場合:明らかに有効なフィールドを解析して使用します(「[日付] 時点のキャッシュ済み [X] を使用」と記録します)
-
存在しない、破損している、または関連性がない場合:新たな根拠を用いて続行します
-
ユーザーが「refresh」または「re-run」と指定した場合:キャッシュの読み取りを無視し、書き込み時に上書きします
多言語・多地域サイトで、hreflang の実装を検証するか、正しい hreflang タグを生成します。 HTML、HTTP ヘッダー、XML サイトマップによる実装に対応しています。
検証項目
1. 自己参照タグ
- すべてのページに、自身を指す hreflang タグを含める必要があります
- 自己参照 URL は、ページの canonical URL と完全に一致する必要があります
- 自己参照タグがない場合、Google は hreflang セット全体を無視します
2. リターンタグ
- ページ A が hreflang でページ B にリンクしている場合、ページ B もページ A にリンクする必要があります
- すべての hreflang 関係は双方向である必要があります(A→B と B→A)
- リターンタグがない場合、両方のページで hreflang シグナルが無効になります
- すべての言語バージョンが相互に参照していることを確認します(完全メッシュ)
3. x-default タグ
- 必須:一致する言語・地域がない場合のフォールバックページを指定します
- 通常は言語選択ページまたは英語版を指定します
- 代替ページのセットごとに x-default は 1 つだけ指定できます
- 他のすべての言語バージョンからのリターンタグも必要です
4. 言語コードの検証
- ISO 639-1 の 2 文字コードを使用する必要があります(例:
en、fr、de、ja) - よくある間違い:
enではなくengを使用する(ISO 639-2 であり、hreflang では無効)jaではなくjpを使用する(日本語のコードとして誤り)- 地域指定子なしで
zhを使用する(曖昧なため、zh-Hansまたはzh-Hantを使用)
5. 地域コードの検証
- 任意の地域指定子には ISO 3166-1 Alpha-2 を使用します(例:
en-US、en-GB、pt-BR) - 形式:
言語-地域(言語は小文字、地域は大文字) - よくある間違い:
en-GBではなくen-ukを使用する(UK は有効な ISO 3166-1 コードではありません)es-LAを使用する(ラテンアメリカは国ではないため、個別の国を指定します)- 言語の接頭辞なしで地域を指定する
6. canonical URL との整合性
- hreflang タグは canonical URL にのみ配置する必要があります
- ページの
rel=canonicalが別の URL を指している場合、そのページの hreflang は無視されます - canonical URL と hreflang URL は完全に一致する必要があります(末尾のスラッシュも含む)
- canonical でないページを hreflang セットに含めてはいけません
7. プロトコルの一貫性
- hreflang セット内のすべての URL で、同じプロトコル(HTTPS または HTTP)を使用する必要があります
- hreflang セット内で HTTP と HTTPS が混在すると、検証に失敗します
- HTTPS へ移行した後は、すべての hreflang タグを HTTPS に更新します
8. クロスドメイン対応
- hreflang は異なるドメイン間でも機能します(例:example.com と example.de)
- クロスドメインの hreflang では、両方のドメインにリターンタグが必要です
- 両方のドメインが Google Search Console で認証済みであることを確認します
- クロスドメイン構成では、サイトマップによる実装を推奨します
よくある間違い
| 問題 | 重大度 | 修正方法 |
|---|---|---|
| 自己参照タグがない | 致命的 | 同じページの URL を指す hreflang を追加する |
| 戻りタグがない(A→B はあるが B→A がない) | 致命的 | すべての代替ページに対応する戻りタグを追加する |
| x-default がない | 高 | フォールバックページまたは選択ページを指す x-default を追加する |
言語コードが無効(例:eng) | 高 | ISO 639-1 の 2 文字コードを使用する |
地域コードが無効(例:en-uk) | 高 | ISO 3166-1 Alpha-2 コードを使用する |
| canonical ではない URL に hreflang がある | 高 | hreflang を canonical URL のみに移動する |
| URL の HTTP/HTTPS が一致していない | 中 | すべての URL を HTTPS に統一する |
| 末尾のスラッシュに一貫性がない | 中 | canonical URL の形式に完全に合わせる |
| HTML とサイトマップの両方に hreflang がある | 低 | いずれか一方を選ぶ(大規模サイトではサイトマップを推奨) |
| 必要な場合に地域指定のない言語を使用している | 低 | 地域を対象とするコンテンツには地域修飾子を追加する |
実装方法
方法 1:HTML リンクタグ
最適な対象:ページごとの言語/地域のバリエーションが 50 未満のサイト。
<link rel="alternate" hreflang="en-US" href="https://example.com/page" />
<link rel="alternate" hreflang="en-GB" href="https://example.co.uk/page" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/page" />
<link rel="alternate" hreflang="x-default" href="https://example.com/page" />
<head> セクションに配置します。すべてのページに、自分自身を含むすべての代替ページを記述する必要があります。
方法 2:HTTP ヘッダー
最適な対象:HTML 以外のファイル(PDF、ドキュメント)。
Link: <https://example.com/page>; rel="alternate"; hreflang="en-US",
<https://example.com/fr/page>; rel="alternate"; hreflang="fr",
<https://example.com/page>; rel="alternate"; hreflang="x-default"
サーバー設定または CDN ルールを使って設定します。
方法 3:XML サイトマップ(大規模サイトに推奨)
最適な対象:言語のバリエーションが多いサイト、ドメインをまたぐ構成、または 50 ページ以上のサイト。
以下の「Hreflang サイトマップの生成」セクションを参照してください。
方法の比較
| 方法 | 最適な対象 | メリット | デメリット |
|---|---|---|---|
| HTML リンクタグ | 小規模サイト(バリエーション 50 未満) | 実装が簡単で、ソースから確認できる | <head> が肥大化し、大規模運用では保守が困難 |
| HTTP ヘッダー | HTML 以外のファイル | PDF や画像に対応 | サーバー設定が複雑で、HTML から確認できない |
| XML サイトマップ | 大規模サイト、ドメインをまたぐ構成 | 拡張性が高く、一元管理できる | ページ上から確認できず、サイトマップの保守が必要 |
Hreflang の生成
プロセス
- 言語を検出する:言語を示す情報(URL パス、サブドメイン、TLD、HTML の lang 属性)をサイト全体からスキャンします
- ページの対応関係を特定する:言語/地域ごとに対応するページを照合します
- 言語コードを検証する:すべてのコードが ISO 639-1 および ISO 3166-1 に準拠していることを確認します
- タグを生成する:自己参照を含め、各ページの hreflang タグを作成します
- 戻りタグを確認する:すべての関係が双方向であることを確認します
- x-default を追加する:各ページセットにフォールバックを設定します
- 出力する:実装コード(HTML、HTTP ヘッダー、またはサイトマップ XML)を生成します
Hreflang サイトマップの生成
Hreflang を含むサイトマップ
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://example.com/page</loc>
<xhtml:link rel="alternate" hreflang="en-US" href="https://example.com/page" />
<xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/page" />
<xhtml:link rel="alternate" hreflang="de" href="https://example.de/page" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/page" />
</url>
<url>
<loc>https://example.com/fr/page</loc>
<xhtml:link rel="alternate" hreflang="en-US" href="https://example.com/page" />
<xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/page" />
<xhtml:link rel="alternate" hreflang="de" href="https://example.de/page" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/page" />
</url>
</urlset>
主なルール:
xmlns:xhtml名前空間宣言を含めます- 各
<url>エントリには、(そのページ自身を含む)すべての言語の代替ページを含める必要があります - 各代替ページは、独自の完全なセットを含む個別の
<url>エントリとして記載する必要があります - サイトマップファイルあたり 50,000 URL を上限として分割します
出力
Hreflang 検証レポート
概要
- スキャンしたページの合計:XX
- 検出した言語のバリエーション:XX
- 検出した問題:XX(致命的:X、高:X、中:X、低:X)
検証結果
| 言語 | URL | 自己参照 | 戻りタグ | x-default | ステータス |
|---|---|---|---|---|---|
| en-US | https://... | ✅ | ✅ | ✅ | ✅ |
| fr | https://... | ❌ | ⚠️ | ✅ | ❌ |
| de | https://... | ✅ | ❌ | ✅ | ❌ |
生成された Hreflang タグ
- HTML
<link>タグ(HTML 方式を選択した場合) - HTTP ヘッダーの値(ヘッダー方式を選択した場合)
hreflang-sitemap.xml(サイトマップ方式を選択した場合)
推奨事項
- 追加が必要な実装
- 修正が必要なコード
- 方式の移行に関する提案(例:規模拡大に伴う HTML からサイトマップへの移行)
文化的適応の評価
多言語サイトを分析する際は、技術的な hreflang の検証だけでなく、各ターゲット市場向けにコンテンツが文化的に適応されているかどうかも評価します。
事前作成済みのプロファイル(DACH、フランス語圏、ヒスパニック圏、日本語)については、references/cultural-profiles.md を読み込みます。
評価手順:
- すべての言語版とターゲット市場を特定します
- 該当する文化プロファイルを読み込みます
- CTA が文化的な期待(直接的か間接的か)に合っているか確認します
- 信頼性を示す要素が地域に適しているか(認証、法的ページ)確認します
- ローカライズされたページに外国ブランドへの言及がないか確認します
- 数値/日付/通貨の書式に一貫性があるか確認します
- 文化的適応に関する問題を Medium の重大度として報告します
出力: 言語版ごとの文化的適応スコア(0~100)と具体的な指摘事項。
コンテンツの同等性監査
コマンド: /seo hreflang audit <directory-or-url>
サイトまたはローカルのコンテンツディレクトリにあるすべての言語版を対象に、コンテンツの同等性を監査します。
完全な同等性マトリックスと採点方法については、references/content-parity.md を読み込みます。
確認項目:
- 宣言されているすべての言語でページが存在するか
- セクション構成が同等か(H2/H3 の数)
- SEO 要素が同等か(タイトル、メタデータ、スキーマのローカライズ)
- 単語数の比率が適切か(DE は EN より 25~35%長く、JA は 10~25%短くなるはずです)
- 鮮度の追跡(タイムスタンプを使って古い翻訳を検出)
- 文化的マーカーのスキャン(外国ブランド、不適切な法的参照、未翻訳の要素)
出力: ページごとのスコアと優先順位付きアクション項目を含む同等性マトリックスの表。
ロケール書式の検証
ロケールごとの数値、日付、通貨、住所、電話番号の書式をまとめた参照表については、references/locale-formats.md を読み込みます。
確認項目:
- 数値書式の一貫性(例:de-DE のページでは「1,000.00」を「1.000,00」にする必要があります)
- 日付書式がロケールの慣習に合っているか
- ターゲット市場に適した通貨記号と配置か
- 電話番号が正しい国番号を含む国際形式か
参照ファイル
必要に応じて読み込みます(起動時にすべて読み込まないでください)。
references/cultural-profiles.md:DACH、フランス語圏、ヒスパニック圏、日本語の文化的適応プロファイルreferences/locale-formats.md:ロケールごとの数値、日付、通貨、住所、電話番号の書式表references/content-parity.md:コンテンツ同等性監査の方法と採点
エラー処理
| 状況 | 対応 |
|---|---|
| URL に到達できない(DNS エラー、接続拒否) | エラーを明確に報告します。サイト構成を推測しないでください。ユーザーに URL を確認して再試行するよう提案します。 |
| hreflang タグが見つからない | 見つからないことを報告します。その他の国際化シグナル(サブディレクトリ、サブドメイン、ccTLD)を確認し、適切な hreflang の実装方法を推奨します。 |
| 無効な言語コード/地域コードが検出された | 無効なコードを正しい置き換え先とともに列挙します。すぐに実装できる修正済み hreflang タグセットを提示します。 |
| 該当言語の文化プロファイルがない | cultural-profiles.md のデフォルトプロファイルのチェックリストを使用します。事前作成済みのプロファイルではなく、一般的なガイドラインに基づく評価であることを明記します。 |
| コンテンツ同等性の対象ディレクトリが空 | コンテンツファイルが見つからなかったことを報告します。ディレクトリパスを確認するか、公開サイトを分析するために URL を提示するよう提案します。 |
共有データキャッシュへの書き込み
すべての作業が完了し、ワークフローで永続的な調査結果が得られた場合は、簡潔な JSON サマリーを .seo-cache/ に書き込みます。
../seo/references/shared-data-cache.md のスキーマと命名規則を使用します。少なくとも cache_type、analyzed_at、ソース URL/ドメイン、主な調査結果、問題、推奨事項、ツールの制限を含めます。.gitignore に .seo-cache/ がなければ追加します。