セットを解釈可能に保つ 4 つのルール
hreflang は複数ページ間のアノテーションの集合なので、一方のエラーが Google の関係解釈に影響することがあります。Google は、リターンリンクの欠落や無効なアノテーションは無視されたり誤って解釈されたりする可能性があると説明しています。ただし、1 つの誤りが必ずクラスター全体を無効にするとはしていません。
- 完全であること:グループ内の各版が、他のすべての版を列挙する。
- 相互: X が Y を指している場合、Y は X を指している必要があります。リターン リンクが欠落していると、注釈が無視されたり、誤って解釈されたりする可能性があります。
- 自己参照であること:各ページが他の版と並べて自分自身も列挙する。
- 有効であること:コードが本物の言語コード・地域コードとして読めること。
hreflang は 1 ページだけの属性ではなくページ間の関係を表すため、相互リンクは実装時につまずきやすい点です。対応するリターンリンクを同時に公開し、Google がどちら側をクロールしても関係が完全に確認できる状態にします。
注釈をどこに置くか
置き場所は三つあり、効果は同等です。一つを選んで全体で通してください。サイト内で混在させることこそ、集合が半端に宣言されたまま残る原因です。
| 方式 | 向いている対象 | 注意点 |
|---|---|---|
| HTML の link 要素 | 小規模から中規模のサイト | 版が多いときのページ重量 |
| HTTP ヘッダー | PDF など HTML 以外のファイル | 大きな集合でのヘッダーサイズ上限 |
| サイトマップの記述 | 大規模サイト、多言語 | ページ本体との同期を保つこと |
<link rel="alternate" hreflang="en" href="https://example.com/guide/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/guide/" />
<link rel="alternate" hreflang="pt-br" href="https://example.com/pt-br/guide/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/guide/" /> この例で英語ページが自分自身を列挙している点に注目してください。これが自己参照であり、その欠落は、ほかの点では丁寧な実装における最も多い欠陥です。冗長に見え、テンプレートを整理する人には間違いのように読めるからです。
コードと、存在しないコード
言語は ISO 639-1 です。その後ろにハイフンと ISO 3166-1 Alpha 2 の地域を続けても構いません。地域だけでは決して有効になりません。何語なのかを言わずに「このページはカナダ向けだ」と言う方法はないのです。
| コード | 判定 | 理由 |
|---|---|---|
| ja | 有効 | 言語のみ——日本語、地域は問わない |
| zh-TW | 有効 | 台湾向けに書かれた中国語 |
| TW | 無効 | 言語のない地域 |
| uk | 有効だが英国ではない | uk はウクライナ語。英国は GB |
| eu | 地域としては無効 | EU は国コードではない |
| en-UK | 無効 | 英国の国コードは GB |
x-default は何のためにあるか
x-default は、列挙しなかった言語を受け止めます。どの版とも言語が一致しない訪問者のための待避先であり、その自然な置き場所は言語選択ページか、訪問者を自分で振り分けるトップページです。
主要な版を指名する手段ではありません。英語が既定に感じられるからと x-default を英語ページに向けることは、一致しなかった日本語話者やトルコ語話者に英語を出すべきだと検索エンジンに告げることです。それが妥当な場合もありますが、習慣ではなく意識的に決めるべき判断です。
hreflang と canonical は別の仕事
この二つは技術的SEOのどの組み合わせよりも混同されやすく、しかも壊れ方が深刻です。canonical は「私の代わりにこの別のURLを索引に入れよ」と言います。hreflang は「この別のURLは、別の読者に向けた同じ内容だ」と言います。
ドイツ語ページの canonical を英語ページに向ければ、ドイツ語ページはそもそも索引に入れるなと検索エンジンに告げたことになります。これは結果からそのページを取り除き、同時にそれを参照していた hreflang の集合を壊します。各ローカライズ版は自分自身を canonical とし、兄弟版は hreflang で示すべきです。