# ルール解説 (/ja/docs/rules)

> Loomaly が確認するすべてのルール。重大度、採点の次元、ルール ID、意味と直し方。

{/* Generated by scripts/gen-rules-docs.ts — edit the script, not this file. */}

Loomaly が報告する問題は、すべてこのページにある 81 件のルールのいずれかから出ます。各ルールを報告するのは、スキャンのうちちょうど 1 つの部分だけです。説明と修正用のプロンプトは固定のテンプレートから出るため、同じ問題は毎回のスキャンで同じルール ID と同じ文言になります。これで Loomaly は、問題が新しいか、まだ残っているか、直ったかを見分けます。問題の進め方は[問題](/docs/issues)を見てください。

## ルールが健全性スコアに与える影響 [#health-score]

各ルールには**重大度**（**エラー**、**警告**、**通知**）と**次元**があります。次元は、検索の健全性のどの部分を測るかを示します。1 つのページでは、エラーはその次元を 0 点にし、警告は 25 点、通知は 5 点を引きます（通知は合わせて最大 10 点です）。サイトのスコアは 5 つの次元の加重平均です。詳細と計算例は[健全性スコアの仕組み](/docs/scoring)にあります。

## ルールの確認方法 [#checked-by]

各表の最後の列は、スキャンのどの部分がそのルールを報告できるかを示します。各部分がいつ動くかは[スキャンの仕組み](/docs/how-scans-work)を見てください。

| 確認方法 | 意味 | 検出のグループ |
| --- | --- | --- |
| ルール検査 | コードがページの HTML を、毎回同じ方法で確認します。対象は Loomaly が見つけたすべてのページです。 | **構造** |
| AI 判定 | AI モデルが、ページについて固定の質問に答えます（たとえば、明確な次の行動があるか）。対象はすべてのページです。確信度の高い回答だけが問題になり、どの質問をどの種類のページに当てるかはコードが決めます。 | **意味** |
| 表示速度テスト | Google PageSpeed Insights でモバイルを測定します。Chrome の実ユーザーデータがあるときはそれを使います。対象は各テンプレートの代表ページです。 | **表示速度** |
| ページ判定 | サイトのスキャンのあと、コードが不審と選んだページ（ほぼ重複、空に見える、消えたように見える）を AI が判定します。 | **ページ判定** |
| サイト検査 | コードがスキャンごとに 1 回、`robots.txt` と sitemap を確認し、sitemap とページ自身の宣言を比べます。サイト全体で 1 件の問題として表示し、ページごとではなく 1 回だけ採点します。 | **構造** |

ページが `noindex` のときは noindex 自体だけを報告します。別のサイトへリダイレクトするページは、確認しません。

## メタタグ [#category-meta]

| ルール | 重大度 | 次元 | 確認方法 |
| --- | --- | --- | --- |
| [`<title>` タグがありません](#missing-title) | エラー | ページの基本 | ルール検査 |
| [タイトルが短すぎます](#title-too-short) | 警告 | ページの基本 | ルール検査 |
| [タイトルが長すぎます](#title-too-long) | 警告 | ページの基本 | ルール検査 |
| [メタディスクリプションがありません](#missing-meta-description) | 警告 | ページの基本 | ルール検査 |
| [タイトルが他のページと重複しています](#duplicate-title) | 警告 | ページの基本 | ページ判定 |
| [メタディスクリプションが他のページと重複しています](#duplicate-meta-description) | 通知 | ページの基本 | ページ判定 |
| [メタディスクリプションが短すぎます](#meta-description-too-short) | 通知 | ページの基本 | ルール検査 |
| [メタディスクリプションが長すぎます](#meta-description-too-long) | 通知 | ページの基本 | ルール検査 |
| [canonical リンクがありません](#missing-canonical) | 通知 | インデックス登録 | ルール検査 |
| [canonical が別の URL を指しています](#canonical-mismatch) | 警告 | インデックス登録 | ルール検査 |
| [viewport の meta がありません](#missing-viewport) | 警告 | ページの基本 | ルール検査 |
| [ログインやアプリのページがインデックスされる](#indexable-app-page) | 警告 | インデックス登録 | ルール検査 |
| [ページが noindex に設定されています](#robots-noindex) | エラー | インデックス登録 | ルール検査 |
| [ページが nofollow に設定されています](#robots-nofollow) | 警告 | インデックス登録 | ルール検査 |
| [タイトルがページの内容と一致しません](#title-content-mismatch) | 警告 | コンテンツと AI の読みやすさ | AI 判定 |
| [Open Graph タグがありません](#missing-og-tags) | 通知 | ページの基本 | ルール検査 |
| [Open Graph 画像がありません](#missing-og-image) | 通知 | ページの基本 | ルール検査 |

### `<title>` タグがありません [#missing-title]

**重大度：** エラー · **次元：** ページの基本 · **ルール ID：** `missing-title` · **確認方法：** ルール検査 · **作業量：** 小

**意味：** ページに `<title>` がないか、空です。タイトルは検索エンジンが結果に出す見出しで、ページの内容を示す最も強い手がかりです。

**直し方：** ページの `<head>` に、固有で説明的な `<title>` を入れてください。話題を先に、ブランドを後に、20〜70 文字です。

**公式ガイド：** [developers.google.com/search/docs/appearance/title-link](https://developers.google.com/search/docs/appearance/title-link)

### タイトルが短すぎます [#title-too-short]

**重大度：** 警告 · **次元：** ページの基本 · **ルール ID：** `title-too-short` · **確認方法：** ルール検査 · **作業量：** 小

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** タイトルが 20 文字未満で、検索した人にページの内容を伝えるには短すぎます。中国語、日本語、韓国語の文字は幅が 2 倍のため、2 文字として数えます。

**直し方：** ページの主な話題や商品に、区別できる点を 1 つ足して長くしてください。20〜70 文字が目安です。

**公式ガイド：** [developers.google.com/search/docs/appearance/title-link](https://developers.google.com/search/docs/appearance/title-link)

### タイトルが長すぎます [#title-too-long]

**重大度：** 警告 · **次元：** ページの基本 · **ルール ID：** `title-too-long` · **確認方法：** ルール検査 · **作業量：** 小

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** タイトルが 70 文字を超えるため、検索結果では切れます。中国語、日本語、韓国語の文字は幅が 2 倍のため、2 文字として数えます。

**直し方：** 重要な語を先に置き、埋め草や繰り返すブランド名を削って 70 文字以内にしてください。

**公式ガイド：** [developers.google.com/search/docs/appearance/title-link](https://developers.google.com/search/docs/appearance/title-link)

### メタディスクリプションがありません [#missing-meta-description]

**重大度：** 警告 · **次元：** ページの基本 · **ルール ID：** `missing-meta-description` · **確認方法：** ルール検査 · **作業量：** 小

**意味：** ページにメタディスクリプションがないか、空です。検索エンジンが本文からスニペットを書くため、クリック前に読まれる文面を制御できなくなります。

**直し方：** 訪問者が得るものと、クリックする理由が分かる 70〜160 文字の要約で、`<meta name="description" content="...">` を追加してください。

**公式ガイド：** [developers.google.com/search/docs/appearance/snippet](https://developers.google.com/search/docs/appearance/snippet)

### タイトルが他のページと重複しています [#duplicate-title]

**重大度：** 警告 · **次元：** ページの基本 · **ルール ID：** `duplicate-title` · **確認方法：** ページ判定 · **作業量：** 中

**意味：** サイトの他のページがまったく同じ `<title>` を使っています。問題には件数と、そのうち 1 ページの名前があります。検索エンジンはその検索に対して 1 ページを選ぶ必要があり、検索した人は結果を区別できません。

**直し方：** 各ページに、そのページの内容が分かるタイトルを付けてください。商品、記事の話題、カテゴリ名を先に、ブランドを後にします。ページが本当に同じなら、1 つを残し、他は canonical かリダイレクトでそこを指してください。

**公式ガイド：** [developers.google.com/search/docs/appearance/title-link](https://developers.google.com/search/docs/appearance/title-link)

### メタディスクリプションが他のページと重複しています [#duplicate-meta-description]

**重大度：** 通知 · **次元：** ページの基本 · **ルール ID：** `duplicate-meta-description` · **確認方法：** ページ判定 · **作業量：** 中

**意味：** サイトの他のページが同じメタディスクリプションを使っているため、検索スニペットが同じに読めます。

**直し方：** 各ページの説明を、そのページ自身の内容から書いてください。特に言うことがないページは空のままで構いません。Google がページから作ります。

**公式ガイド：** [developers.google.com/search/docs/appearance/snippet](https://developers.google.com/search/docs/appearance/snippet)

### メタディスクリプションが短すぎます [#meta-description-too-short]

**重大度：** 通知 · **次元：** ページの基本 · **ルール ID：** `meta-description-too-short` · **確認方法：** ルール検査 · **作業量：** 小

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** メタディスクリプションが 70 文字未満で、スニペットの枠の多くが使われません。中国語、日本語、韓国語の文字は幅が 2 倍のため、2 文字として数えます。

**直し方：** 具体的な利点、詳細、行動の呼びかけを足して、70〜160 文字にしてください。

**公式ガイド：** [developers.google.com/search/docs/appearance/snippet](https://developers.google.com/search/docs/appearance/snippet)

### メタディスクリプションが長すぎます [#meta-description-too-long]

**重大度：** 通知 · **次元：** ページの基本 · **ルール ID：** `meta-description-too-long` · **確認方法：** ルール検査 · **作業量：** 小

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** メタディスクリプションが 160 文字を超えるため、検索結果では切れます。中国語、日本語、韓国語の文字は幅が 2 倍のため、2 文字として数えます。

**直し方：** 伝えたいことを最初の 160 文字に収め、残りは削ってください。

**公式ガイド：** [developers.google.com/search/docs/appearance/snippet](https://developers.google.com/search/docs/appearance/snippet)

### canonical リンクがありません [#missing-canonical]

**重大度：** 通知 · **次元：** インデックス登録 · **ルール ID：** `missing-canonical` · **確認方法：** ルール検査 · **作業量：** 小

**意味：** ページが `<link rel="canonical">` を宣言していません。パラメータの有無や末尾のスラッシュの違いなど、どの URL を正規とするかを検索エンジンが自分で決めます。

**直し方：** そのページの正規 URL を指す canonical リンクを追加してください。多くのフレームワークや SEO プラグインは、全ページに自分自身を指す canonical を出力できます。

**公式ガイド：** [developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls)

### canonical が別の URL を指しています [#canonical-mismatch]

**重大度：** 警告 · **次元：** インデックス登録 · **ルール ID：** `canonical-mismatch` · **確認方法：** ルール検査 · **作業量：** 中

**意味：** canonical リンクが、ページ自身とは別の URL を指しています（リダイレクト後に比較します。末尾のスラッシュやホストの大文字は違いに数えません）。検索エンジンは、このページではなくその URL をインデックスすることがあります。

**直し方：** このページ自身を順位付けするなら、canonical を自分の URL に向けてください。意図した重複で、評価を別ページに渡すなら、そのままにして理由を付けて問題を無視してください。

**公式ガイド：** [developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls)

### viewport の meta がありません [#missing-viewport]

**重大度：** 警告 · **次元：** ページの基本 · **ルール ID：** `missing-viewport` · **確認方法：** ルール検査 · **作業量：** 小

**意味：** ページに `<meta name="viewport">` がないため、スマホでは縮小されたデスクトップページとして表示されます。Google はサイトのモバイル版をインデックスします。

**直し方：** `<head>` に `<meta name="viewport" content="width=device-width, initial-scale=1">` を追加してください。

**公式ガイド：** [developers.google.com/search/docs/crawling-indexing/mobile/mobile-sites-mobile-first-indexing](https://developers.google.com/search/docs/crawling-indexing/mobile/mobile-sites-mobile-first-indexing)

### ログインやアプリのページがインデックスされる [#indexable-app-page]

**重大度：** 警告 · **次元：** インデックス登録 · **ルール ID：** `indexable-app-page` · **確認方法：** ルール検査 · **作業量：** 小

**意味：** このアドレスはログイン、アカウント、アプリのページに見え、noindex なしで 200 を返します。検索結果にログイン画面が出ることがあります。

**直し方：** robots の meta か X-Robots-Tag に noindex を付けてください。これらのページにタイトルや説明は書かないでください。

**公式ガイド：** [developers.google.com/search/docs/crawling-indexing/robots-meta-tag](https://developers.google.com/search/docs/crawling-indexing/robots-meta-tag)

### ページが noindex に設定されています [#robots-noindex]

**重大度：** エラー · **次元：** インデックス登録 · **ルール ID：** `robots-noindex` · **確認方法：** ルール検査 · **作業量：** 小

**意味：** ページが検索エンジンにインデックスしないよう指示しているため、検索結果に出ません。ログイン、アカウント、カート、購入手続き、法務ページなど、意図して検索から外すのが普通のページでは、Loomaly はこれを報告しません。

**直し方：** 検索に出すべきページなら、robots の meta タグ（と `X-Robots-Tag` ヘッダー）から `noindex` を外してください。意図したものなら、理由を付けて問題を無視してください。

**公式ガイド：** [developers.google.com/search/docs/crawling-indexing/block-indexing](https://developers.google.com/search/docs/crawling-indexing/block-indexing)

### ページが nofollow に設定されています [#robots-nofollow]

**重大度：** 警告 · **次元：** インデックス登録 · **ルール ID：** `robots-nofollow` · **確認方法：** ルール検査 · **作業量：** 小

**意味：** ページ単位の robots 設定が `nofollow` のため、検索エンジンはそのページのリンクをたどりません。リンク先は、このページからの発見も評価も受け取りません。

**直し方：** ページの robots meta タグから `nofollow` を外してください。個別のリンクに評価を渡したくない場合は、そのリンクに `rel="nofollow"` を付けてください。

**公式ガイド：** [developers.google.com/search/docs/crawling-indexing/robots-meta-tag](https://developers.google.com/search/docs/crawling-indexing/robots-meta-tag)

### タイトルがページの内容と一致しません [#title-content-mismatch]

**重大度：** 警告 · **次元：** コンテンツと AI の読みやすさ · **ルール ID：** `title-content-mismatch` · **確認方法：** AI 判定 · **作業量：** 小

**意味：** `<title>` が約束する内容を、ページの見出しと本文が提供していません。クリックした人はすぐ離れ、Google が検索結果のタイトルを書き換えることがあります。

**直し方：** タイトルを、ページが実際に提供するものの説明に書き換えてください。主な見出しの言葉を使うか、タイトルの約束をページが果たすよう内容を変えてください。

**公式ガイド：** [developers.google.com/search/docs/appearance/title-link](https://developers.google.com/search/docs/appearance/title-link)

### Open Graph タグがありません [#missing-og-tags]

**重大度：** 通知 · **次元：** ページの基本 · **ルール ID：** `missing-og-tags` · **確認方法：** ルール検査 · **作業量：** 小

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** ページに `og:title`、`og:description`、`og:image` がありません。ソーシャルネットワーク、チャットアプリ、AI アシスタントは、リンクが共有されたときのプレビューにこれらの Open Graph タグを使います。

**直し方：** `<head>` に、少なくとも `og:title`、`og:description`、`og:image`（できれば `og:url` も）を追加してください。多くの SEO プラグインやフレームワークは、ページのタイトルと説明から生成できます。

**公式ガイド：** [ogp.me](https://ogp.me/)

### Open Graph 画像がありません [#missing-og-image]

**重大度：** 通知 · **次元：** ページの基本 · **ルール ID：** `missing-og-image` · **確認方法：** ルール検査 · **作業量：** 中

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** Open Graph タグはありますが `og:image` がないため、共有リンクにプレビュー画像が出ないか、適当な画像になります。

**直し方：** 代表画像の絶対 URL を `og:image` に追加してください。一般的なサイズは 1200 x 630 ピクセルです。

**公式ガイド：** [ogp.me](https://ogp.me/)

## 見出し [#category-headings]

| ルール | 重大度 | 次元 | 確認方法 |
| --- | --- | --- | --- |
| [H1 がありません](#missing-h1) | 警告 | ページの基本 | ルール検査 |
| [H1 タグが複数あります](#multiple-h1) | 警告 | ページの基本 | ルール検査 |
| [見出しレベルが飛ばされています](#heading-skip-level) | 通知 | ページの基本 | ルール検査 |

### H1 がありません [#missing-h1]

**重大度：** 警告 · **次元：** ページの基本 · **ルール ID：** `missing-h1` · **確認方法：** ルール検査 · **作業量：** 小

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** ページに `<h1>` がありません。H1 はページの主な見える見出しで、話題を示す強い手がかりです。

**直し方：** ページの主な話題を述べる H1 を、ちょうど 1 つ追加してください。タイトルと同じか、近い表現で構いません。

**公式ガイド：** [developers.google.com/search/docs/fundamentals/seo-starter-guide](https://developers.google.com/search/docs/fundamentals/seo-starter-guide)

### H1 タグが複数あります [#multiple-h1]

**重大度：** 警告 · **次元：** ページの基本 · **ルール ID：** `multiple-h1` · **確認方法：** ルール検査 · **作業量：** 小

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** `<h1>` が複数あり、主な話題がぼやけます。ロゴや節のタイトルをテーマが H1 にしていることがよくあります。

**直し方：** ページの主な話題の H1 を 1 つ残し、他は H2 か H3 にしてください。

**公式ガイド：** [developers.google.com/search/docs/fundamentals/seo-starter-guide](https://developers.google.com/search/docs/fundamentals/seo-starter-guide)

### 見出しレベルが飛ばされています [#heading-skip-level]

**重大度：** 通知 · **次元：** ページの基本 · **ルール ID：** `heading-skip-level` · **確認方法：** ルール検査 · **作業量：** 中

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** 見出しレベルが飛んでいます。たとえば H1 から H3 へ直接です。スクリーンリーダーとクローラーは見出しをページの目次として使い、飛びがあると追いにくくなります。

**直し方：** 構造に沿って見出しを順に使ってください（H1、次に H2、次に H3）。大きさはレベルを変えるのではなく、CSS で指定してください。

**公式ガイド：** [developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/Heading_Elements](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/Heading_Elements)

## コンテンツ [#category-content]

| ルール | 重大度 | 次元 | 確認方法 |
| --- | --- | --- | --- |
| [同じ検索で別のページと競合しています](#duplicate-intent) | 警告 | コンテンツと AI の読みやすさ | ページ判定 |
| [入手できない項目が、まだインデックス対象です](#unavailable-item) | 警告 | コンテンツと AI の読みやすさ | ページ判定 |
| [実内容のない仮ページです](#placeholder-page) | 警告 | コンテンツと AI の読みやすさ | ページ判定 |
| [訪問者の次の行動が明確でありません](#missing-next-step) | 警告 | コンテンツと AI の読みやすさ | AI 判定 |
| [内容が薄いです](#thin-content) | 警告 | コンテンツと AI の読みやすさ | AI 判定 |
| [文字数が少ないです](#low-word-count) | 通知 | コンテンツと AI の読みやすさ | ルール検査 |
| [キーワードの詰め込みの可能性があります](#keyword-stuffing) | 警告 | コンテンツと AI の読みやすさ | AI 判定 |
| [タイトルに狙う語句がありません](#keyword-missing-title) | 警告 | コンテンツと AI の読みやすさ | キーワード検査 |
| [H1 に狙う語句がありません](#keyword-missing-h1) | 通知 | コンテンツと AI の読みやすさ | キーワード検査 |
| [メタディスクリプションに狙う語句がありません](#keyword-missing-description) | 通知 | コンテンツと AI の読みやすさ | キーワード検査 |
| [書き出しに狙う語句がありません](#keyword-missing-intro) | 通知 | コンテンツと AI の読みやすさ | キーワード検査 |
| [検索された語句がタイトルにありません](#gsc-query-title-gap) | 警告 | コンテンツと AI の読みやすさ | キーワード検査 |
| [対策キーワードがタイトルの先頭にない](#keyword-not-title-start) | 通知 | コンテンツと AI の読みやすさ | キーワード検査 |
| [サイトに llms.txt がない](#llms-txt-missing) | 通知 | コンテンツと AI の読みやすさ | サイト検査 |
| [llms.txt が使えるページ一覧になっていない](#llms-txt-invalid) | 通知 | コンテンツと AI の読みやすさ | サイト検査 |
| [llms.txt のリンク先ページが開けない](#llms-txt-broken-links) | 警告 | コンテンツと AI の読みやすさ | サイト検査 |
| [AI に引用されやすい形になっていません](#page-not-citable-by-llm) | 通知 | コンテンツと AI の読みやすさ | AI 判定 |
| [著者名がありません](#missing-author-byline) | 通知 | コンテンツと AI の読みやすさ | AI 判定 |
| [公開日がありません](#missing-publish-date) | 通知 | コンテンツと AI の読みやすさ | AI 判定 |

### 同じ検索で別のページと競合しています [#duplicate-intent]

**重大度：** 警告 · **次元：** コンテンツと AI の読みやすさ · **ルール ID：** `duplicate-intent` · **確認方法：** ページ判定 · **作業量：** 大

**意味：** サイトの別のページが同じ検索に応えています。問題がそのページを名指しします。検索エンジンは通常どちらか 1 つを選び、もう一方は落ちます。互いを canonical や言語版として宣言済みのページは対象外です。

**直し方：** 2 つを 1 ページにまとめ、弱い URL はリダイレクトしてください。または一方の canonical でもう一方を指すか、対象、商品、質問を明確に分けてください。

**公式ガイド：** [developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls)

### 入手できない項目が、まだインデックス対象です [#unavailable-item]

**重大度：** 警告 · **次元：** コンテンツと AI の読みやすさ · **ルール ID：** `unavailable-item` · **確認方法：** ページ判定 · **作業量：** 中

**意味：** 売り切れ、販売終了、終わったイベントなど、もう入手できないものを扱うページなのに、検索からまだ見つけられます。

**直し方：** 代替や再入荷日など、訪問者の次の行動に役立つときだけ残してください。そうでなければ最も近い代替へリダイレクトするか、`noindex` にしてください。

**公式ガイド：** [developers.google.com/crawling/docs/troubleshooting/http-status-codes](https://developers.google.com/crawling/docs/troubleshooting/http-status-codes)

### 実内容のない仮ページです [#placeholder-page]

**重大度：** 警告 · **次元：** コンテンツと AI の読みやすさ · **ルール ID：** `placeholder-page` · **確認方法：** ページ判定 · **作業量：** 大

**意味：** 仮の文、空のカテゴリ、近日公開など、訪問者向けの中身がないひな型や仮ページです。

**直し方：** 実際の内容を入れるか、内容ができるまで検索から外してください（`noindex`、または非公開）。

**公式ガイド：** [developers.google.com/search/docs/fundamentals/creating-helpful-content](https://developers.google.com/search/docs/fundamentals/creating-helpful-content)

### 訪問者の次の行動が明確でありません [#missing-next-step]

**重大度：** 警告 · **次元：** コンテンツと AI の読みやすさ · **ルール ID：** `missing-next-step` · **確認方法：** AI 判定 · **作業量：** 中

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** ホーム、ランディング、商品ページが、登録、購入、予約、問い合わせ、続きを読むといった明確な次の一歩を訪問者に示していません。順位は付いても、得た訪問者を逃すことがあります。AI 判定はページのボタンと行動喚起のリンクを見ます。これは Loomaly がそれらを記録したページだけで調べます。

**直し方：** 主な行動喚起を上部と本文のあとに 1 つずつ置いてください。何が起きるかを動詞で書きます（「無料で試す」「通話を予約」）。副次のリンクは見た目を抑えてください。

**公式ガイド：** [developers.google.com/search/docs/fundamentals/creating-helpful-content](https://developers.google.com/search/docs/fundamentals/creating-helpful-content)

### 内容が薄いです [#thin-content]

**重大度：** 警告 · **次元：** コンテンツと AI の読みやすさ · **ルール ID：** `thin-content` · **確認方法：** AI 判定 · **作業量：** 大

**意味：** ページの目的（商品、記事、ランディングページ）に対して、訪問者に足る内容がありません。見出しと数行程度です。検索エンジンはそのようなページを価値が低いと扱います。

**直し方：** このページの訪問者が実際に必要とすることに答える内容を追加してください。独自の目的がないページは、関連ページにまとめるか検索から外してください。

**公式ガイド：** [developers.google.com/search/docs/fundamentals/creating-helpful-content](https://developers.google.com/search/docs/fundamentals/creating-helpful-content)

### 文字数が少ないです [#low-word-count]

**重大度：** 通知 · **次元：** コンテンツと AI の読みやすさ · **ルール ID：** `low-word-count` · **確認方法：** ルール検査 · **作業量：** 大

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** その話題で順位を取るのに通常必要な量より、本文が少ないです。

**直し方：** 仕様、よくある質問への答え、例など、役立つ詳細で広げてください。埋め草は避けてください。

**公式ガイド：** [developers.google.com/search/docs/fundamentals/creating-helpful-content](https://developers.google.com/search/docs/fundamentals/creating-helpful-content)

### キーワードの詰め込みの可能性があります [#keyword-stuffing]

**重大度：** 警告 · **次元：** コンテンツと AI の読みやすさ · **ルール ID：** `keyword-stuffing` · **確認方法：** AI 判定 · **作業量：** 中

**意味：** 人に向けて人が書いた文章に読めません。検索語が、自然な文章よりはるかに多く繰り返されています。読みにくく、検索でのペナルティの恐れがあります。

**直し方：** 該当箇所を自然に書き換え、類義語を使い、見出し、代替テキスト、フッターの繰り返しを削ってください。

**公式ガイド：** [developers.google.com/search/docs/essentials/spam-policies#keyword-stuffing](https://developers.google.com/search/docs/essentials/spam-policies#keyword-stuffing)

### タイトルに狙う語句がありません [#keyword-missing-title]

**重大度：** 警告 · **次元：** コンテンツと AI の読みやすさ · **ルール ID：** `keyword-missing-title` · **確認方法：** キーワード検査 · **作業量：** 小

**意味：** このページが順位を狙う語句が、Google が表示する `<title>` の部分にありません。タイトルの後半にだけある一致は、検索結果では切れます。

**直し方：** その語句を、ブランド名より前の `<title>` の前半に入れてください。

**公式ガイド：** [developers.google.com/search/docs/appearance/title-link](https://developers.google.com/search/docs/appearance/title-link)

### H1 に狙う語句がありません [#keyword-missing-h1]

**重大度：** 通知 · **次元：** コンテンツと AI の読みやすさ · **ルール ID：** `keyword-missing-h1` · **確認方法：** キーワード検査 · **作業量：** 小

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** このページが順位を狙う語句がどの H1 にもないため、訪問者が最初に見る見出しがページの目的を述べていません。

**直し方：** 検索する人が使う言葉で、その語句をページの H1 に使ってください。

**公式ガイド：** [developers.google.com/search/docs/fundamentals/seo-starter-guide](https://developers.google.com/search/docs/fundamentals/seo-starter-guide)

### メタディスクリプションに狙う語句がありません [#keyword-missing-description]

**重大度：** 通知 · **次元：** コンテンツと AI の読みやすさ · **ルール ID：** `keyword-missing-description` · **確認方法：** キーワード検査 · **作業量：** 小

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** このページが順位を狙う語句がメタディスクリプションにないため、結果の下のスニペットがそれに触れていません。

**直し方：** 訪問者が得るものについての文の中で、その語句をメタディスクリプションに 1 回入れてください。

**公式ガイド：** [developers.google.com/search/docs/appearance/snippet](https://developers.google.com/search/docs/appearance/snippet)

### 書き出しに狙う語句がありません [#keyword-missing-intro]

**重大度：** 通知 · **次元：** コンテンツと AI の読みやすさ · **ルール ID：** `keyword-missing-intro` · **確認方法：** キーワード検査 · **作業量：** 小

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** このページが順位を狙う語句がページの書き出しにないため、最初の画面では正しい場所に来たことを確認できません。

**直し方：** 最初の段落でその語句を使ってください。中国語、日本語、韓国語、タイ語のページでは最初の行です。

**公式ガイド：** [developers.google.com/search/docs/fundamentals/creating-helpful-content](https://developers.google.com/search/docs/fundamentals/creating-helpful-content)

### 検索された語句がタイトルにありません [#gsc-query-title-gap]

**重大度：** 警告 · **次元：** コンテンツと AI の読みやすさ · **ルール ID：** `gsc-query-title-gap` · **確認方法：** キーワード検査 · **作業量：** 小

**意味：** Google はすでに、実際の需要がある検索でこのページを表示していますが、その検索語句はタイトルにも H1 にもありません。タイトルが、このページがすでに得ている検索を無視しています。

**直し方：** ページが実際にその検索に答えているなら、タイトルか H1 に入れてください。ページが別のことを扱っているなら、入れないでください。

**公式ガイド：** [developers.google.com/search/docs/appearance/title-link](https://developers.google.com/search/docs/appearance/title-link)

### 対策キーワードがタイトルの先頭にない [#keyword-not-title-start]

**重大度：** 通知 · **次元：** コンテンツと AI の読みやすさ · **ルール ID：** `keyword-not-title-start` · **確認方法：** キーワード検査 · **作業量：** 小

**意味：** このページが上位を狙う語句はタイトルに入っていますが、先頭ではありません（幅の先頭3分の1、または最初の数語）。検索した人はタイトルの先頭を先に見ます。

**直し方：** その語句をタイトルの先頭、ブランド名より前に移してください。

**公式ガイド：** [developers.google.com/search/docs/appearance/title-link](https://developers.google.com/search/docs/appearance/title-link)

### サイトに llms.txt がない [#llms-txt-missing]

**重大度：** 通知 · **次元：** コンテンツと AI の読みやすさ · **ルール ID：** `llms-txt-missing` · **確認方法：** サイト検査 · **作業量：** 小

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** `/llms.txt` が無いか、そのアドレスがウェブページを返しています。HTML の受けページも無いものとして数えます。このファイルを読んでページを探す製品があり、中身はプレーンテキストである必要があります。

**直し方：** ドメインのルートに `/llms.txt` を `text/plain` で公開します。`#` のタイトル、任意の 1 行の要約、実在するページへの Markdown リンクを書きます。Next.js は `public/llms.txt` か `app/llms.txt/route.ts`。Astro と TanStack Start は `public/llms.txt`。Fumadocs はドキュメントのソースから生成します。Docusaurus とその他の静的サイトは `static/llms.txt` かホストの public フォルダです。

**公式ガイド：** [llmstxt.org](https://llmstxt.org/)

### llms.txt が使えるページ一覧になっていない [#llms-txt-invalid]

**重大度：** 通知 · **次元：** コンテンツと AI の読みやすさ · **ルール ID：** `llms-txt-invalid` · **確認方法：** サイト検査 · **作業量：** 小

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** `/llms.txt` はプレーンテキストで公開されていますが、使えるページ一覧になっていません。タイトル（`# …`）と、ページへの Markdown リンクが少なくとも 1 つ必要です。このファイルを読んでページを探す製品があります。ファイルが無いこと、またはそのアドレスが HTML を返すことは別のチェックです。

**直し方：** `/llms.txt` に `#` のタイトル、任意の要約、読んでほしいページへの Markdown リンクを書いてください。例: `- [料金](https://example.com/pricing): プランと価格`。`text/plain` で返します。Next.js は `public/llms.txt` か `app/llms.txt/route.ts`、Astro と TanStack Start は `public/llms.txt`、Fumadocs はドキュメントから生成、Docusaurus とその他の静的サイトは `static/llms.txt` を使えます。

**公式ガイド：** [llmstxt.org](https://llmstxt.org/)

### llms.txt のリンク先ページが開けない [#llms-txt-broken-links]

**重大度：** 警告 · **次元：** コンテンツと AI の読みやすさ · **ルール ID：** `llms-txt-broken-links` · **確認方法：** サイト検査 · **作業量：** 小

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** `/llms.txt` が、このサイトの中でエラーを返すページを指しています。確認したアドレスを問題に載せています。ファイルに従うと、開けないページに着きます。

**直し方：** 各リンクを 200 を返すページに向けるか、その行を削除してください。失敗した最初の数件をこの項目が挙げます。ファイルは多くの場合 `public/llms.txt` か、それを返すルートです。

**公式ガイド：** [llmstxt.org](https://llmstxt.org/)

### AI に引用されやすい形になっていません [#page-not-citable-by-llm]

**重大度：** 通知 · **次元：** コンテンツと AI の読みやすさ · **ルール ID：** `page-not-citable-by-llm` · **確認方法：** AI 判定 · **作業量：** 大

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** ページの各節が平易な答えから始まっていないか、その節だけでは理解できません。AI の回答や強調スニペットは、要点を先に述べる箇所を引用します。これを置き換えるマークアップはありません。

**直し方：** 各節を、見出しに直接答える文から始め、その後に詳細を足してください。人が質問する言い方に合う見出しを使い、具体的な事実と数値を書いてください。

**公式ガイド：** [developers.google.com/search/docs/appearance/ai-features](https://developers.google.com/search/docs/appearance/ai-features)

### 著者名がありません [#missing-author-byline]

**重大度：** 通知 · **次元：** コンテンツと AI の読みやすさ · **ルール ID：** `missing-author-byline` · **確認方法：** AI 判定 · **作業量：** 中

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** 記事が、ページ上でも構造化データでも、誰が書いたかを示していません。著者名は読者が内容を判断する助けになり、Google の品質に関するガイドラインが見る点の一部です。

**直し方：** 著者名を、短い経歴か著者ページへのリンクと一緒に表示し、ページの Article の JSON-LD に著者を追加してください。

**公式ガイド：** [developers.google.com/search/docs/fundamentals/creating-helpful-content](https://developers.google.com/search/docs/fundamentals/creating-helpful-content)

### 公開日がありません [#missing-publish-date]

**重大度：** 通知 · **次元：** コンテンツと AI の読みやすさ · **ルール ID：** `missing-publish-date` · **確認方法：** AI 判定 · **作業量：** 小

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** 記事が、ページ上でも構造化データでも、公開日や更新日を示していないため、読者は最新かどうかを判断できません。

**直し方：** 公開日（と更新日）をページに表示し、ページの JSON-LD に `datePublished` と `dateModified` を追加してください。

**公式ガイド：** [developers.google.com/search/docs/appearance/publication-dates](https://developers.google.com/search/docs/appearance/publication-dates)

## 画像 [#category-images]

| ルール | 重大度 | 次元 | 確認方法 |
| --- | --- | --- | --- |
| [画像に代替テキストがありません](#image-missing-alt) | 警告 | ページの基本 | ルール検査 |
| [画像が遅延読み込みされていません](#image-no-lazy-loading) | 通知 | 表示速度 | ルール検査 |

### 画像に代替テキストがありません [#image-missing-alt]

**重大度：** 警告 · **次元：** ページの基本 · **ルール ID：** `image-missing-alt` · **確認方法：** ルール検査 · **作業量：** 中

**意味：** 1 つ以上の `<img>` に `alt` 属性がありません。問題には、ページの画像のうち何件が対象かが書かれています。スクリーンリーダーは説明できず、Google 画像検索の手がかりも減ります。

**直し方：** 意味のある画像には、内容を述べる短い `alt` を付けてください。装飾だけの画像は空の `alt=""` にしてください。

**公式ガイド：** [developers.google.com/search/docs/appearance/google-images](https://developers.google.com/search/docs/appearance/google-images)

### 画像が遅延読み込みされていません [#image-no-lazy-loading]

**重大度：** 通知 · **次元：** 表示速度 · **ルール ID：** `image-no-lazy-loading` · **確認方法：** ルール検査 · **作業量：** 小

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** ページ下部の画像も同時に読み込まれ、訪問者が最初に見るものと同じ回線を奪います。

**直し方：** 最初の画面より下の画像に `loading="lazy"` を追加してください。ページ上部の主画像は遅延読み込みしないでください。Largest Contentful Paint が遅くなります。

**公式ガイド：** [web.dev/articles/browser-level-image-lazy-loading](https://web.dev/articles/browser-level-image-lazy-loading)

## リンク [#category-links]

| ルール | 重大度 | 次元 | 確認方法 |
| --- | --- | --- | --- |
| [内部リンクがありません](#no-internal-links) | 警告 | ページの基本 | ルール検査 |
| [内部リンクが少ないです](#too-few-internal-links) | 通知 | ページの基本 | ルール検査 |
| [外部リンクが多すぎます](#excessive-external-links) | 通知 | ページの基本 | ルール検査 |
| [狙う語句を使った内部リンクがありません](#keyword-anchor-missing) | 通知 | コンテンツと AI の読みやすさ | キーワード検査 |
| [フォーカスページへの内部リンクが少ない](#focus-page-few-inlinks) | 警告 | コンテンツと AI の読みやすさ | キーワード検査 |
| [エラーを返すページへの内部リンク](#internal-links-to-errors) | 警告 | ページの基本 | サイト検査 |
| [sitemap のページに、他のページからのリンクがありません](#orphan-pages) | 警告 | ページの基本 | サイト検査 |

### 内部リンクがありません [#no-internal-links]

**重大度：** 警告 · **次元：** ページの基本 · **ルール ID：** `no-internal-links` · **確認方法：** ルール検査 · **作業量：** 中

**意味：** ページがサイト内の他のページへリンクしていません。サイトの他の部分へ評価を渡せず、クローラーがここから見つけられるものも減ります。

**直し方：** 本文に関連ページへのリンクを加え、ナビゲーションやパンくずも付けてください。リンクはクリック処理ではなく、本物の `<a href>` にしてください。

**公式ガイド：** [developers.google.com/search/docs/crawling-indexing/links-crawlable](https://developers.google.com/search/docs/crawling-indexing/links-crawlable)

### 内部リンクが少ないです [#too-few-internal-links]

**重大度：** 通知 · **次元：** ページの基本 · **ルール ID：** `too-few-internal-links` · **確認方法：** ルール検査 · **作業量：** 中

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** サイト内の他のページへのリンクがごく少なく、評価が低く扱われ、訪問者を先へ案内する役にもあまり立ちません。

**直し方：** 読者の役に立つ箇所で、関連する商品、記事、カテゴリへリンクしてください。

**公式ガイド：** [developers.google.com/search/docs/crawling-indexing/links-crawlable](https://developers.google.com/search/docs/crawling-indexing/links-crawlable)

### 外部リンクが多すぎます [#excessive-external-links]

**重大度：** 通知 · **次元：** ページの基本 · **ルール ID：** `excessive-external-links` · **確認方法：** ルール検査 · **作業量：** 中

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** 多くの外部ドメインへリンクしています。外向きのリンクは、読者のために置くべきです。

**直し方：** 編集上の理由がないリンクは外してください。有料やアフィリエイトのリンクには `rel="sponsored"`、利用者投稿のリンクには `rel="ugc"` を付けてください。

**公式ガイド：** [developers.google.com/search/docs/fundamentals/seo-starter-guide](https://developers.google.com/search/docs/fundamentals/seo-starter-guide)

### 狙う語句を使った内部リンクがありません [#keyword-anchor-missing]

**重大度：** 通知 · **次元：** コンテンツと AI の読みやすさ · **ルール ID：** `keyword-anchor-missing` · **確認方法：** キーワード検査 · **作業量：** 小

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** サイトの他のページがここへリンクしていますが、そのリンクのどれも、このページが順位を狙う語句を使っていません。アンカーテキストは、それらのリンクが渡す手がかりです。

**直し方：** このページへの内部リンクの少なくとも 1 つで、その語句を見えるリンクテキストにしてください。

**公式ガイド：** [developers.google.com/search/docs/crawling-indexing/links-crawlable](https://developers.google.com/search/docs/crawling-indexing/links-crawlable)

### フォーカスページへの内部リンクが少ない [#focus-page-few-inlinks]

**重大度：** 警告 · **次元：** コンテンツと AI の読みやすさ · **ルール ID：** `focus-page-few-inlinks` · **確認方法：** キーワード検査 · **作業量：** 小

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** フォーカスページを指す内部リンクが5件未満か、アンカーテキストの種類が5未満です。サイト内からの注目が少ないページです。

**直し方：** 関連ページから内部リンクを足してください。アシスタントでは link_suggestions を呼び、合うものを承認します。

**公式ガイド：** [developers.google.com/search/docs/crawling-indexing/links-crawlable](https://developers.google.com/search/docs/crawling-indexing/links-crawlable)

### エラーを返すページへの内部リンク [#internal-links-to-errors]

**重大度：** 警告 · **次元：** ページの基本 · **ルール ID：** `internal-links-to-errors` · **確認方法：** サイト検査 · **作業量：** 中

**意味：** サイトのページが、エラー（4xx または 5xx）で応答するサイト内の他のページへリンクしています。問題は、何ページが何件の届かないページへリンクしているかを例とともに示します。たどった訪問者は行き止まりに当たり、クローラーはその訪問をそこに使います。

**直し方：** 各リンクをページの現在のアドレスに向けるか、外してください。ページが移ったなら、外部のリンクも動き続けるよう、古いアドレスを新しいアドレスへリダイレクトしてください。

**公式ガイド：** [developers.google.com/crawling/docs/troubleshooting/http-status-codes](https://developers.google.com/crawling/docs/troubleshooting/http-status-codes)

### sitemap のページに、他のページからのリンクがありません [#orphan-pages]

**重大度：** 警告 · **次元：** ページの基本 · **ルール ID：** `orphan-pages` · **確認方法：** サイト検査 · **作業量：** 中

**意味：** sitemap に、サイトのどのページからもリンクされていないページがあります。問題は件数と例を示し、それぞれ確認して読み込めています。訪問者は外部からしか到達できず、検索エンジンは誰もリンクしないページをあまり重視しません。sitemap に入れるべきでないページ（テンプレート、確認用ファイル、古いキャンペーン）であることもあります。

**直し方：** 必要なページは、関連ページ、まとめページ、ナビゲーションからリンクしてください。公開すべきでないものは sitemap から外してください。

**公式ガイド：** [developers.google.com/search/docs/crawling-indexing/links-crawlable](https://developers.google.com/search/docs/crawling-indexing/links-crawlable)

## 構造化データ [#category-structured-data]

| ルール | 重大度 | 次元 | 確認方法 |
| --- | --- | --- | --- |
| [JSON-LD の構造化データがありません](#missing-structured-data) | 通知 | 構造化データ | ルール検査 |
| [商品ページに Product の構造化データがありません](#missing-product-schema) | 警告 | 構造化データ | ルール検査 |
| [構造化データが無効です](#invalid-structured-data) | 警告 | 構造化データ | ルール検査 |
| [Organization の構造化データがありません](#missing-organization-schema) | 通知 | 構造化データ | ルール検査 |
| [パンくずの構造化データがありません](#missing-breadcrumb-schema) | 通知 | 構造化データ | ルール検査 |

### JSON-LD の構造化データがありません [#missing-structured-data]

**重大度：** 通知 · **次元：** 構造化データ · **ルール ID：** `missing-structured-data` · **確認方法：** ルール検査 · **作業量：** 中

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** ページに JSON-LD のブロックがありません。構造化データは、商品、記事、事業などを検索エンジンが直接読める形で表し、多くのリッチリザルトに必要です。

**直し方：** 合う Schema.org の型の `<script type="application/ld+json">` ブロックを追加してください。アシスタント（`problem`）に、サイトの種類に合わせた貼り付け用ブロックを出してもらい、公開前に仮の値を置き換えてください。

**公式ガイド：** [developers.google.com/search/docs/appearance/structured-data/intro-structured-data](https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data)

### 商品ページに Product の構造化データがありません [#missing-product-schema]

**重大度：** 警告 · **次元：** 構造化データ · **ルール ID：** `missing-product-schema` · **確認方法：** ルール検査 · **作業量：** 中

**意味：** これは商品ページですが、`Product` の構造化データがありません。Google ショッピング、リッチリザルト、AI アシスタントは、商品名、価格、通貨、在庫をそのマークアップから読みます。ないと、ページから推測するしかなく、見えないこともあります。

**直し方：** `name`、`image`、`description` と、`offers` オブジェクト（`price`、`priceCurrency`、`availability`、`url`）を持つ `Product` の JSON-LD を、ページが表示しているのと同じデータから生成して追加してください。ブラウザで描画するサイトでは、サーバーが送る HTML に入れる必要があります。

**公式ガイド：** [developers.google.com/search/docs/appearance/structured-data/product-snippet](https://developers.google.com/search/docs/appearance/structured-data/product-snippet)

### 構造化データが無効です [#invalid-structured-data]

**重大度：** 警告 · **次元：** 構造化データ · **ルール ID：** `invalid-structured-data` · **確認方法：** ルール検査 · **作業量：** 小

**意味：** ページの JSON-LD が Schema.org の規則に対して誤りを含みます。Loomaly は AI ではなく自前の検証で調べ、問題には最初の誤りの場所と、残りの件数を示します。報告するのは誤りだけで、警告は含めません。

**直し方：** 示された場所のプロパティを直してください。アシスタント（`problem`）に、あなたのマークアップを直した複製、変更点、あなたにしかない事実がまだ必要な箇所を出してもらい、その後 Google の Rich Results Test でページを試してください。

**公式ガイド：** [developers.google.com/search/docs/appearance/structured-data/sd-policies](https://developers.google.com/search/docs/appearance/structured-data/sd-policies)

### Organization の構造化データがありません [#missing-organization-schema]

**重大度：** 通知 · **次元：** 構造化データ · **ルール ID：** `missing-organization-schema` · **確認方法：** ルール検査 · **作業量：** 小

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** ホームページに Organization（または LocalBusiness）の JSON-LD がありません。これは検索エンジンに名前、ロゴ、プロフィールを伝え、ナレッジパネルの対象になります。

**直し方：** ホームページに、`name`、`url`、`logo`、プロフィールへの `sameAs` リンクを持つ Organization の JSON-LD を追加してください。地域の事業は、住所と営業時間を持つ LocalBusiness を使います。アシスタント（`problem`）に記入用のひな型を出してもらってください。

**公式ガイド：** [developers.google.com/search/docs/appearance/structured-data/organization](https://developers.google.com/search/docs/appearance/structured-data/organization)

### パンくずの構造化データがありません [#missing-breadcrumb-schema]

**重大度：** 通知 · **次元：** 構造化データ · **ルール ID：** `missing-breadcrumb-schema` · **確認方法：** ルール検査 · **作業量：** 中

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** ページに BreadcrumbList の JSON-LD がありません。これがあると、Google は裸の URL ではなくサイト内の位置を表示できます。

**直し方：** ナビゲーション上の位置と一致する BreadcrumbList の JSON-LD を追加してください。多くの基盤と SEO プラグインはパンくずから生成できます。アシスタント（`problem`）にひな型を出してもらってください。

**公式ガイド：** [developers.google.com/search/docs/appearance/structured-data/breadcrumb](https://developers.google.com/search/docs/appearance/structured-data/breadcrumb)

## 技術 [#category-technical]

| ルール | 重大度 | 次元 | 確認方法 |
| --- | --- | --- | --- |
| [エラーページが通常のページとして配信されています](#soft-404) | エラー | インデックス登録 | ページ判定 |
| [JavaScript を実行しないクローラーには空のページに見えます](#client-rendered-without-ssr) | エラー | インデックス登録 | ルール検査 |
| [検索エンジンだけが描画済みページを受け取り、AI クローラーには空に見えます](#prerendered-for-search-engines-only) | 警告 | コンテンツと AI の読みやすさ | ルール検査 |
| [ページが HTTP で配信されています](#non-https) | エラー | インデックス登録 | ルール検査 |
| [robots.txt が有効な robots ファイルではありません](#robots-txt-invalid) | 警告 | インデックス登録 | サイト検査 |
| [robots.txt が sitemap を指していません](#robots-txt-no-sitemap) | 通知 | インデックス登録 | サイト検査 |
| [robots.txt はコメントだけ](#robots-only-comments) | 通知 | インデックス登録 | サイト検査 |
| [robots.txt が AI 検索回答のクローラーをブロックしています](#ai-search-crawlers-blocked) | 警告 | コンテンツと AI の読みやすさ | サイト検査 |
| [robots.txt が AI クローラーを止めている](#ai-crawler-blocked) | 警告 | コンテンツと AI の読みやすさ | サイト検査 |
| [サイトが AI の回答エンジンにページを使わないよう求めている](#content-signal-blocks-ai-answers) | 警告 | コンテンツと AI の読みやすさ | サイト検査 |
| [サイトマップがない](#sitemap-missing) | 警告 | インデックス登録 | サイト検査 |
| [サイトマップにインデックス対象のページが足りない](#sitemap-stale) | 警告 | インデックス登録 | サイト検査 |
| [sitemap が有効な XML ではありません](#sitemap-invalid) | 警告 | インデックス登録 | サイト検査 |
| [sitemap に、インデックスすべき版ではないページが含まれています](#sitemap-lists-non-canonical) | 警告 | インデックス登録 | サイト検査 |
| [canonical が、リダイレクトするか失敗するアドレスを指しています](#canonical-target-broken) | 警告 | インデックス登録 | サイト検査 |
| [別のモバイルサイトに rel="alternate" がありません](#mobile-site-not-annotated) | 警告 | インデックス登録 | サイト検査 |
| [アドレスの別版が恒久的にリダイレクトしていません](#host-variants-not-redirected) | 警告 | インデックス登録 | サイト検査 |
| [favicon がありません](#missing-favicon) | 通知 | ページの基本 | ルール検査 |
| [ページが 200 以外のステータスを返しました](#non-200-status) | エラー | インデックス登録 | ルール検査 |

### エラーページが通常のページとして配信されています [#soft-404]

**重大度：** エラー · **次元：** インデックス登録 · **ルール ID：** `soft-404` · **確認方法：** ページ判定 · **作業量：** 中

**意味：** ページは見つからない、または壊れていると書いていますが、HTTP 200 で応答するため、検索エンジンは実在するページとしてインデックスし続けます。

**直し方：** なくなったページには本物の 404 か 410 を返すか、正しいページへリダイレクト（301）してください。

**公式ガイド：** [developers.google.com/crawling/docs/troubleshooting/http-status-codes](https://developers.google.com/crawling/docs/troubleshooting/http-status-codes)

### JavaScript を実行しないクローラーには空のページに見えます [#client-rendered-without-ssr]

**重大度：** エラー · **次元：** インデックス登録 · **ルール ID：** `client-rendered-without-ssr` · **確認方法：** ルール検査 · **作業量：** 大

**意味：** JavaScript を実行せずに取得すると、ページはそれなりの大きさの文書（HTML が 20 KB 以上）なのに本文は 150 文字未満です。内容は JavaScript の実行後にだけ現れます。JavaScript を実行しないクローラー、多くの AI クローラー（ChatGPT、Perplexity、Claude）やリンクのプレビューが見るのはこれです。サイトによっては Googlebot にだけ描画済みページを送ります。その場合 Google は内容を見ますが、AI クローラーは依然として見ません。このようなページは判断するには空すぎるため、AI 判定の代わりにこの問題が付きます。

**直し方：** サーバーで描画するか、ビルド時に事前に描画して、HTML にすでに内容が含まれるようにしてください。多くのフレームワークにはサーバー側の描画や静的な生成があります。

**公式ガイド：** [developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics](https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics)

### 検索エンジンだけが描画済みページを受け取り、AI クローラーには空に見えます [#prerendered-for-search-engines-only]

**重大度：** 警告 · **次元：** コンテンツと AI の読みやすさ · **ルール ID：** `prerendered-for-search-engines-only` · **確認方法：** ルール検査 · **作業量：** 大

**意味：** 通常の訪問者として取得すると、ページは JavaScript が後から埋める空の枠です。Googlebot として取得すると、完全に描画された状態で届きます。サイトは検索エンジンにだけ事前に描画しています。そのため Google と Bing は内容を見て順位付けできますが、AI クローラー（ChatGPT、Perplexity、Claude など）は JavaScript を実行せず、事前描画の対象にも入っていないため、空のページを見て、回答で価格、在庫、詳細を引用できません。

**直し方：** 主な AI クローラー（GPTBot、OAI-SearchBot、PerplexityBot、ClaudeBot など）を事前描画の対象に追加してください。事前描画サービスや CDN の規則を 1 行変えるだけで済むことが多いです。長い目では、誰に対してもサーバーで内容を描画してください。

**公式ガイド：** [developers.google.com/search/docs/crawling-indexing/javascript/dynamic-rendering](https://developers.google.com/search/docs/crawling-indexing/javascript/dynamic-rendering)

### ページが HTTP で配信されています [#non-https]

**重大度：** エラー · **次元：** インデックス登録 · **ルール ID：** `non-https` · **確認方法：** ルール検査 · **作業量：** 中

**意味：** ページが平文の HTTP で配信されています。HTTPS は Google が確認している順位の要因で、ブラウザは HTTP のページを安全でないと表示します。

**直し方：** TLS 証明書を導入し、すべての HTTP URL を 301 で HTTPS 版へリダイレクトし、内部リンクと canonical を HTTPS に更新してください。

**公式ガイド：** [developers.google.com/search/docs/appearance/page-experience](https://developers.google.com/search/docs/appearance/page-experience)

### robots.txt が有効な robots ファイルではありません [#robots-txt-invalid]

**重大度：** 警告 · **次元：** インデックス登録 · **ルール ID：** `robots-txt-invalid` · **確認方法：** サイト検査 · **作業量：** 小

**意味：** ドメイン直下の `/robots.txt` が、プレーンテキストの規則ではなくウェブページかサーバーエラーを返しています。クローラーはそこから規則も sitemap も得られず、サーバーエラーがあると Google はサイトのクロールを一時停止します。

**直し方：** ドメイン直下から `/robots.txt` を `text/plain` で配信し、`User-agent` の規則と `Sitemap:` の行を入れてください。どのパスにも応じてしまうルートや、ホームページへのリダイレクトが、これに応答しないようにしてください。

**公式ガイド：** [developers.google.com/crawling/docs/robots-txt/create-robots-txt](https://developers.google.com/crawling/docs/robots-txt/create-robots-txt)

### robots.txt が sitemap を指していません [#robots-txt-no-sitemap]

**重大度：** 通知 · **次元：** インデックス登録 · **ルール ID：** `robots-txt-no-sitemap` · **確認方法：** サイト検査 · **作業量：** 小

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** `robots.txt` に `Sitemap:` の行がないか、サイトに robots.txt がありません。sitemap を送信済みの検索エンジンはそれを持っています。Bing や AI クローラーなどは、自分で見つける必要があります。

**直し方：** `/robots.txt` に `Sitemap: https://your-domain/sitemap.xml`（各 sitemap の完全な URL）を追加してください。サイトに robots.txt がない場合（根拠が `no robots.txt`）、その行だけのファイルを作ってください。それだけで有効なファイルになり、何もブロックしません。

**公式ガイド：** [developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap#addsitemap](https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap#addsitemap)

### robots.txt はコメントだけ [#robots-only-comments]

**重大度：** 通知 · **次元：** インデックス登録 · **ルール ID：** `robots-only-comments` · **確認方法：** サイト検査 · **作業量：** 小

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** robots.txt にクローラーのルールも Sitemap 行もなく、コメントだけです。Cloudflare のようなホストがこのようなファイルを配り、自分で管理します。プロジェクト内のコピーはクローラーが読むものではないことがあります。

**直し方：** ホストの robots.txt 設定に Sitemap 行を追加してください。ファイルを自分で置けるなら、コメントを実際のルールと Sitemap 行に置き換えてください。

**公式ガイド：** [developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap#addsitemap](https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap#addsitemap)

### robots.txt が AI 検索回答のクローラーをブロックしています [#ai-search-crawlers-blocked]

**重大度：** 警告 · **次元：** コンテンツと AI の読みやすさ · **ルール ID：** `ai-search-crawlers-blocked` · **確認方法：** サイト検査 · **作業量：** 小

**意味：** `robots.txt` が、検索つき AI 回答のためにページを取得するクローラーの 1 つ以上を拒否しています。OAI-SearchBot（ChatGPT の検索）、Claude-SearchBot（Claude）、PerplexityBot（Perplexity）です。問題はどれかを名指しします。それらの製品はサイトを読めないため、引用もリンクもできません。これは学習用クローラー（GPTBot、ClaudeBot、Google-Extended）とは別です。そちらをブロックしても、将来のモデル学習からページを外すだけです。多くのサイトは意図せず両方をまとめてブロックしています。CDN で設定したブロック（ボット遮断のスイッチなど）は robots.txt に含まれず、ここでは調べません。

**直し方：** AI の回答に出たい場合は、名指しされたクローラーの `Disallow` 行を外すか、それぞれに `Allow: /` のグループを与えてください。たとえば `User-agent: OAI-SearchBot` の次に `Allow: /` です。学習に使われたくない場合は、GPTBot、ClaudeBot、Google-Extended のブロックは残して構いません。意図したブロックなら、この問題を無視してください。

**公式ガイド：** [developers.openai.com/api/docs/bots](https://developers.openai.com/api/docs/bots)

### robots.txt が AI クローラーを止めている [#ai-crawler-blocked]

**重大度：** 警告 · **次元：** コンテンツと AI の読みやすさ · **ルール ID：** `ai-crawler-blocked` · **確認方法：** サイト検査 · **作業量：** 小

**意味：** `robots.txt` が 1 つ以上の AI クローラーにトップページを禁じています。検索・回答用（OAI-SearchBot、Claude-SearchBot、PerplexityBot）は警告です。それらの製品はサイトを読めません。学習用（GPTBot、ClaudeBot、Google-Extended と、Applebot-Extended や CCBot のような近いもの）は通知だけです。止めても、将来のモデル学習から外れるだけで、それだけでは AI の回答からサイトが消えるわけではありません。どのクローラーかは項目に書きます。Content-Signal の拒否は別のチェックです。CDN での遮断は robots.txt に無く、ここでは見ません。

**直し方：** AI の回答に出したいなら、項目が名指しした検索クローラーの `Disallow` を外すか、それぞれに `Allow: /` のグループを書いてください。学習用クローラーは止め続けてよく、その場合は通知のままです。意図した遮断なら、この項目は無視してください。

**公式ガイド：** [developers.openai.com/api/docs/bots](https://developers.openai.com/api/docs/bots)

### サイトが AI の回答エンジンにページを使わないよう求めている [#content-signal-blocks-ai-answers]

**重大度：** 警告 · **次元：** コンテンツと AI の読みやすさ · **ルール ID：** `content-signal-blocks-ai-answers` · **確認方法：** サイト検査 · **作業量：** 小

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** `robots.txt` の `Content-Signal` が、AI の回答用にページを取得するクローラーに対して検索または AI 入力をオフにしています（`search=no` または `ai-input=no`）。対象は OAI-SearchBot、Claude-SearchBot、PerplexityBot です。これらの製品は、回答にページを使わないよう求められています。学習だけを拒否する `ai-train=no` ではこの問題になりません。

**直し方：** `*` またはこれらのクローラーに効く `Content-Signal` 行で、ページの利用を許すなら `ai-input=yes` と `search=yes` にします。`ai-train=no` はそのままで構いません。意図した拒否なら、この問題は無視してください。

**公式ガイド：** [contentsignals.org](https://contentsignals.org/)

### サイトマップがない [#sitemap-missing]

**重大度：** 警告 · **次元：** インデックス登録 · **ルール ID：** `sitemap-missing` · **確認方法：** サイト検査 · **作業量：** 小

**意味：** sitemap.xml が応答せず、robots.txt もサイトマップを示していません。ページが多いと、クローラーはリンクから一つずつ見つける必要があります。

**直し方：** ルートやコンテンツから XML サイトマップを生成し、robots.txt に Sitemap 行を追加してください。その後 Loomaly から送信します。Search Console を開く必要はありません。

**公式ガイド：** [developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap](https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap)

### サイトマップにインデックス対象のページが足りない [#sitemap-stale]

**重大度：** 警告 · **次元：** インデックス登録 · **ルール ID：** `sitemap-stale` · **確認方法：** サイト検査 · **作業量：** 中

**意味：** サイトマップはあるのに、クロールで見つかったインデックス可能なページが入っていません。末尾のスラッシュ、www、クエリは別ページではありません。

**直し方：** ルートやコンテンツと同じソースからサイトマップを生成し、新しいページが自動で入るようにしてください。URL を手で足さないでください。ログインやアプリのページは入れません。

**公式ガイド：** [developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap](https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap)

### sitemap が有効な XML ではありません [#sitemap-invalid]

**重大度：** 警告 · **次元：** インデックス登録 · **ルール ID：** `sitemap-invalid` · **確認方法：** サイト検査 · **作業量：** 中

**意味：** sitemap のアドレスが、sitemap ではないものを返しています。多くは、どのパスにも応じてしまうルートが配信するサイト自身のウェブページか、robots.txt が sitemap があると言う場所の 404 です。クローラーはそこから URL の一覧を得られません。

**直し方：** sitemap を XML（`<urlset>` または `<sitemapindex>`）として、XML のコンテンツタイプで配信し、robots.txt は実在する sitemap の URL だけを指すようにしてください。

**公式ガイド：** [developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap](https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap)

### sitemap に、インデックスすべき版ではないページが含まれています [#sitemap-lists-non-canonical]

**重大度：** 警告 · **次元：** インデックス登録 · **ルール ID：** `sitemap-lists-non-canonical` · **確認方法：** サイト検査 · **作業量：** 中

**意味：** sitemap に、Google がインデックスすべき版ではない URL が含まれています。別の URL を canonical と宣言している、別ページへリダイレクトする、またはエラーで応答するものです。問題は件数と例を示します（リダイレクトは行き先も示します）。ページと食い違う sitemap は、Google からの信頼が下がります。

**直し方：** canonical タグと同じ情報源から sitemap を生成し、リダイレクトせず 200 で応答し、canonical が自分自身を指す URL だけを載せてください。古いパスは、リダイレクト先のアドレスに置き換えてください。

**公式ガイド：** [developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap](https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap)

### canonical が、リダイレクトするか失敗するアドレスを指しています [#canonical-target-broken]

**重大度：** 警告 · **次元：** インデックス登録 · **ルール ID：** `canonical-target-broken` · **確認方法：** サイト検査 · **作業量：** 中

**意味：** 一部のページが、検索エンジンがインデックスすべき版である canonical の URL として、それ自体がリダイレクトするかエラーで応答するアドレスを指定しています。問題は各アドレスと応答、それを指定しているページ数を列挙します。検索エンジンは回り道か行き止まりへ送られ、canonical を無視するかページを落とすことがあります。

**直し方：** 各 canonical を、200 で応答する最終のアドレスに向けてください。通常はページ自身か、古いアドレスが今リダイレクトしている先です。canonical は多くの場合、共通のテンプレートか SEO プラグインの設定でまとめて指定します。

**公式ガイド：** [developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls)

### 別のモバイルサイトに rel="alternate" がありません [#mobile-site-not-annotated]

**重大度：** 警告 · **次元：** インデックス登録 · **ルール ID：** `mobile-site-not-annotated` · **確認方法：** サイト検査 · **作業量：** 中

**意味：** Googlebot のスマートフォン用クローラーを含むスマホが、別ホストのモバイルサイトへリダイレクトされます（問題がそのホストを名指しします）。Google は対を双方向に宣言するよう求めています。モバイルページの canonical がデスクトップページを指し、デスクトップページにはモバイルページを指す `media` 属性付きの `rel="alternate"` リンクが必要です。このデスクトップページにはそのリンクがありません。

**直し方：** 各デスクトップページに、対応するモバイル URL への `<link rel="alternate" media="only screen and (max-width: 640px)" href="https://m.your-site/...">` を追加し、モバイルページの canonical はデスクトップを指したままにしてください。または、1 つのアドレスで画面幅に合わせて変わるサイトを配信してください。

**公式ガイド：** [developers.google.com/search/docs/crawling-indexing/mobile/mobile-sites-mobile-first-indexing](https://developers.google.com/search/docs/crawling-indexing/mobile/mobile-sites-mobile-first-indexing)

### アドレスの別版が恒久的にリダイレクトしていません [#host-variants-not-redirected]

**重大度：** 警告 · **次元：** インデックス登録 · **ルール ID：** `host-variants-not-redirected` · **確認方法：** サイト検査 · **作業量：** 小

**意味：** サイトが複数のアドレスで応答しています。`http://` 版、または `www.` の有無の版が、サイト自身を表示するか、一時的なリダイレクト（302 または 307）で訪問者を送っています。問題は各アドレスと応答を列挙します。検索エンジンはそれらを別サイトと扱い、リンクとシグナルを分けてしまうことがあります。

**直し方：** 他のすべての版が、主なアドレスへまっすぐ 1 回の恒久リダイレクト（301 または 308）で応答するようにしてください。ホスティングや CDN のドメイン設定で行えます（Cloudflare では **Always Use HTTPS** と、もう一方のホスト用のリダイレクト規則）。

**公式ガイド：** [developers.google.com/search/docs/crawling-indexing/301-redirects](https://developers.google.com/search/docs/crawling-indexing/301-redirects)

### favicon がありません [#missing-favicon]

**重大度：** 通知 · **次元：** ページの基本 · **ルール ID：** `missing-favicon` · **確認方法：** ルール検査 · **作業量：** 小

**意味：** ページが favicon を宣言していません。Google は検索結果の横に、ブラウザはタブとブックマークに表示します。

**直し方：** `<head>` に `<link rel="icon" href="/favicon.ico">`（または PNG か SVG のアイコン）を追加してください。

**公式ガイド：** [developers.google.com/search/docs/appearance/favicon-in-search](https://developers.google.com/search/docs/appearance/favicon-in-search)

### ページが 200 以外のステータスを返しました [#non-200-status]

**重大度：** エラー · **次元：** インデックス登録 · **ルール ID：** `non-200-status` · **確認方法：** ルール検査 · **作業量：** 中

**意味：** ページが（リダイレクトをたどったあと）エラーのステータスで応答しており、通常のインデックスから外れます。問題はステータスコードを示します。

**直し方：** ページが存在するべきなら、サーバーエラーを直すかページを復元してください。意図して削除したなら、代替へリダイレクトするか、そこへのリンクを外して sitemap からも外してください。

**公式ガイド：** [developers.google.com/crawling/docs/troubleshooting/http-status-codes](https://developers.google.com/crawling/docs/troubleshooting/http-status-codes)

## 表示速度 [#category-performance]

| ルール | 重大度 | 次元 | 確認方法 |
| --- | --- | --- | --- |
| [Largest Contentful Paint が 2.5 秒を超えています](#cwv-lcp-poor) | 警告 | 表示速度 | 表示速度テスト |
| [Interaction to Next Paint が 200ms を超えています](#cwv-inp-poor) | 警告 | 表示速度 | 表示速度テスト |
| [Cumulative Layout Shift が 0.1 を超えています](#cwv-cls-poor) | 警告 | 表示速度 | 表示速度テスト |
| [Time to First Byte が 800ms を超えています](#cwv-ttfb-slow) | 警告 | 表示速度 | 表示速度テスト |
| [Lighthouse の Performance スコアが 50 未満です](#lighthouse-perf-low) | 警告 | 表示速度 | 表示速度テスト |
| [LCP 画像が優先して読み込まれていません](#lcp-image-no-fetchpriority) | 警告 | 表示速度 | 表示速度テスト |

### Largest Contentful Paint が 2.5 秒を超えています [#cwv-lcp-poor]

**重大度：** 警告 · **次元：** 表示速度 · **ルール ID：** `cwv-lcp-poor` · **確認方法：** 表示速度テスト · **作業量：** 大

**意味：** 主な内容が見えるまでの時間である Largest Contentful Paint が、モバイルで 2.5 秒を超えています。Loomaly は、ページに十分なアクセスがあるときは実際の Chrome ユーザーのデータを使い、なければラボ測定を使います。

**直し方：** Lighthouse が LCP として計測する要素と、時間の行き先を特定してください。テキストなら、描画を妨げる CSS と JavaScript を外し、ウェブフォントを先に読み、`font-display` を使い、サーバーで描画してください。画像なら、最初に読み込み（`fetchpriority="high"`、遅延読み込みなし、最初の HTML に含める）、適切な大きさの新しい形式で配信してください。サーバーの応答が遅いと、どちらも遅れます。

**公式ガイド：** [web.dev/articles/lcp](https://web.dev/articles/lcp)

### Interaction to Next Paint が 200ms を超えています [#cwv-inp-poor]

**重大度：** 警告 · **次元：** 表示速度 · **ルール ID：** `cwv-inp-poor` · **確認方法：** 表示速度テスト · **作業量：** 大

**意味：** タップやクリックへの反応の速さである Interaction to Next Paint が、モバイルで 200 ms を超えています。これは実ユーザーのデータからのみ報告されるため、Chrome のアクセスが十分なページに出ます。

**直し方：** 長い JavaScript の処理を分割し、すぐには不要なスクリプトを遅らせ、第三者のスクリプトを削るか遅らせてください。

**公式ガイド：** [web.dev/articles/inp](https://web.dev/articles/inp)

### Cumulative Layout Shift が 0.1 を超えています [#cwv-cls-poor]

**重大度：** 警告 · **次元：** 表示速度 · **ルール ID：** `cwv-cls-poor` · **確認方法：** 表示速度テスト · **作業量：** 中

**意味：** 読み込み中にページがどれだけ跳ねるかである Cumulative Layout Shift が、モバイルで 0.1 を超えています。

**直し方：** 画像と埋め込みに `width` と `height` を指定し、広告やバナーの場所を確保し、すでに画面にあるものの上に内容を挿入しないようにしてください。

**公式ガイド：** [web.dev/articles/cls](https://web.dev/articles/cls)

### Time to First Byte が 800ms を超えています [#cwv-ttfb-slow]

**重大度：** 警告 · **次元：** 表示速度 · **ルール ID：** `cwv-ttfb-slow` · **確認方法：** 表示速度テスト · **作業量：** 大

**意味：** サーバーが応答を始めるまでの時間である Time to First Byte が 800 ms を超えています。ページの他のすべてはこれを待ちます。

**直し方：** CDN でページをキャッシュし、サーバーやホスティングを速くし、圧縮を有効にし、ページの前のリダイレクトを避けてください。

**公式ガイド：** [web.dev/articles/ttfb](https://web.dev/articles/ttfb)

### Lighthouse の Performance スコアが 50 未満です [#lighthouse-perf-low]

**重大度：** 警告 · **次元：** 表示速度 · **ルール ID：** `lighthouse-perf-low` · **確認方法：** 表示速度テスト · **作業量：** 大

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** Google PageSpeed Insights による、モバイルの Lighthouse パフォーマンススコアが 50 未満です。通常、複数のボトルネックが同時にあります。

**直し方：** 同じページについて報告されている個々の表示速度の問題から先に対応してください。その URL の PageSpeed Insights のレポートに、さらに改善点が並びます。

**公式ガイド：** [developer.chrome.com/docs/lighthouse/performance/performance-scoring](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring)

### LCP 画像が優先して読み込まれていません [#lcp-image-no-fetchpriority]

**重大度：** 警告 · **次元：** 表示速度 · **ルール ID：** `lcp-image-no-fetchpriority` · **確認方法：** 表示速度テスト · **作業量：** 小

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** PageSpeed Insights は、ページの最大要素が、ブラウザが最初に取得しない画像だと判定しました。`<img>` の場合、`fetchpriority="high"` がない、遅延読み込みしている、またはスクリプトの実行後にしか現れない画像です。CSS の背景では要素が `<img>` ではないため、そこに `fetchpriority` を付けても効果はありません。取得を直すと、LCP が 200〜500 ms 短くなることが多いです。

**直し方：** 要素が `<img>` なら、`fetchpriority="high"` を付け、`loading="lazy"` を外し、サーバーが送る HTML に入れてください。別の要素の CSS 背景なら、その要素に `fetchpriority` を付けないでください。`<link rel="preload" as="image" fetchpriority="high">` で画像を先に読むか、`<img>` として描画してください。

**公式ガイド：** [web.dev/articles/fetch-priority](https://web.dev/articles/fetch-priority)

## 多言語 [#category-international]

| ルール | 重大度 | 次元 | 確認方法 |
| --- | --- | --- | --- |
| [hreflang に自己参照がありません](#hreflang-self-referential-missing) | 警告 | ページの基本 | ルール検査 |
| [hreflang の x-default がありません](#hreflang-x-default-missing) | 通知 | ページの基本 | ルール検査 |

### hreflang に自己参照がありません [#hreflang-self-referential-missing]

**重大度：** 警告 · **次元：** ページの基本 · **ルール ID：** `hreflang-self-referential-missing` · **確認方法：** ルール検査 · **作業量：** 中

**意味：** ページは他の言語版を hreflang に載せていますが、自分自身がありません。hreflang の各セットには、そのページ自身の URL を含める必要があります。

**直し方：** ページ自身の言語の hreflang を、自分の URL を指すように追加してください。

**公式ガイド：** [developers.google.com/search/docs/specialty/international/localized-versions](https://developers.google.com/search/docs/specialty/international/localized-versions)

### hreflang の x-default がありません [#hreflang-x-default-missing]

**重大度：** 通知 · **次元：** ページの基本 · **ルール ID：** `hreflang-x-default-missing` · **確認方法：** ルール検査 · **作業量：** 小

**意味：** hreflang のセットに `x-default` がありません。これは、提供していない言語の訪問者向けの代替版です。

**直し方：** 言語の選択ページか既定の版を指す `hreflang="x-default"` を追加してください。

**公式ガイド：** [developers.google.com/search/docs/specialty/international/localized-versions](https://developers.google.com/search/docs/specialty/international/localized-versions)

## アクセシビリティ [#category-accessibility]

| ルール | 重大度 | 次元 | 確認方法 |
| --- | --- | --- | --- |
| [`<html>` に lang 属性がありません](#missing-html-lang) | 警告 | ページの基本 | ルール検査 |

### `<html>` に lang 属性がありません [#missing-html-lang]

**重大度：** 警告 · **次元：** ページの基本 · **ルール ID：** `missing-html-lang` · **確認方法：** ルール検査 · **作業量：** 小

> 良い慣行であり、Google の必須条件ではない。これだけでは順位は決まらない。

**意味：** `<html>` 要素に `lang` 属性がないため、スクリーンリーダーや翻訳ツールはページの言語を判断できません。

**直し方：** ページの言語コードを設定してください。たとえば `<html lang="en">`、`lang="de"`、`lang="zh-CN"` です。

**公式ガイド：** [developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/lang](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/lang)
