多言語・多地域サイトを運営しているのに「日本語ユーザーに英語版が表示される」「Googleに言語バリアントを正しく認識してもらえない」というトラブルに悩んでいませんか?その原因のほとんどは <link rel="alternate" hreflang="..."> の設定漏れや記述ミスにあります。

hreflangタグは多言語SEOの要です。正しく設定すれば、日本語ユーザーには日本語ページ、英語ユーザーには英語ページが検索結果に表示され、無用な重複コンテンツ評価も防げます。本記事では、hreflangタグの基本から実装方法、よくあるミスと対処法まで、コードサンプルつきで徹底解説します。設定後はhreflangジェネレーターで正しいタグを自動生成できます。

hreflangタグとは?

hreflangタグは、Googleに対して「このページにはほかの言語・地域向けの代替バージョンが存在する」と伝えるHTMLタグです。2011年にGoogleが導入し、現在はGoogleとYandexが対応しています(BingはContent Language HTTPヘッダーを使用)。

hreflangが必要な場面

  • 同一コンテンツを複数言語で提供するサイト:日本語版・英語版・中国語版など
  • 同一言語で地域ごとに内容が異なるサイト:英語(米国)・英語(英国)・英語(オーストラリア)など
  • 国・地域ターゲティングを明確にしたいサイト:ECサイトで通貨・配送先が異なる場合など

hreflangで解決できる問題

  • 日本語ユーザーに英語ページが表示されるミスマッチを防ぐ
  • 翻訳ページどうしの重複コンテンツペナルティリスクを軽減する
  • 各言語版ページのSEO評価を正しいURLに集約する
  • Google Search Consoleの「国際ターゲット設定」エラーを解消する

hreflangはあくまで「ヒント(hint)」であり、Googleへの強制指示ではありません。それでも正しく設定することで、クロールの効率化と検索結果のマッチング精度が大幅に向上します。

hreflangタグの書き方

hreflangタグは3つの実装方法があります。それぞれメリットと適した用途が異なります。

方法1:HTMLの <head> に記述する(最も一般的)

HTMLの <head> セクション内に <link> タグを記述します。ページ数が少ないサイトや、CMSでテンプレート管理できるサイトに向いています。

<!-- 日本語ページ(/ja/)の <head> 内に記述する例 -->
<link rel="alternate" hreflang="ja"        href="https://example.com/ja/page">
<link rel="alternate" hreflang="en"        href="https://example.com/en/page">
<link rel="alternate" hreflang="en-US"     href="https://example.com/en-us/page">
<link rel="alternate" hreflang="en-GB"     href="https://example.com/en-gb/page">
<link rel="alternate" hreflang="x-default" href="https://example.com/en/page">

言語コードは IETF BCP 47 形式で指定します。言語のみ(jaen)、または言語+地域(en-USzh-TW)の組み合わせが使えます。

方法2:XMLサイトマップに記述する(大規模サイト向け)

ページ数が多い場合は、XMLサイトマップに一括記述する方法が効率的です。すべてのURLを <xhtml:link> 要素で相互参照します。

<?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/ja/page</loc>
    <xhtml:link rel="alternate" hreflang="ja"        href="https://example.com/ja/page"/>
    <xhtml:link rel="alternate" hreflang="en"        href="https://example.com/en/page"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/en/page"/>
  </url>
  <url>
    <loc>https://example.com/en/page</loc>
    <xhtml:link rel="alternate" hreflang="ja"        href="https://example.com/ja/page"/>
    <xhtml:link rel="alternate" hreflang="en"        href="https://example.com/en/page"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/en/page"/>
  </url>
</urlset>

方法3:HTTPレスポンスヘッダーに記述する(非HTMLファイル向け)

PDFなどHTMLでないファイルには、サーバーのHTTPレスポンスヘッダーにhreflang情報を付加します。

Link: <https://example.com/ja/document.pdf>; rel="alternate"; hreflang="ja",
      <https://example.com/en/document.pdf>; rel="alternate"; hreflang="en",
      <https://example.com/en/document.pdf>; rel="alternate"; hreflang="x-default"

主な言語コード一覧

  • ja — 日本語
  • en — 英語(地域不問)
  • en-US — 英語(米国)
  • en-GB — 英語(英国)
  • zh-CN — 中国語(簡体字)
  • zh-TW — 中国語(繁体字)
  • ko — 韓国語
  • fr — フランス語
  • de — ドイツ語
  • es — スペイン語

x-defaultの使い方

hreflang="x-default" は、どの言語・地域にも一致しないユーザーに表示するデフォルトページを指定するための特殊な値です。Googleが2013年に導入しました。

x-defaultを設定すべき場面

  • 言語選択ページ(ランディングページ)を持つサイト
  • 英語を国際共通語として使用するサイト
  • 対応していない言語のユーザーを特定ページに誘導したい場合
  • 地域限定サービスで、対象外の訪問者向けに案内ページを設けている場合

x-defaultの設定例

下記は日本語・英語・フランス語の3言語サイトで、英語ページをデフォルトに設定する例です。

<!-- すべての言語バリアントのページに同じセットを記述する -->
<link rel="alternate" hreflang="ja"        href="https://example.com/ja/about">
<link rel="alternate" hreflang="en"        href="https://example.com/en/about">
<link rel="alternate" hreflang="fr"        href="https://example.com/fr/about">
<link rel="alternate" hreflang="x-default" href="https://example.com/en/about">

重要x-default に指定するURLは、必ずhreflangセットの中の既存のURL(上記例では hreflang="en" と同じURL)にしてください。存在しないURLを指定するとエラーになります。

言語選択ページへの適用例

<!-- 言語選択トップページ(example.com/)を x-default に指定する場合 -->
<link rel="alternate" hreflang="ja"        href="https://example.com/ja/">
<link rel="alternate" hreflang="en"        href="https://example.com/en/">
<link rel="alternate" hreflang="x-default" href="https://example.com/">

よくある実装ミスと対処法

hreflangは設定が複雑なため、実装ミスが非常に多いタグです。Google Search Consoleで「hreflangエラー」が表示されたときの主な原因と対処法を解説します。

ミス1:相互参照が片方しかない(最多ミス)

日本語ページから英語ページへの hreflang を記述しても、英語ページから日本語ページへの参照がないと無効になります。すべてのバリアントが双方向で参照し合う必要があります。

  • NG:日本語ページにhreflangあり、英語ページにhreflangなし
  • OK:日本語ページと英語ページの両方に同じhreflangセットを記述する

ミス2:言語コードが正しくない

Googleが受け付けない形式で言語コードを記述するとエラーになります。

  • NG:hreflang="japanese"hreflang="jp"hreflang="JA"(大文字、間違ったコード)
  • OK:hreflang="ja"(ISO 639-1の小文字2文字コード)
  • NG:hreflang="zh"(中国語は簡体字・繁体字を区別する必要がある)
  • OK:hreflang="zh-CN"(簡体字)または hreflang="zh-TW"(繁体字)

ミス3:URLが相対URLになっている

hreflangのhref属性には必ず絶対URLを使用します。相対URLは無効です。

  • NG:href="/ja/page"
  • OK:href="https://example.com/ja/page"

ミス4:x-defaultの設定忘れ

対応言語以外のユーザーへのフォールバックとして、x-defaultは原則設定しておくべきです。未設定でもエラーにはなりませんが、Googleが最適なページを判断できず、想定外のページが表示される場合があります。

ミス5:302リダイレクト先のURLを指定している

hreflangには最終的にアクセスできる正規URL(canonicalと一致するURL)を指定してください。リダイレクト途中のURLを指定すると正しく処理されません。

ミス6:ページが削除・移動されたのにhreflangを更新していない

ページのURLを変更した場合は、そのページを参照しているすべての言語バリアントのhreflangも更新が必要です。古いURLへの参照が残ると404エラーとして処理されます。

WordPress・Next.js・Astroでの設定方法

主要なCMS・フレームワークでのhreflang設定方法を解説します。

WordPressでの設定

WordPressでは、SEOプラグインを使うのが最も簡単です。

  • Yoast SEO:多言語プラグイン(WPML・Polylang)と連携すると自動でhreflangを出力します。WPML使用時はYoast SEOのhreflang出力を有効化してください。
  • Rank Math:多言語設定画面からhreflangを自動出力できます。Polylangとの連携をサポートしています。
  • 手動設定functions.phpwp_head フックに echo でlinkタグを出力する方法もありますが、ページ追加のたびに更新が必要です。

Next.jsでの設定

Next.jsはApp RouterとPages Routerで設定方法が異なります。

// App Router: app/[lang]/page.tsx
export async function generateMetadata({ params }) {
  return {
    alternates: {
      languages: {
        'ja': '/ja/page',
        'en': '/en/page',
        'x-default': '/en/page',
      },
    },
  };
}
// Pages Router: pages/[lang]/page.tsx
import Head from 'next/head';

export default function Page() {
  return (
    <Head>
      <link rel="alternate" hreflang="ja" href="https://example.com/ja/page" />
      <link rel="alternate" hreflang="en" href="https://example.com/en/page" />
      <link rel="alternate" hreflang="x-default" href="https://example.com/en/page" />
    </Head>
  );
}

Astroでの設定

Astroでは <head> スロットに直接記述するか、i18n設定を活用します。

---
// src/pages/ja/page.astro
const alternates = [
  { hreflang: 'ja', href: 'https://example.com/ja/page' },
  { hreflang: 'en', href: 'https://example.com/en/page' },
  { hreflang: 'x-default', href: 'https://example.com/en/page' },
];
---
<head>
  {alternates.map(({ hreflang, href }) => (
    <link rel="alternate" {hreflang} {href} />
  ))}
</head>

どのプラットフォームでも、hreflangタグを生成したらhreflangジェネレーターでタグセットの正確性を確認することをお勧めします。

よくある質問

Q. hreflangタグはBingでも有効ですか?
BingはhreflangタグをGoogleほど積極的に解釈しません。Bingの多言語対応には、HTTPレスポンスヘッダーの Content-Language 設定やBing Webmaster Toolsでの地域設定が有効です。ただし、hreflangを設定しても悪影響はないため、Googleとの共存は問題ありません。
Q. hreflangとcanonicalタグは同時に設定できますか?
はい、両方同時に設定することが推奨されます。canonicalは「このURLが正規版」と伝え、hreflangは「この正規版には他言語の対応ページがある」と伝えます。canonicalのURLとhreflangのhref属性のURLが一致していることを確認してください。矛盾するとGoogleが混乱し、意図した言語ページが表示されないことがあります。
Q. サブドメインとサブディレクトリ、どちらが多言語SEOに有利ですか?
一般的にはサブディレクトリ(example.com/ja/)が管理しやすくSEO上も推奨されます。サブドメイン(ja.example.com)は別サイトとして扱われることがあり、ドメインパワーが分散します。どちらの構成でもhreflangは正しく機能しますが、新規サイトであればサブディレクトリ構造をお勧めします。
Q. 翻訳が完全でないページにもhreflangを設定すべきですか?
機械翻訳のみで品質が低いページは、hreflangで参照しても検索品質に悪影響を与える可能性があります。Googleは低品質な翻訳ページを評価しないことがあるため、hreflangは人間がレビューした十分な品質の翻訳ページにのみ設定するのが理想です。品質が低い場合は <meta name="robots" content="noindex"> を設定してインデックスから除外することも検討してください。
Q. hreflangエラーはSEOに直接影響しますか?
hreflangエラーが直接的なペナルティになることはありませんが、Googleが言語バリアントを正しく認識できなくなります。その結果、検索ユーザーの言語と一致しないページが表示され、直帰率の上昇やコンバージョン率の低下につながります。Google Search Consoleの「国際ターゲット設定」レポートでエラーを定期的に確認し、修正することを強くお勧めします。

まとめ

hreflangタグは多言語SEOに欠かせない設定です。本記事のポイントを振り返ります。

  • hreflangとは:Googleに言語・地域バリアントを伝えるタグ。多言語サイトの検索精度向上に必須
  • 実装方法:HTMLの <head>・XMLサイトマップ・HTTPヘッダーの3種類。ページ数に応じて選択
  • x-default:対応言語以外のユーザー向けフォールバックページを指定。原則設定しておく
  • よくあるミス:相互参照の欠如・間違った言語コード・相対URL・x-default未設定に注意
  • プラットフォーム対応:WordPress(Yoast/Rank Math)・Next.js・Astroそれぞれに対応した実装方法がある

設定が完了したら、以下の無料ツールで検証・生成してください。

hreflangジェネレーター — 言語・URLを入力してタグを自動生成 メタタグ生成ツール — title・description・OGPタグをまとめて生成 canonicalタグジェネレーター — 正規URLタグを正確に生成