ForHosting KIT · SEOツール

hreflangの整合性と相互参照を確認

hreflangクラスターを正しく機能させるには、参加する全ページが、自己参照を含む同一の完全な代替ページ集合を宣言する必要があります。このチェッカーは複数ページから収集したマッピングを比較し、URLへアクセスせずに不完全なクラスターを検出します。すべての参照元URLと参照先URLから期待されるページ集合を作り、各参照元を照合して、ページごとに不足するリンクを正確に返します。結果は決定的で、公開前確認、移行、継続的なSEO品質管理に利用できます。

● Beta無料・ブラウザ内で実行
ご利用方法 ウェブAPIメールTelegramアプリ 近日

完全な相互参照が重要な理由

hreflang注釈は、あるページから別のページへの一方向の推奨ではありません。言語または地域ごとに用意された同等ページのグループへの所属を表すものであり、各ページは自分自身を含む同じ参照先集合を公開する必要があります。英語ページがフランス語版とドイツ語版を示していても、フランス語ページが英語版しか示していなければ、個々のタグが正しく見えてもクラスターは不完全です。検索エンジンは裏付けのない関係を無視し、意図しない言語版を表示したり、地域シグナルを弱めたりする可能性があります。ページ数が増えるほど関係数も急増するため、目視確認は不確実になります。4ページなら各ページが4件を宣言し、合計16件の参照元・参照先関係が必要です。このチェッカーは目視比較を厳密な集合検査に置き換えます。送信された各ページがクラスター内の全ページを宣言した場合だけ整合していると判定し、欠落と自己参照不足を明示します。

マッピングの準備方法と結果の読み方

確認したhreflang宣言ごとに1件のレコードを送信してください。page_urlはタグを含むページ、languageはタグの値、target_urlは参照先を表します。クラスターに含める予定の全ページからレコードを収集してください。期待されるクラスターは、参照元URLと参照先URLの和集合から導出されます。そのため、兄弟ページから参照されているのに自身の宣言を1件も提供しないページも期待集合に残り、すべての参照先が不足していると報告されます。URLは前後の空白を除去した後、文字列として厳密に比較されます。収集時にはページが出力する正規の絶対URLを使用してください。出力にはページ別の要約と競合一覧があります。不完全なページではmissing_urlsに追加すべき参照先が示されます。consistentが真になるのは競合一覧が空の場合だけです。参照先は集合として比較されるため、重複宣言で不足を埋めることはできません。

公開、移行、定期監査での活用

相互参照を確認する最適な時点は、多言語版の公開内容をクローラーが取得する前です。レンダリング済みページからhreflang宣言を抽出し、マッピングレコードへ変換して、consistentが偽なら公開処理を停止してください。現在ページを省くテンプレート分岐、新市場だけを更新した地域展開、旧URLを出力し続けるロケールなどを検出できます。言語の追加や廃止後に行う定期監査にも適しています。このアルゴリズムはネットワーク要求を行わないため、参照先の応答、canonical指定、内容の同等性までは証明しません。それらには別のクロールと編集確認が必要です。本機能は、提示された各ページが他の全ページと自分自身を列挙しているかを厳密に判定します。APIリクエストには公開基本料金の$0.002が適用され、ブラウザーでは同じ純粋な比較をローカル実行できます。競合結果をデプロイ証跡と共に保存すると、修正対象を具体的な参照元と参照先に結び付けられます。

多言語公開の検証

公開前に、新しい各ロケールと既存の兄弟ページが完全な代替ページ集合を宣言しているか確認します。

プラットフォーム移行の監査

新テンプレートのマッピングを比較し、移行中に自己参照や戻りリンクを失ったページを特定します。

SEOデプロイ工程の保護

不整合クラスターを、不足する参照元・参照先関係を示す決定的な失敗として扱います。

hreflangクラスターが整合する条件は何ですか?

クラスターに現れる各URLが、自分自身を含む全URLを宣言する必要があります。全関係が存在する場合だけ真になります。

チェッカーはページを取得しますか?

いいえ。指定されたマッピングだけを比較し、HTTP状態、canonicalタグ、ページ内容は検証しません。

宣言のない参照元ページをどう検出しますか?

参照元と参照先の両URLから期待集合を作るため、参照先だけに現れるURLも宣言不足のページとして報告されます。

重複した宣言は競合になりますか?

完全性には影響しません。参照先は集合として比較しますが、マッピング件数には送信された全レコードが含まれます。

URLの表記揺れは正規化されますか?

いいえ。前後の空白を除いて厳密に比較します。送信前にスキーム、ホスト、パス、末尾スラッシュを統一してください。

APIリクエストの料金はいくらですか?

各リクエストには公開基本料金の$0.002が適用されます。ネットワークやモデルは使用しません。

このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。

POSThttps://api.kit.forhosting.com/seo/hreflang-conflict-check

Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。

curl -X POST https://api.kit.forhosting.com/seo/hreflang-conflict-check \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"mappings":[{"page_url":"https://example.com/en","language":"en","target_url":"https://example.com/en"},{"page_url":"https://example.com/en","language":"fr","target_url":"https://example.com/fr"},{"page_url":"https://example.com/fr","language":"en","target_url":"https://example.com/en"},{"page_url":"https://example.com/fr","language":"fr","target_url":"https://example.com/fr"}]}'
{
  "mappings": [
    {
      "page_url": "https://example.com/en",
      "language": "en",
      "target_url": "https://example.com/en"
    },
    {
      "page_url": "https://example.com/en",
      "language": "fr",
      "target_url": "https://example.com/fr"
    },
    {
      "page_url": "https://example.com/fr",
      "language": "en",
      "target_url": "https://example.com/en"
    },
    {
      "page_url": "https://example.com/fr",
      "language": "fr",
      "target_url": "https://example.com/fr"
    }
  ]
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "seo.hreflang_conflict_check",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。

1リクエストあたり$0.002

単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。

HTTPコード意味
401unauthorizedAPIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。
402insufficient_balance残高が不足しています。チャージ後に再度お試しください。
404unknown_type指定されたタスクタイプは存在しません。タイプ名を確認してください。
429rate_limitedリクエストが多すぎます。しばらく待ってから再度お試しください。

KITの完全なドキュメントを見る →