hreflang完全ガイド:国際SEOの基本
言語・地域別ページの設計、相互参照するhreflangの実装、各URLが想定した読者に届くかの確認方法を解説します。
hreflangは、各ページがどの言語・地域向けかを検索エンジンに伝えるHTML属性です。Googleはこの情報をもとに、ユーザーの言語と地域に合ったバージョンを表示します。
hreflangがないと、Googleは適切なバージョンを自力で推測します。この推測はよく外れます。ロシア語ユーザーに英語ページが表示されたり、ドイツ人ユーザーにフランス語版が表示されたりします。CTRが下がり、直帰率が上がり、コンバージョンも減ります。
hreflangとは
hreflang属性は2011年に導入されました。Googleが、国際サイトの重複コンテンツ問題を解決するために作ったものです。/aboutというページが/en/about、/de/about、/fr/aboutとして存在する場合、Googleはこれらを重複とみなすべきではありません。それぞれ別の読者向けのページだからです。
導入年
Googleが多言語サイト向けにhreflangを導入
地域コード
Googleが対応するISO 3166-1 alpha-2コード
相互参照
すべてのページバージョンが相互にリンクする必要あり
速度への影響
正しく実装したhreflangでサイトは遅くならない
hreflangに対応しているのはGoogleとYandexだけです。BingはContent-Languageメタタグ、HTTPヘッダー、URL構造、Webmaster Toolsでのジオターゲティングを使います。ロシア語圏のユーザーが対象に含まれる場合、Yandexで正しく動作させるためにhreflangが必要です。
hreflangが必要なケース
多言語サイトのすべてにhreflangが必要なわけではありません。この属性が実際に問題を解決する場面を押さえておきます。
| 状況 | hreflangの要否 | 備考 |
|---|---|---|
| 同じ言語で国が異なる(en-US、en-GB) | 必要 | 価格、綴り、キャンペーンなど内容が異なる |
| 言語が異なる(en、de、fr) | 必要 | hreflangの基本的な用途 |
| 1言語・1地域のみ | 不要 | 自己参照リンクを重ねる必要はない |
| すべての言語バージョンで内容が同一 | 不要 | 代わりにcanonicalを使う |
| 部分的な翻訳(内容の70%以上) | 必要 | 部分翻訳でもマークアップが必要 |
| 編集なしの機械翻訳 | 不要 | Googleがスパムとみなす可能性がある |
構文と記述形式
hreflangには2つの規格のコードを使います。言語はISO 639-1、地域はISO 3166-1 alpha-2です。形式はlanguageまたはlanguage-REGIONです。
<!-- Language only -->
<link rel="alternate" hreflang="ru" href="https://example.com/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/" />
<!-- Language + region -->
<link rel="alternate" hreflang="en-US" href="https://example.com/en-us/" />
<link rel="alternate" hreflang="en-GB" href="https://example.com/en-gb/" />
<link rel="alternate" hreflang="fr-FR" href="https://example.com/fr/" />
<link rel="alternate" hreflang="fr-CA" href="https://example.com/fr-ca/" />
<!-- x-default: page for users without a matching locale -->
<link rel="alternate" hreflang="x-default" href="https://example.com/" />hreflangの地域は常に大文字(en-GB、fr-CA)、言語は小文字(en、fr)で書きます。実装ではすべて小文字にしているケースも多く、Googleはどちらも解釈できます。それでも、正式な表記に合わせるのが望ましい運用です。
| コード | 意味 |
|---|---|
| ru | ロシア語(全地域) |
| en | 英語(全地域) |
| en-US | アメリカ向けの英語 |
| en-GB | イギリス向けの英語 |
| de-AT | オーストリア向けのドイツ語 |
| zh-Hans | 簡体字中国語 |
| zh-Hant | 繁体字中国語 |
| x-default | 言語・地域が特定できない場合のページ |
実装方法
hreflangの実装方法は3つあります。サイトの技術と規模に合わせて選びます。
1. headセクションのHTMLタグ
最も一般的な方法です。各ページの<head>に<link rel="alternate" hreflang="...">タグを追加します。重要なのは、ページのすべてのバージョンが、自分自身を含むほかのすべてのバージョンにリンクすることです。
<!-- Page /en/about — links to ALL versions -->
<head>
<link rel="alternate" hreflang="en" href="https://example.com/en/about/" />
<link rel="alternate" hreflang="ru" href="https://example.com/about/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/about/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/about/" />
<link rel="canonical" href="https://example.com/en/about/" />
</head>2. HTTP Linkヘッダー
PDF、画像などHTML以外のリソースには、HTTPヘッダーを使います。この方法はどのページにも使えますが、サーバーの設定が必要です。
# Nginx: add hreflang via HTTP headers
add_header Link '</en/about/>; rel="alternate"; hreflang="en", </about/>; rel="alternate"; hreflang="ru", </de/about/>; rel="alternate"; hreflang="de"';3. XMLサイトマップ
大規模サイト(10,000ページ以上)に最適な方法です。hreflangの関係をすべてサイトマップに記述するので、HTMLが肥大化せず、管理も一元化できます。
<?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/en/about/</loc>
<xhtml:link rel="alternate" hreflang="en"
href="https://example.com/en/about/"/>
<xhtml:link rel="alternate" hreflang="ru"
href="https://example.com/about/"/>
<xhtml:link rel="alternate" hreflang="de"
href="https://example.com/de/about/"/>
<xhtml:link rel="alternate" hreflang="x-default"
href="https://example.com/en/about/"/>
</url>
</urlset>x-default:言語選択ページ
x-defaultは、宣言したどの代替ページにも言語・地域が合わないユーザー向けのページを示す値です。一致するhreflangがない場合、Googleはこのバージョンを表示します。
- 言語選択ページ:ユーザーが
/choose-language/に着地し、自分のバージョンを選ぶ - サイトのメインバージョン:多くは英語版、またはGoogleにデフォルトで表示させたいバージョン
- トップページ:サイトが複数言語の場合、x-defaultは
/を指す
canonicalとhreflang
canonicalとhreflangは解決する問題が異なりますが、組み合わせて機能します。ルールは単純です。ページにhreflangがある場合、canonicalは常に自分自身を指します(自己参照canonical)。
<!-- CORRECT: canonical points to self + hreflang covers all versions -->
<link rel="canonical" href="https://example.com/en/about/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/about/" />
<link rel="alternate" hreflang="ru" href="https://example.com/about/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/about/" />
<!-- WRONG: canonical points to a different language version -->
<link rel="canonical" href="https://example.com/ru/about/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/about/" />英語ページのcanonicalがロシア語版を指していると、Googleは英語ページを重複とみなし、インデックスに登録しません。自己参照canonicalのないhreflangは、実質的に無意味です。
よくあるミス
監査データによると、hreflangを使っているサイトの約60%に、致命的なエラーが少なくとも1つあります。特に多いミスを紹介します。
ミス1:相互リンクの欠落
最も多い問題です。ページAはhreflangでページBにリンクしているのに、ページBからページAへのリンクがありません。相互参照のないhreflangは無効なため、Googleは無視します。
ミス2:言語コードの誤り
hreflang="en_US":ハイフンではなくアンダースコアを使っており、無効なコードhreflang="english":ISOコードではなく単語を使っているhreflang="zh-Hans"やhreflang="zh-Hant"ではなくhreflang="zh":中国語にはスクリプトの指定が必要hreflang="ru"ではなくhreflang="ru-RU":方言のない言語に不要な地域コードを付けている
ミス3:インデックスされないページのhreflang
robots.txtでブロックされたページや、noindexを付けたページにhreflangを書いても意味がありません。Googleは、インデックスに登録できないページのhreflangを処理しません。
ミス4:言語による自動リダイレクト
ブラウザーの言語でユーザーをリダイレクトするサイトがあります。ロシア語ユーザーが/about/にアクセスすると、/ru/about/に転送される仕組みです。Googleには301リダイレクトとして見えるため、hreflangを正しく処理できません。対策は、リダイレクトせずにコンテンツを返し、JavaScriptによる切り替えかCookieを使うことです。
ミス5:404やリダイレクトを指すhreflangリンク
hreflangは、最終的な正規URLを指す必要があります。リダイレクトを経由するリンクや404のページへのリンクがあると、そのバージョンの属性は無効になります。
検証ツール
| ツール | チェック内容 | 費用 |
|---|---|---|
| Google Search Console | 国際ターゲティングレポートのhreflangエラー | 無料 |
| Aleyda Solis hreflang tool | 1ページ単位のタグの有効性、リンクの相互参照 | 無料 |
| TechnicalSEO hreflang checker | 一括チェック、エラーのエクスポート | 無料/有料 |
| Screaming Frog | hreflang分析を含むフルクロール | 有料 |
| Ahrefs Site Audit | SEO監査内のhreflangエラー | 有料 |
| Semrush Site Audit | hreflang専用レポート | 有料 |
FAQ
hreflangは検索順位に影響しますか?
サイトのすべてのページにhreflangが必要ですか?
hreflangが301リダイレクトのURLを指すとどうなりますか?
HTMLではなくサイトマップだけでhreflangを使えますか?
新しいhreflangがGoogleに処理されるまで、どのくらいかかりますか?
Check it with SpiderHead
Free and local: run the audit on your own machine.



