hreflang とは?書き方・ルール・よくある間違いをわかりやすく解説
hreflang タグとは何か、多言語サイトになぜ必要か、正しい書き方、x-default、canonical との関係、そして Google に無視されてしまう間違いを解説します。
更新日 2026年9月24日 · 2分で読めます
サイトは翻訳済みで、どの言語もきちんと表示される。それなのに Google が英語圏の人に日本語ページを表示したり、1つの言語しかインデックスしなかったりする。たいていの原因は、hreflang がない、または壊れていることです。
このガイドでは、hreflang の役割、ルール、そして Google に無視されてしまう間違いを解説します。読みながら自分のサイトを試すなら、無料の 多言語 SEO チェッカーをどうぞ。
hreflang とは
hreflang は <link> タグの属性で、検索エンジンに「このページはほかの言語でも存在し、その URL はこれです」と伝えます。Google はそれをもとに、検索した人の言語に合ったバージョンを表示し、各バージョンを競合するページではなく1つのグループとして扱います。
各言語バージョンの <head> に置く典型的なブロックは次のとおりです。
<link rel="alternate" hreflang="ja" href="https://example.com/pricing/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/pricing/" />
<link rel="alternate" hreflang="zh-Hans" href="https://example.com/zh/pricing/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/pricing/" />
hreflang は強いシグナルですが、命令ではありません。ルールを1つでも間違えると無視されます。
なぜ重要なのか
hreflang がないと、たいてい次の3つが起こります。
- 検索結果に違う言語が表示される。 アメリカの訪問者が日本語ページにたどり着き、読めずに離脱します。
- バージョンがまとめられてしまう。 Google がほぼ同じページをグループ化して1つだけ表示し、ほかの言語が見えなくなることがあります。
- 新しい市場で見つけてもらえない。 正しく設定した競合が、あなたが翻訳した狙いの順位を持っていきます。
ルール
相互参照
英語ページが日本語ページを示すなら、日本語ページも英語ページを示し返す必要があります。そうでないと Google はそのペアを無視します。いちばん簡単なのは、すべてのバージョンに同じブロックを出力することです。
完全な URL
必ずプロトコルとホストを含む完全な URL を使いましょう:/en/ ではなく https://example.com/en/。https や www も含め、実際の URL と完全に一致している必要があります。
自己参照
各ページはブロック内に自分自身も含めます。日本語ページは自分の URL を指す hreflang="ja" を記載します。
正しい ISO コード
言語は ISO 639-1 のコード(ja、en、zh)で、必要に応じてハイフンと ISO 3166-1 の地域(en-US、zh-TW)を続けます。地域だけの指定は無効です。よく見る間違いはこちらです。
| 誤り | 正しい |
|---|---|
jp | ja(jp は国コード) |
en-UK | en-GB |
cn | zh または zh-CN |
kr | ko |
tw | zh-TW |
en_US | en-US(アンダースコアではなくハイフン) |
コードが間違っていると、そのタグは無視されます。日本のサイトでは jp の誤りが特に多いので注意してください。
x-default
x-default は、検索した人の言語がどの言語にも当てはまらないときに表示するページを Google に伝えます。必須ではありませんが、ないと Google が推測することになります。ほかの項目と同じく、すべての言語バージョンのブロックに入れましょう。
hreflang を実装する3つの方法
- HTML の
<head>内。 もっとも一般的で、確認もしやすい方法です。 - XML サイトマップ内。 各
<url>にxhtml:link要素で代替ページを列挙します。1つのファイルで管理できるので大規模サイト向きです。 - HTTP の
Linkヘッダー。<head>がない PDF などの HTML 以外のファイル向けです。
方法は1つに決めましょう。併用も可能ですが、内容が食い違うとシグナルが衝突します。
hreflang と canonical
多言語サイトの多くがつまずくのがここです。canonical は「このページの正規 URL はこれ」と伝え、hreflang は「ほかの言語の同じページはこれらの URL」と伝えます。答えている質問が違うのです。
ルールは、各言語バージョンの canonical は自分自身を指すことです。
<!-- https://example.com/en/pricing/ の場合 -->
<link rel="canonical" href="https://example.com/en/pricing/" />
<link rel="alternate" hreflang="ja" href="https://example.com/pricing/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/pricing/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/pricing/" />
英語ページの canonical が日本語ページを指していると、Google は英語ページを重複とみなして canonical に従い、hreflang を無視します。翻訳は重複コンテンツではないので、言語をまたいだ canonical は何も守ってくれません。
html lang も忘れずに
<html lang="ja"> 属性は、そのページ自体の言語を示します。hreflang の代わりにはなりませんが、ブロックでそのページに使うコードと一致させる必要があります。英語ページなのに lang="ja" のままだと、矛盾したシグナルになります。
よくある間違い
- 一部の言語ペアで戻りのリンクがない。
- 相対 URL、またはリダイレクトや 404 を返す URL を使っている。
- すべての翻訳ページで canonical が元の言語を指している。
- すべての言語が1つの URL を共有しているサイト(JavaScript や
?lang=で切り替え)に hreflang を付けている。指す先の実体がありません。
hreflang の確認方法
翻訳ページを開いてソースを表示し(Ctrl+U または Cmd+Option+U)、hreflang と canonical を検索します。そのあと記載された URL の1つを開き、戻りのリンクがあるか確認します。
ページが数枚を超えると、これは大変です。手っ取り早いのは、無料の 多言語 SEO チェッカーにページを入れることです。head、HTTP ヘッダー、サイトマップ内の hreflang(コード、完全な URL、自己参照、x-default、重複)を検証し、html lang と照合し、canonical を確認し、最大6つの翻訳バージョンを開いて、表示されるか、戻りのリンクがあるか、言語を宣言しているかを確かめます。hreflang 以外の項目は 多言語 SEO 監査チェックリストをご覧ください。
Lantis の hreflang の扱い
4言語・50ページのサイトで hreflang を手書きすると、何百ものタグを同期し続けることになります。Lantis は各言語を専用の URL(/en/ のようなサブフォルダ)で配信し、全言語の hreflang と x-default、正しい html lang、自己参照の canonical を自動で付けます。Framer、Webflow、WordPress、Shopify など、コード1行でどんなサイトにも使えます。翻訳は AI が行い、ビジュアルエディタと用語集も備えています。
料金は1言語あたり月€3から(2言語から€2.50、10言語から€2)、最初の100件の翻訳はカード不要で無料です。Framer なら Lantis プラグインをインストールしてください。手順は Framer と Webflow のガイドにまとめています。
よくある質問
hreflang はランキング要因ですか?
直接の要因ではありません。検索した人にどの言語バージョンを見せるかを決めるもので、各市場でのクリック率を高め、バージョンがまとめられてしまうのを防ぎます。
x-default は必要ですか?
強く推奨されます。ないと、対応していない言語の人に何を見せるかを Google が推測しなければなりません。メインの言語か言語選択ページを指定しましょう。
ja-JP と ja、どちらを使うべき?
日本語版が1つだけなら ja で十分です。ja-JP のような地域付きのコードは、国ごとに別のバージョン(価格や表記が違うなど)がある場合にだけ使います。
ほかの言語でも読めます English · Français · Deutsch · Italiano · Português · हिन्दी · Русский · 한국어 · Türkçe · Bahasa Indonesia · العربية