SEO・GEO教科書 · Lesson 05

テクニカルSEO実装:クロール・インデックス・表示速度

robots.txtとnoindexの使い分け、JavaScriptのレンダリング、未インデックスの理由別の対処、canonicalによる重複統合、サイトマップ、構造化データ、Core Web Vitalsの直し方を実装単位で整理します。Nuvemshop・redBus・Yahoo! JAPANニュースなど、公開されている改善事例の数値も添えます。

Level 2Lesson 05 / 14約28分

検索エンジンがページを取得し、正しく理解し、快適に表示できる状態を自分で作れるようになる。

このレッスンで扱うこと

  • robots.txt(クロールの制御)とnoindex(インデックスの制御)の使い分け
  • JavaScriptで描画した本文がインデックスに入りにくい理由と、偽のGooglebotの見分け方
  • インデックス未登録の切り分けと、レポートに出る理由ごとの対処
  • クロールの統計情報で見る訪問頻度と、取得されているファイルの内訳(HTMLが主か)
  • canonical・301リダイレクト・サイトマップで重複と正規URLを整理する
  • 構造化データの選び方と、ページ表示との一致という条件
  • LCP・INP・CLSそれぞれの代表的な原因と、実際に効果が報告された直し方

クロールとインデックスの制御

robots.txtは「クロールしてよいか」を、noindexは「インデックスに登録してよいか」を制御します。 この2つは目的が違い、混同すると意図と逆の結果になります。とくに、検索結果に出したくないページに robots.txtのDisallowを使うのは誤りです。Googleは、ブロックされたページでも他ページからリンクされていれば URLがインデックスに登録される場合があると説明しています。[出典: robots.txt の書き方、設定と送信]

やりたいこと使う仕組み書く場所間違えると
検索結果に出したくないnoindexページの <meta name="robots" content="noindex"> または X-Robots-Tag ヘッダーDisallowで代用すると、URLだけ検索結果に残ることがある
クロール自体させたくない(管理画面・検索結果ページなど)robots.txt の Disallowサイト直下の /robots.txtnoindexで代用すると、無駄なクロールが発生し続ける
クロールもインデックスもさせたくないまず noindex を付け、登録が消えてから Disallow両方同時指定すると、取得できないためnoindexが読まれない
リンクを評価の対象にしたくないrel="nofollow" / rel="sponsored" / rel="ugc"該当の a タグ広告リンクを無指定で置くと、リンクスパムとみなされる可能性がある
noindexはクローラーがページを取得できて初めて読み取られます。この前提はGoogleの公式ドキュメントに明記されています。[出典: noindex でコンテンツをインデックスから除外する]

robots.txtを変更したら、Search Consoleのrobots.txtレポートでGoogleが実際に読んだ内容を確認します。 CDNやサーバーの設定によっては、ブラウザで見えている内容とクローラーが取得する内容が違うことがあります。

Googlebotの動きを前提にする

robots.txtとnoindexを正しく設定しても、Googlebotがページの中身を読めなければインデックスには入りません。ここでは、JavaScriptで描画したコンテンツの扱いと、アクセスログのGooglebotが本物かどうかの確認方法を押さえます。

クロールとレンダリングは別のタイミング

GooglebotはHTMLを取得したあと、ヘッドレスChromiumでページをレンダリングしてJavaScriptを実行し、その結果をインデックスに登録します。 ただしレンダリングはクロールと同時ではなく順番待ちのキューに入り、ページがこのキューで数秒間、またはそれ以上待機することがあると Googleは説明しています。JavaScriptでしか描画されない本文は、登録が遅れたり、失敗すれば登録されなかったりします。 重要な見出し・本文・内部リンクは、最初のHTMLに含めておくのが安全です。[出典: JavaScript の基本を理解する]

確認は、URL検査ツールの「クロール済みのページを表示」でGoogleが取得したHTMLを見るのが確実です。 ブラウザの表示にはあるのに、そこに本文が無ければ、レンダリング前提のページになっています。

Googlebotを名乗る偽のアクセスを見分ける

User-Agentの文字列は誰でも名乗れるため、アクセスログの「Googlebot」が本物とは限りません。Googleは確認方法として、 アクセス元IPアドレスの逆引きDNSでドメイン名がgooglebot.com・google.com・googleusercontent.comのいずれかであることを確認し、 さらにそのドメイン名を順引きして元のIPに一致するかを見る手順を示しています。クローラーごとのIPレンジのJSONも公開されているので、ログ側で突き合わせることもできます。サーバー負荷を理由にBotを遮断する前に、まず本物かどうかを確認します。[出典: Google クローラーの確認]

Botの分類そのもの(一般的なクローラー/特殊なケース用/ユーザー トリガー フェッチャー)はSEO対策とはで、AI各社のBotはAIクローラーの一覧とrobots.txtで扱います。

未インデックスの対処法

インデックスされない状態には2種類あります。設定のせいで登録できない状態(noindex・robots.txt・canonical・リダイレクト・エラー)と、取得はできたがGoogleが登録する価値を認めなかった状態です。前者は設定を直せば戻りますが、後者は設定を直しても戻りません。まず、どちらなのかを確定させます。

Figure

未インデックスの切り分け

  1. 1

    ① URL検査で、いまの登録状態を確定する

    「URLはGoogleに登録されていません」と出たら、その画面に表示される理由をそのまま読む。推測で直し始めない。

  2. 2

    ② 理由が設定由来かを見る

    noindex・robots.txtによるブロック・canonicalによる代替扱い・リダイレクト・404/5xxは、こちらに入る。該当すればページの中身は関係ない。

  3. 3

    ③ 設定を直し、ライブテストで読み取れることを確認する

    直したうえで「公開URLをテスト」を実行し、クローラーが取得できる状態になったことを確認してから登録をリクエストする。

  4. 4

    ④ 設定に問題が無ければ、中身と導線の問題として扱う

    「クロール済み - インデックス未登録」「検出 - インデックス未登録」はここ。リクエストを繰り返しても状況は変わらない。

  5. 5

    ⑤ 数日〜数週間おいて再確認する

    Googleは要件を満たしたページのインデックス登録を保証していない。直後に登録されなくても、それ自体は異常ではない。

理由の一覧と各理由の意味は、ページ インデックス登録レポートのヘルプに載っています。[出典: ページ インデックス登録レポート]

理由別の対処

レポートに出る理由起きていること対処直ったかの確認
noindex タグによって除外されましたページ側でインデックス登録を拒否している。CMSの設定や公開前の設定が残っていることが多いmeta robots と X-Robots-Tag ヘッダーの両方を確認し、noindex を外すURL検査のライブテストで noindex が消えていること。[出典: noindex でコンテンツをインデックスから除外する]
robots.txt によりブロックされましたクロールが禁止されているため、ページの中身を読めていない該当パスの Disallow を外す。noindex を併用していた場合は、noindex も読まれていない点に注意robots.txt レポートでGoogleが読んだ内容が更新されていること。[出典: robots.txt の書き方、設定と送信]
代替ページ(適切な canonical タグあり)別URLを正規として扱っている。意図どおりなら正常な状態で、直す必要はない意図と違う場合だけ、canonical の向き先を直すURL検査の「Googleが選択した正規URL」が意図したURLになること
重複しています。Googleが選んだ正規ページとユーザーの指定が異なりますcanonicalの指定を採用せず、Googleが別のURLを正規と判断している内容の重なりを減らすか、統合して1本にする。canonical・内部リンク・サイトマップの指す先をそろえるURL検査で選択された正規URLが変わること(反映には時間がかかる)
クロール済み - インデックス未登録取得はできたが、登録する価値を認められなかった。内容の薄さ・重複・自動生成の一覧ページが典型加筆して独自の情報を足すか、近い内容のページへ統合する。残す必要のない一覧はnoindexにする再クロール後に登録済みへ変わること。登録リクエストの連打では変わらない
検出 - インデックス未登録URLは把握しているが、まだクロールされていない。導線が弱いか、サーバーが重い内部リンクを張る(トップや一覧から1本でよい)。サイトマップに載せる。サーバーの応答速度を確認するURL検査の「前回のクロール」に日付が入ること
ページにリダイレクトがありますそのURL自体は転送されている。転送先が登録されていれば正常転送先のURLを検査する。リダイレクトが連鎖している場合は1回で着くように直す転送先が「登録されています」になっていること
見つかりませんでした(404)/ソフト 404削除済み、またはエラー相当の内容が200で返っている(中身が実質空のページなど)残すべきページなら復旧、移転済みなら301。削除で正しいなら放置してよいURL検査のHTTPレスポンスとページの中身が一致すること
サーバーエラー(5xx)/クロールの問題取得しようとして失敗している。サーバー・CDN・WAFがクローラーを弾いていることもあるサーバーログでGooglebotのリクエストを確認し、レート制限やブロックを解除するURL検査のライブテストが成功すること
レポートの表記はGoogle側の更新で変わることがあります。最新の理由の一覧はヘルプで確認してください。[出典: ページ インデックス登録レポート]

直したあとにやること

Figure

未インデックスへの対応

やること

  • 原因を直してから、URL検査の「インデックス登録をリクエスト」を1回だけ実行する
  • 重要なページには、トップや一覧から内部リンクを1本以上張る
  • サイトマップに載せ、lastmod を実際の更新日にする
  • 直後に登録されなくても、数日〜数週間おいて再確認する

やらなくていいこと

  • 原因を直さないまま、インデックス登録を何度もリクエストする(順番は早まらない)
  • noindex と robots.txt の Disallow を同時に指定する(取得できないので noindex が読まれない)
  • 「クロール済み - インデックス未登録」に対して、中身を変えずにタイトルだけ書き換える
  • インデックス登録を保証するとうたう外部サービスに費用を払う

「クロール済み - インデックス未登録」が特定のページ種別に固まっている場合、個別ページの問題ではなく サイト構造の問題です。中身がリンク数個しかない一覧ページを大量に作っていないかを、レッスン08で確認してください。なお、Googleは基本事項を満たしていても インデックス登録や掲載を保証していないと明記しています。すべての未登録を0にすることは目標になりません。[出典: Google 検索の基本事項]

クローラーの訪問頻度と取得ファイル

Googleがいつ・何件・どのファイルを取得したかは、Search Consoleの「設定 → クロールの統計情報」で見られます。 Googleはこのレポートを上級者向けと位置づけており、ページ数が1,000未満のサイトでは使う必要はないと明記しています。 また、ドメインプロパティなどルートレベルのプロパティでのみ利用できます。[出典: クロールの統計情報レポート]

訪問頻度は絶対値ではなく推移で見る

何件クロールされていれば正常、という基準はありません。見るのは合計クロールリクエスト数の推移と、 同じ画面に出る平均応答時間です。Googleは、サイトが速く応答する状態が続けばクロール頻度の上限が上がり、 応答が遅い場合やサーバーエラーが返る場合は上限が下がってクロールが減る、と説明しています。[出典: 大規模なサイト所有者向けのクロール バジェット管理ガイド]つまりクロール数の減少は、多くの場合サーバー側の症状です。原因を本文や被リンクに求める前に、 応答時間と5xxの発生を確認します。

Figure

クロール数が減ったときの見方

やること

  • 平均応答時間が悪化していないかを同じ画面で確認する
  • レスポンス別の内訳で 5xx・429・403 が増えていないかを見る
  • サーバーやCDN、WAFがクローラーを弾いていないかログで確認する
  • 更新頻度を上げていない時期に、クロールが減ること自体は異常ではないと考える

やらなくていいこと

  • クロール数そのものを増やすことを目標にする
  • 順位や流入の変動を、クロール数の増減だけで説明する
  • クロールを増やす目的で、同じ内容のページを量産する
  • ページ数の少ないサイトでこのレポートを毎週見る(Googleは上級者向けとしている)

何を取りに来ているか:4つの内訳

内訳何がわかるか崩れているサイン
レスポンス別取得の成否。200のほか、301・404・5xxなどの割合301や404が上位に来ている。内部リンクやサイトマップが古いURLを指している
ファイル形式別HTML・画像・JavaScript・CSSなど、どの種類の取得に回数を使っているかHTMLが押し出され、画像やJS・CSSの取得が大半を占め続けている
目的別(検出・更新)新しいURLを見つけるための取得か、既知URLの再取得か新規ページを増やしているのに検出が伸びない。導線かサイトマップの問題
Googlebotタイプ別どのクローラーが来ているか。レンダリングに必要なリソースの取得も別に出る想定と違うクローラーばかり来ている、または特定のタイプが極端に多い
各内訳をクリックするとサンプルURLが見られますが、Googleはこれを網羅ではなく代表例だと説明しています。[出典: クロールの統計情報レポート]

HTMLが主になっているか

ファイル形式別でHTMLが最も多い形式になっているかを見ます。Googleが「HTMLは何%あるべき」という 基準を出しているわけではないので、当サイトでは「HTMLが上位にあり続けているか」を目安にしています。 画像の多いサイトや、リソースを入れ替えた直後は一時的に他の形式が増えます。問題なのは、HTML以外の取得が続けて大半を占め、新規ページや更新ページの取得が後回しになっている状態です。 Googleは、CSSやJavaScriptなど埋め込みリソースの取得もサイトのクロール割り当てを消費すると説明しています。[出典: 大規模なサイト所有者向けのクロール バジェット管理ガイド]

HTMLが押し出されている原因確認する場所対処
ビルドのたびにJS・CSSのファイル名が変わるファイル形式別のサンプルURL(ハッシュ付きのファイル名が並ぶ)中身が変わったときだけファイル名を変える。GoogleはURLが変わると内容が同じでも取り直しが必要になり、クロール割り当てを使うと説明している。[出典: Google 検索セントラル ブログ「The how and why of Googlebot crawling」]
同じ画像がサイズ・パラメータ違いで多数のURLになっているファイル形式別の画像のサンプルURL生成する画像のパターンを減らす。CDNのパラメータを固定し、URLを1本にそろえる
再取得のたびに全文が返っているサーバーのレスポンスヘッダー(ETag・Last-Modified)ETagとLast-Modifiedを返し、条件付きリクエストに304を返せるようにする。GoogleはETagの利用を推奨している。[出典: Google 検索セントラル ブログ「HTTP caching」]
絞り込み・並び替え・カレンダーでURLが無限に増えるレスポンス別・その他のサンプルURLパラメータ付きURLはcanonicalで代表URLに寄せ、クロール自体が不要なパスはrobots.txtで止める
リダイレクトや404の取得が多いレスポンス別の内訳内部リンクとサイトマップを最終URLに直す。リダイレクトの連鎖を1回に縮める

逆に、レンダリングに必要なJavaScriptやCSSをrobots.txtで止めるのは対処になりません。 Googleは、レンダリングに必要なリソースを取得できないと、ページの内容の抽出や検索での掲載に支障が出ると説明しています。[出典: Google 検索セントラル ブログ「The how and why of Googlebot crawling」]減らすべきなのは同じ内容を何度も取り直させている無駄で、リソースそのものへのアクセスではありません。

なお、クロールの統計情報を細かく追う価値があるのは、ページ数が多いサイトです。 Googleのクロール バジェットのガイドも、対象を大規模なサイト(100万ページ以上で更新頻度が中程度など)としています。[出典: 大規模なサイト所有者向けのクロール バジェット管理ガイド]小規模なサイトでは、前節の未インデックスの解消と本文の改善のほうが先です。

重複と正規URLの整理

同じ内容が複数のURLで見える状態は、評価が分散するだけでなく、どのURLを検索結果に出すかの判断をGoogleに委ねることになります。canonical・301リダイレクト・サイトマップの3つで、代表URLを1本に決めます。

Figure

重複URLを1本化する判断

Step 1

旧URLを残す必要がない

301リダイレクトで新URLへ恒久的に転送する。旧URLは検索結果から消える。

ここで落ちると リダイレクトを張らずに削除すると404が残り、流入が消える。

Step 2

両方のURLにアクセスさせたい

canonicalで代表URLを指定する。両方生きたまま、評価は代表URLに寄せられる。

ここで落ちると canonicalを付けないと、Googleがどちらかを勝手に選ぶ。

Step 3

パラメータ違いが大量にある

canonicalでパラメータ無しのURLを代表にする。サイトマップにも代表URLだけを載せる。

ここで落ちると 全パターンがインデックス対象になり、クロールが分散する。

canonicalはあくまで「ヒント」であり、Googleが別のURLを正規と判断することがあります。実際にどれが選ばれたかはURL検査で確認します。[出典: 重複した URL を統合する]

サイトマップには、代表URLだけを載せます。canonicalで除外したURLをサイトマップに残すと、 サイトマップとcanonicalが矛盾したシグナルを出すことになります。サイトマップの更新日(lastmod)も、 全ページ同じ日付にすると更新のシグナルとして機能しません。[出典: サイトマップの作成と送信]

構造化データの選び方

構造化データは、ページの内容を機械が読める形で併記するマークアップです。順位を上げる設定ではなく、 検索結果での表示のされ方(リッチリザルト)を変えるためのものです。[出典: 構造化データの仕組みについて]守るべき条件は1つで、マークアップの内容がページに表示されているテキストと一致していることです。

ページの種類使う型何が変わるか
記事・ニュースArticle / NewsArticle見出し・公開日・著者が正しく解釈される
よくある質問FAQPage質問と回答が構造として伝わる(表示は保証されない)
手順の解説HowTo手順の並びが構造として伝わる
レシピRecipe調理時間・材料・評価が検索結果に表示されうる
イベントEvent日時・場所・チケット情報が検索結果に表示されうる
求人JobPosting求人の検索結果に掲載されうる
動画VideoObject動画タブ・Discoverなどの動画向け面に載る条件を満たす
パンくずBreadcrumbList検索結果のURL表示が階層表示になる
用語の定義DefinedTerm用語とその定義・別名の関係が伝わる
対応している型と要件の一覧は、Googleの検索ギャラリーにあります。リッチリザルトとしての表示は保証されません。[出典: 構造化データ マークアップの一覧]

実装後は、リッチリザルトテストとSearch Consoleの拡張レポートで検証します。 楽天レシピはCMS側で対応して2週間で全ページに反映し、構造化データテストツールで検証したうえで、 検索エンジンからの流入が2.7倍になったと報告しています。Eventbriteは基本テンプレートを1つ作り、 以降は微調整だけで運用しています。1ページずつ手で書くのではなく、テンプレートで一括して出すのが実装の要点です。

なお、生成AI向けの特別な構造化データは存在しません。Googleは、AI機能に表示されるために 特別なschema.orgの構造化データを追加する必要はないと明記しています。詳しくはGEOでやらなくていいことで扱います。

Core Web Vitalsの直し方

Core Web Vitalsは、LCP(読み込み)・INP(応答性)・CLS(視覚的な安定性)の3指標です。 良好とされる目安はLCPが2.5秒以内、INPが200ミリ秒以下、CLSが0.1以下で、判定はモバイルとPCを分けたうえで 全体の75パーセンタイルの値で見ます。[出典: web.dev「Web Vitals」]

Figure

Core Web Vitalsの3段階(良好/改善が必要/不良)

LCP

主要なコンテンツが表示されるまでの時間

2.5秒4.0秒
良好
改善が必要
不良

INP

操作してから画面が反応するまでの時間

200ms500ms
良好
改善が必要
不良

CLS

読み込み中にレイアウトがずれる量

0.10.25
良好
改善が必要
不良
帯の下の数値は「良好」と「改善が必要」の境界、および「不良」の始まりです。[出典: web.dev「Web Vitals」]

3指標を同時に追わないでください。PageSpeed Insightsのフィールドデータを開き、最も悪い1指標に絞るほうが進みます。実際、redBusはINPだけに絞って改善し、売上が7%増えたと報告しています。

指標よくある原因最初に試す対処
LCP(読み込み)ファーストビューの画像に loading="lazy" が付いている/LCP要素の読み込み優先度が低い/サーバーの応答が遅いファーストビューの画像から loading="lazy" を外し、fetchpriority="high" を付ける。先頭要素のCSSトランジションを外す
INP(応答性)1回の操作で重い処理が走る/1リクエストで大量のデータを取得している/状態更新の範囲が広すぎる1回あたりの取得件数を減らす。入力中の状態はコンポーネント内で持ち、確定時だけ全体に反映する
CLS(安定性)画像や広告枠の寸法が指定されていない/後から差し込まれる要素がある/Webフォントの差し替えで文字が動く画像・iframe・広告枠に width と height を指定する。差し込み領域の高さをあらかじめ確保する
対処の詳細はweb.devの各ガイドにあります。[出典: web.dev「Optimize LCP」][出典: web.dev「Optimize INP」][出典: web.dev「Optimize CLS」]

Figure

Core Web Vitalsの進め方

やること

  • PageSpeed Insightsの「実際のユーザーの環境で評価する」(フィールドデータ)を基準にする
  • 最も悪い1指標を決め、それだけを直す
  • 直す前の数値を記録し、28日後に同じ画面で比較する
  • テンプレート単位で直す(1ページ直しても全体の75パーセンタイルは動かない)

やらなくていいこと

  • ラボデータ(シミュレーション)のスコア100を目標にする
  • 3指標を同時に改善しようとして、どれも中途半端に終わる
  • AMPやPWAの導入を、表示速度改善の代わりにする
  • 改善直後に数値が変わらないことを理由に、やり直す(フィールドデータは28日間の集計)

実例:この作業で何が動いたか

このレッスンで扱った作業について、施策と結果の数値が同じ文書で公開されている事例です。数値は各社の環境での結果であり、同じ結果を保証するものではありませんが、どの作業がどの指標に効いた例があるかの対応関係は読み取れます。

Core Web Vitals

Nuvemshop

ブラジル・ECプラットフォーム(18万店舗超)

やったこと

ブラウザがLCP要素を取り違えていた原因を3つ潰した。ファーストビューの画像から loading="lazy" を外し、LCP画像に fetchpriority="high" を付け、先頭セクションのCSSトランジションを削除した。

報告された結果

  • LCPが「良好」の割合が57%から96%へ(68%改善)
  • Core Web Vitalsの合格率が48%から72%へ
  • Google自然検索のモバイルで、コンバージョン率(セッション→購入)が8.9%増
  • カート到達率(セッション→カート)が8.4%増

出典: How Nuvemshop's image prioritization strategy led to a 68% improvement in LCP and 8.9% more conversions(web.dev(Google)ケーススタディ)

Core Web Vitals

redBus

インド・バス予約

やったこと

検索結果の1リクエストあたりの取得件数を30件から10件に減らし、入力欄の状態をコンポーネント内で持ってblur時だけ全体に同期するようにした。INP(操作への応答性)に絞って改善している。

報告された結果

  • 検索結果ページのINPが870〜900msから350〜370msへ
  • 入力欄の操作でINPが72%改善
  • 全体の売上が7%増

出典: How redBus improved their INP by 72% and increased sales by 7%(web.dev(Google)ケーススタディ)

Core Web Vitals

Yahoo! JAPAN ニュース

日本・ニュースメディア

やったこと

CLS(読み込み中のレイアウトのずれ)を改善し、ラボデータで約0.2から0にした。

報告された結果

  • Search Consoleで「不良」と判定されたURLが98%減
  • セッションあたりのページビューが15.1%増
  • セッション時間が13.3%長くなった
  • 直帰率が1.72ポイント減

出典: Yahoo! JAPAN News improved CLS by 0.2 and increased page views per session by 15%(web.dev(Google)ケーススタディ)

構造化データ

楽天レシピ

日本・レシピ投稿(月間アクティブ1,500万人)

やったこと

レシピの構造化データを2012年から導入し、2014年に対象を広げた。2017年にはGoogle検索チームと共同でマークアップを見直し、CMS側で対応して2週間で全ページに反映。構造化データテストツールで検証している。

報告された結果

  • 検索エンジンからの全ページへの流入が2.7倍
  • 平均セッション時間が従来の1.5倍

出典: Rakuten Recipe increases time on site 1.5X with structured data(Google 検索セントラル 成功事例)

構造化データ

Eventbrite

米国・イベントチケット

やったこと

Googleのイベント向けドキュメントに沿って、公開している全イベントページにEvent構造化データを実装した。基本テンプレートを1つ作り、以降は微調整だけで運用している。実装後は構造化データテストツールで正しさを確認。

報告された結果

  • 実装翌月、イベントページへのGoogle検索流入が、例年の前年比成長率に対しておよそ100%増(Google Analytics計測)

出典: Eventbrite boosts traffic 100% with event structured data(Google 検索セントラル 成功事例)

数値は各社の環境・時期・同時に実施した他の施策を含んだ結果です。同じ施策で同じ結果が出ることを示すものではありません。

Figure

Core Web Vitalsの改善で報告された事業指標の変化

Rakuten 24: 訪問者あたり収益

53.37%

CLSを92.72%改善するなどCore Web Vitalsに投資(A/Bテスト)

Nykaa: tier2・3都市からの自然検索流入

28%

LCPを40%改善

Yahoo! JAPANニュース: セッションあたりPV

15.1%

CLSを約0.2から0へ

Nuvemshop: モバイル自然検索のCVR

8.9%

ファーストビュー画像の優先度を修正

Vodafone(イタリア): 売上

8%

LCPを31%改善

redBus: 売上

7%

INPを870〜900msから350〜370msへ

各社が公開している数値です。実施時期・サイト規模・同時に行った他の施策を含んだ結果であり、同じ施策で同じ結果が出ることを示すものではありません。[出典: web.dev「The business impact of Core Web Vitals」]

全11件の実例はレッスン12にまとめています。 次のレッスンでは、技術的に読める状態になったページに、引用される本文を書いていきます。

到達チェックリスト

次の項目を自分のサイトで確認できたら、このレッスンは終わりです。1つでも「まだ」がある場合は、次のレッスンに進む前にそこを埋めてください。

  • robots.txtでDisallowにしているパスと、noindexにしているページを一覧にできた
  • URL検査の「クロール済みのページ」で、重要な見出し・本文・内部リンクが最初のHTMLに入っていることを確認した
  • 登録されていない重要ページについて、URL検査で理由を確認し、設定由来か中身由来かを切り分けた
  • クロールの統計情報で、レスポンス別・ファイル形式別の内訳を確認し、HTMLが上位にあるかを見た
  • 同じ内容が複数URLで見える箇所を洗い出し、canonicalか301で1本化した
  • 自分のページ種別に対応する構造化データの型を選び、リッチリザルトテストで検証した
  • PageSpeed InsightsでLCP・INP・CLSの現状値を記録し、悪い指標を1つ特定した
  • ファーストビューの画像に loading="lazy" が付いていないことを確認した

よくある質問

robots.txtでDisallowにすればインデックスされませんか

されないとは限りません。Googleは、robots.txtでブロックされたページでも、他のページからリンクされていればURLがインデックスに登録されることがあると説明しています。検索結果に出したくないページには、robots.txtのDisallowではなくnoindexを使います。noindexは、クローラーがそのページを取得できて初めて読み取られるため、Disallowと同時に指定すると機能しません。

ページがインデックスされません。何から確認すればよいですか

推測で本文を書き直す前に、URL検査ツールで表示される理由を読みます。noindex、robots.txtによるブロック、代替ページ(canonical)、リダイレクト、404や5xxは設定由来なので、設定を直せば戻ります。一方「クロール済み - インデックス未登録」は取得できたうえで登録されなかった状態で、内容の薄さや重複が原因のことが多く、設定を直しても変わりません。「検出 - インデックス未登録」はまだクロールされていない状態なので、内部リンクとサイトマップで到達しやすくします。なお、Googleは基本事項を満たしていてもインデックス登録を保証していません。

Googlebotがどれくらい来ているか、何を取得しているかはどこで見られますか

Search Consoleの「設定 → クロールの統計情報」です。合計クロールリクエスト数と平均応答時間の推移に加えて、レスポンス別・ファイル形式別・目的別(検出と更新)・Googlebotタイプ別の内訳が見られます。ドメインプロパティなどルートレベルのプロパティでのみ利用でき、Googleは上級者向けのレポートで、ページ数が1,000未満のサイトでは使う必要はないとしています。クロール数が減った場合は、まず平均応答時間とサーバーエラーを確認します。Googleは、応答が遅い場合やサーバーエラーが返る場合にクロール頻度の上限が下がると説明しています。

クロールされているファイルがHTML以外ばかりです。どうすればよいですか

GoogleはHTMLの割合について基準を出していないため、当サイトでは「HTMLが上位の形式であり続けているか」を目安にしています。画像やJavaScript・CSSの取得が続けて大半を占める場合、典型的な原因は、ビルドのたびにファイル名が変わる(内容が同じでも別URLとして取り直される)、同じ画像がパラメータ違いで多数のURLになっている、条件付きリクエストに304を返せていない、絞り込みやカレンダーでURLが無限に増えている、の4つです。対処は、ファイル名を内容が変わったときだけ変える、URLを1本にそろえる、ETagとLast-Modifiedを返す、不要なパスをrobots.txtで止める、になります。レンダリングに必要なJavaScriptやCSSをブロックするのは逆効果で、Googleはリソースを取得できないとページの内容の抽出や掲載に支障が出ると説明しています。

インデックス登録のリクエストは何度も送ったほうがよいですか

原因を直さずに繰り返しても状況は変わりません。リクエストは登録の順番を早める手段ではなく、変更をGoogleに知らせるためのものです。noindexやrobots.txtのブロックを外す、内容を加筆または統合する、内部リンクを張るといった対処を先に行い、そのうえで1回リクエストして、数日〜数週間おいて再確認します。

構造化データを入れると順位が上がりますか

構造化データはページの内容を検索エンジンが理解し、リッチリザルトとして表示するための仕組みです。順位を直接上げる設定ではありません。ただし、公開されている成功事例では、Event構造化データの実装後にイベントページへの検索流入が例年比で約100%増えた(Eventbrite)、レシピの構造化データで検索流入が2.7倍になった(楽天レシピ)といった結果が報告されています。表示のされ方が変わることでクリックが増える、という経路で効いていると考えられます。

Core Web Vitalsはどこまで直せばよいですか

まず「良好」の目安(LCP 2.5秒以内、INP 200ミリ秒以下、CLS 0.1以下)を全体の75パーセンタイルで満たすことを目標にします。3つ全部を同時に追うのではなく、PageSpeed Insightsのフィールドデータで最も悪い1指標に絞るほうが進みます。redBusはINPだけに絞って870〜900msを350〜370msに改善し、売上が7%増えたと報告しています。

AMPやPWAは今も必要ですか

必須ではありません。Googleは、Googleニュースやトップニュース枠への掲載にAMPを必須とはしておらず、通常のページでCore Web Vitalsを満たせば同じ扱いを受けられます。過去の成功事例にAMPが登場するのは、当時の実装として選ばれたためです。いまから始める場合は、通常のページの表示速度を直すほうが優先です。

記事から取り入れたこと

「テクニカルSEO実装」の範囲でその後に出た記事のうち、このレッスンに足すべきと判断したものです。 レッスン本文は仕組みの説明にとどめ、確認できた個別の手順・数値はここに積みます。

Sources · 一次情報