2021 年、前のエージェンシーが「国際 SEO を対応した」というクライアントから 14,000 ページの e コマース サイトを引き継いだ。監査を始めて 3 週間で、Google Search Console から 31,000 件の hreflang エラーを発見した。31,000 件だ。このサイトは 7 つの言語バリエーションを持っていたが、すべてのページが自己参照タグを欠いていた。ドイツ語ページはフランス語 URL を指していた。x-default は完全に別の場所に 301 リダイレクトされている URL を指していた。英語以外の市場からのオーガニック トラフィックは 8 か月間停滞していて、誰も点と点を結んでいなかった。
そのプロジェクトは、hreflang 実装を翻訳スプリント中に追加する事後処理ではなく、一流のエンジニアリング課題として扱うようになった最大の理由だろう。
では本格的に掘り下げていこう。
---
hreflang が実際にすること(そしてしないこと)
多くの人がすでにおおまかな理解を持っているので、簡潔に説明します。hreflangはHTMLの属性(またはHTTPヘッダー、XMLサイトマップエントリ)で、ページのどのバージョンがどの言語と地域の組み合わせに対応しているかをGoogleに伝えます。ランキングを直接変更しません。Googleがどのユーザーに、どの国でどのURLを表示するかを変更します。which URL Google shows to which user in which country.
これだけです。指令ではなく、シグナルです。実装が壊れていたり矛盾していたりすれば、Googleはそれを無視できます。そして実際に無視しています。頻繁に。
これが何をしないかというと:ユーザーが間違った地域バージョンへのアクセスをブロックしたり、コンテンツ戦略に代わったり、機械翻訳のコピーにすぎない薄いローカライズ努力のない翻訳ページを補完したりはしません。not do: it doesn't block users from accessing the wrong regional version, it doesn't replace your content strategy, and it absolutely doesn't compensate for thin translated pages that are just machine-translated copies with no localisation effort.
他の何よりもまずGoogleの公式hreflangドキュメントを読む価値があります。古いビスケットのように退屈ですが、正確です。Google's own hreflang documentation before anything else. It's drier than a stale biscuit but it's accurate.
---
ほぼすべての監査で見られる5つの間違い
自己参照タグの欠落
これが大きな問題です。hreflangクラスタ内のすべてのページは、自分自身を指すタグを含める必要があります。他のバリエーションだけではなく。自分自身を。
example.com/en/product/の英語ページが/de/product/と/fr/product/を指すタグを持っているのに、/en/product/を指すhreflang="en"を忘れている場合、クラスタ全体は技術的には無効です。Googleは必ずしもハードエラーをスローしませんが、シグナルセット全体の信頼性を低下させます。example.com/en/product/ has tags pointing to /de/product/ and /fr/product/ but forgets the hreflang="en" pointing back to /en/product/, the whole cluster is technically invalid. Google won't necessarily throw a hard error but it will reduce its confidence in the entire signal set.
ブログ記事を読み、2つのバリアントを含む例を見たが、その例が悪く書かれていたため自己参照タグに気づかなかった開発者によって構築されたサイトでこの間違いを見てきました。名前は挙げません。
リターンタグが欠落しているか、壊れている
hreflangは双方向の関係です。英語ページがドイツ語ページを指している場合、ドイツ語ページは英語ページを指し返す必要があります。そのリターンタグを見落とすと、Googleは壊れたハンドシェイクと認識します。
私が言及した2021年のプロジェクトでは、開発者は英語テンプレートにのみhreflangを追加していました。ドイツ語、フランス語、スペイン語のテンプレートにはhreflangがまったくありませんでした。つまり、Googleは片側の会話を受け取っているだけで、合理的にそのすべてを無視していたわけです。
不正な言語コード
BCP 47言語タグを使用してください。つまり、英語全般にはen、イギリス英語にはen-GB、アメリカ英語にはen-USを使用します。en_GBではなく、englishでもなく、ENGでもありません。BCP 47 language tags. That means en for English generically, en-GB for British English, en-US for American English. Not en_GB . Not english . Not ENG.
昨年Seahawkで監査したフィンテック企業のサイトにlang="english-uk"があるのを見つけました。開発者は明らかにフォーマットを推測しただけです。それは14ヶ月間ライブでした。lang="english-uk" on a fintech site we audited at Seahawk last year. The developer had clearly just guessed the format. It had been live for 14 months.
x-defaultが欠落しているか、間違っている
x-defaultは、言語または地域が他のバリエーションのいずれにも一致しないユーザーに対応するページを指す必要があります。通常はホームページまたは言語選択ページです。これは単に「英語版」の同義語ではありません。x-defaultが404を返すURLを指しているのを見かけたことがありますし、リダイレクトチェーンを指しているのも見かけたことがあります。そして忘れられないことに、ステージング環境を指しているのも見かけたことがあります。 should point to a page that handles users whose language or region doesn't match any of your other variants. Usually your homepage or a language-selection page. It is not just a synonym for "English version". I've seen x-default pointing at a URL that returns a 404, pointing at a redirect chain, and once, memorably, pointing at a staging environment.
適切なフォールバックページがない場合、x-defaultを誤って使用するよりも、x-defaultを省略する方が実際には良いです。しかし、通常はx-defaultを持つべきです。
CanonicalとhreflangをともにIncorrectlyに使用する
canonical タグと hreflang タグが矛盾していてはいけません。/en-gb/page/ が /en/page/ を指す canonical を持ちながら、同時に en-GB として自分自身を宣言する hreflang を持っていれば、信号が競合しています。canonical は事実上「このURLの優先版ではない」と言っており、一方 hreflang は「イギリス英語ユーザーにとって優先版である」と言っています。Google はどちらかの解釈を選ばなければならず、多くの場合どちらも選びません。/en-gb/page/ has a canonical pointing to /en/page/, but also has hreflang declaring itself as en-GB, you've created a signal conflict. The canonical is effectively saying "I'm not the preferred version of this URL" while hreflang is saying "I am the preferred version for British English users". Google has to pick one interpretation and it often picks neither.
---
大規模サイトで実装する際に心を失わない方法
テンプレートレベル対ページレベル
50ページのサイトであれば、すべての hreflang タグを手作業で作成できます。5,000ページのサイトであれば、そうはいきません。プログラムで生成する必要があります。
私が見つけた最もシンプルなアプローチは、URL マッピングを構造化されたデータソース(データベーステーブル、あるいは小規模なプロジェクトであれば単純な JSON ファイル)に保存し、レンダリング時にタグを生成することです。WordPress では Yoast SEO と Rank Math の両方が標準的なセットアップではかなり上手く機能しますが、言語全体で URL 構造が異なり、予測可能な /en/、/de/、/fr/ というプレフィックスパターンに従っていない場合は、どちらも機能しなくなります。/en/, /de/, /fr/ prefix pattern.
URL が統一されていない場合(たとえば、example.com/en/running-shoes/ と example.com/de/laufschuhe/ のような翻訳されたスラッグ)、明示的なマッピングテーブルが必要です。プラグインが自動的にそれを理解することはありません。2022年にスポーツウェアのクライアントで、翻訳されたスラッグが英語のものから完全に独立していた案件で、私はこれを高い代償で学びました。example.com/en/running-shoes/ and example.com/de/laufschuhe/), you need an explicit mapping table. No plugin will figure that out automatically. I learned this the expensive way on a sportswear client in 2022 whose translated slugs were completely independent of the English ones.
XML サイトマップ方式
非常に大規模なサイトの場合、インライン HTML タグより XML サイトマップ方式を選びます。<head> をきれいに保つことができ、プログラムで監査しやすく、ページテンプレートに手を入れなくてもサイトマップを更新できます。<head> clean, it's easier to audit programmatically, and you can update the sitemap without touching page templates.
フォーマットは次のようになります(概念的に、コードフェンスなしで):各 <url> ブロックには複数の <xhtml:link> エントリが含まれ、自己参照を含めて言語バリアントごとに1つずつあります。xmlns:xhtml 名前空間宣言は <urlset> 要素に存在していなければならず、そうでなければ何もエラー表示せずに失敗します。<url> block contains multiple <xhtml:link> entries, one per language variant including the self-referencing one. The xmlns:xhtml namespace declaration must be present in the <urlset> element or the whole thing breaks silently.
注意すべき点として、サイトマップ方式はGoogleが最近サイトマップをクロールしてインデックスしている場合にのみ機能します。大規模サイトでクロールバジェットの問題がある場合は、Googlebotがページをクロールするときにタグをインラインで読み込むため、HTML方式の方がより信頼できます。
非HTMLコンテンツのHTTPヘッダー
PDFやその他の非HTMLファイルにhreflangが必要ですか?HTTPヘッダーを使用します。サーバーはrel="alternate"とhreflang属性を含むLinkヘッダーを返します。実際にはまれなケースですが、数千の多言語PDFドキュメントを持つ大規模な法律事務所や金融機関を見てきており、このアプローチが実際に役立つことがあります。Link header with rel="alternate" and hreflang attributes. This is rare in practice but I've seen large legal and financial sites with thousands of multi-language PDF documents where this actually matters.
---
実際に役立つツール
長年多くのツールを使ってきましたが、実際に使っているのは以下のものです。
- Screaming Frog SEO Spider:クロールを実行してhreflangタブに移動します。欠落しているリターンタグ、欠落しているセルフリファレンス、破損したURL、無効な言語コードをすべて1か所にフラグします。これは国際的な監査のたびに最初に確認する場所です。年£199で、私が知っている技術SEOツールの中で最高のコストパフォーマンスです。: Run a crawl, go to the hreflang tab. It will flag missing return tags, missing self-references, broken URLs, and invalid language codes all in one place. This is my first stop on every international audit. At £199/year it's the best-value technical SEO tool I know.
- Ahrefs Site Audit:優れた二次チェック。特に同じプラットフォーム内のオーガニックトラフィックデータと相互参照したい場合に有効です。: Good secondary check, especially if you want to cross-reference with organic traffic data in the same platform.
- Merkleによるhreflangタグテストツール:無料です。https://www.merkle.com/en/merkle-labs/hreflang-testing-tool.html。URLを貼り付けると、クラスター全体をチェックします。修正の途中で特定のページをスポットチェックするのに最適です。: Free, at https://www.merkle.com/en/merkle-labs/hreflang-testing-tool.html. Paste a URL, it checks the entire cluster. Brilliant for spot-checking specific pages mid-fix.
- Google Search Console:レガシーツール下の国際的なターゲティングレポート。更新は遅いですが、Googleが実装を実際にどのように読んでいるかに関する信実です。: The International Targeting report under Legacy Tools. Slow to update but it's the ground truth for how Google is actually reading your implementation.
- Sitebulb: ビジュアルクローラーを好む場合で、初心者向けのレポート機能を重視するなら、Sitebulbはhreflang クラスター関係の可視化を適切に実行します。: If you prefer a visual crawler with more beginner-friendly reporting, Sitebulb does a solid job of visualising hreflang cluster relationships.
使わないもの:静的なタグブロックを生成して、コピペするだけのhreflangジェネレーターツール。構文を学ぶ際には問題ありませんが、20ページを超える場合は無用の長物です。手動で保守に戻るからです。
---
大規模監査:機能する手法
200以上の多言語サイトで実施して改善した、すべての国際監査で実行する実際のステップバイステップです:
- Screaming Frogでサイトをクロールします。サイトがJSフレームワークを使用している場合は、JavaScriptレンダリングがオンになっていることを確認してください。
- hreflangデータをスプレッドシートにエクスポートします。URLをその意図したクラスターごとにグループ化します。
- すべてのクラスターをチェック:自己参照タグ、すべてのバリアントからの返却タグ、有効なBCP 47コード、一貫したカノニカル整合性。
- x-defaultのURLで200ステータスコードをチェック。301ではなく、200です。
- XMLサイトマップ方式を使用している場合はXMLサイトマップに対して相互参照します。サイトマップ内のすべてのURLが200を返す必要があります。
- Merkleテストツールで20~30ページのサンプルを実行して、Googleが実際に想定通りの内容を読み込んでいるか検証しましょう。
- Search Consoleから国際ターゲティングレポートを取得し、特に「返却タグなし」エラーを確認してください。これはほぼ常に、新しい言語を追加した際にテンプレートが更新されなかったことの症状です。
- 修正して2週間後に再クロールを実施し、Search Consoleでエラー数が減少したことを確認します(GSCデータが修正を完全に反映するには4~6週間かかることもあります)。
これは1回限りのプロセスではありません。四半期ごとに定期的なクロールをカレンダーに入れておきましょう。国際サイトは変わります。新しいページが追加され、古いページはリダイレクトされ、誰も見ていない間にhreflangクラスタが静かに壊れることもあります。
---
hreflangを使わない場合
ほとんどのガイドではこれがスキップされていて、本当にうんざりしています。
1つの言語で複数の地域(例えば、英語でイギリスとオーストラリアの両方)がある場合、hreflangは使う価値がありますが、そのユーザーグループを明確に区別する価値があるコンテンツの違いがある場合に限ります。イギリスとオーストラリアのページが95%同じなら、明確さよりも混乱を招く可能性があります。Googleは1つのバリアントを世界的に表示することを選択でき、hreflangシグナルはほぼ無視されます。
国際市場からのトラフィックが非常に少ない場合、hreflang実装に1週間を費やすのは最善の時間の使い方ではないかもしれません。<html lang="">属性とSearch Consoleでの地理的ターゲティング設定が適切なURL階層があれば、トラフィック量が本格的な実装を正当化するまでの間、十分にカバーできます。<html lang=""> attributes and geotargeting settings in Search Console will cover you adequately until the traffic volume justifies a full implementation.
そしてサイトがJavaScriptで動的にコンテンツを読み込むシングルページアプリケーションなら、まずレンダリング側を正しく修正してください。静的HTMLシェルではhreflangが完璧に実装されているのに、実際のページコンテンツがJavaScriptで描画されており、Googlebotはローディングスピナーしか見ていない場合を見かけたことがあります。国際化シグナルを心配する前に、インデックス可能性を修正しましょう。
---
よくある質問
hreflangタグはランキングに直接影響しますか?
いいえ。hreflangシグナルはGoogleに対して、どのURLをどのユーザーに配信するかを示すもので、そのURLをどのようにランク付けするかではありません。間接的には、適切なページが適切なユーザーの前に表示されることで、ポゴスティッキングが減少し、エンゲージメント指標が改善され、それがランキングに下流効果をもたらす可能性があります。しかし、hreflangタグを追加することからの直接的なランキング向上はありません。
Googleがhreflangの変更を処理するのにどのくらい時間がかかりますか?
通常、Search Consoleのデータに変更が完全に反映されるまで4~8週間です。クロール頻度が重要です。クロール速度が遅い大規模なサイトの場合、12週間まで伸びることがあります。変更を加えて翌日に結果を確認しないでください。自分自身を狂わせることになります。
Shopifyストアでhreflangを使用できますか?
はい。ただし、Shopifyのネイティブ国際化機能(Markets経由)は、サブフォルダまたはサブドメインを使用している場合、多くの作業を自動で処理します。異なる地域用に個別のストアを使用している場合は、テーマのカスタマイズまたはアプリ経由でhreflangを手動で実装する必要があります。ここでの出発点としてShopifyの公式国際SEOガイダンスを使用しました。かなり完全です。Shopify's own international SEO guidance as a starting point here. It's reasonably complete.
言語ターゲティングと国ターゲティングの違いは何ですか?
言語ターゲティング(例:hreflang="es")は、どこにいるかに関わらずスペイン語話者にこれを表示するという意味です。国ターゲティング(例:hreflang="es-MX")は、スペイン語話者、特にメキシコ内のスペイン語話者に表示するという意味です。すべてのその言語話者に対してコンテンツが同じである場合は、言語のみのタグを使用してください。価格、通貨、または重要なコンテンツが地域によって異なる場合は、言語と国のタグを使用してください。hreflang="es") says: show this to Spanish speakers regardless of where they are. Country targeting (e.g., hreflang="es-MX") says: show this to Spanish speakers in Mexico specifically. Use language-only tags when your content is the same for all speakers of that language. Use language-country tags when pricing, currency, or significant content differs by region.
hreflangのエラーが修正後に増えました。なぜですか?
通常は、いくつかのタグを修正したことでGoogleがページをより積極的にクロールするようになり、以前は報告されていなかったエラーが見つかっているのです。修正が状況を悪くしたのではなく、レポーティングの仕様です。そのまま続けて、4週間後に再度クロール検査してください。
---
Hreflangは本当に、90%正しく実装することが0%の場合とほぼ同じくらい悪い分野の一つです。壊れたシグナルはノイズを生み出し、Googleがそれを信頼しなくなります。時間をかけて正しく実装し、定期的に監査し、インフラストラクチャとして扱ってください。あなたの国際オーガニックトラフィックは静かに感謝するでしょう。それが最高の感謝です。
