Retty Tech Blog

実名口コミグルメサービスRettyのエンジニアによるTech Blogです。プロダクト開発にまつわるナレッジをアウトプットして、世の中がHappyになっていくようなコンテンツを発信します。

大規模サイトのクロール・インデックス - Rettyでの取り組み -

Rettyの松田です。Rettyアドベントカレンダー、2023年12月11日を担当します。

adventar.org

ここ1年ほどはデジタルマーケティング、とりわけSEOを中心に仕事をしてきました。

Rettyのような大規模サイトでは、クロール・インデックス状況の把握とコントロールSEOの基盤となってきます。

特に、近年はGoogleクローラーの挙動が変わってきており、クロール・インデックスともに基準が厳しくなってきているのを感じています。

Rettyでもインデックス未登録が増加してきていたので、時間をかけて対策・運用の整備を行ってきました。

今後とも多くの方にRettyを使っていただくための土台として、現在取り組んでいる日々のクロール・インデックス管理について、ご紹介できればと思います。

1. 大規模サイトにおけるクロール・インデックス管理の重要性

こちらは株式会社JADEさまのブログから引用させていただいた、URLが検索エンジンに発見されてから実際にユーザーさんに利用される流れを、フレームワーク化したものです。

引用:検索インタラクションモデル概論-JADEが日々使うSEO分析フレームワークの話

クロール・インデックス管理はこのフレームワークだとDiscover・Crawl・Indexに該当します。

Indexの段階まで到達しているページが少ないと当然そのあとのRankやQueryにもつながってこないため、前段のインデックスまでの重要性が高まってきます。

特にページ数が多いサイトでは全てのURLをインデックス登録させることは非常に困難で、大量にあるページをいかにして発見・クロールしてもらいインデックスさせるかによって流入が大きく異なってきます。

流入の多寡は売上にも大きく影響をおよぼすため、クロール・インデックス管理の成否はビジネスインパクトも大きいです。

2. Rettyで取り組んでいるクロール・インデックス管理

サーチコンソールやAhrefsなどのツールを使ったモニタリング、サイトマップ運用、プロダクト改善施策の影響を事前にキャッチアップ、Googleのアップデートの影響調査、細々とした運用など、行なっていることは数多くあります。

すべてを書いていると終わらなくなってしまうので、今回は基礎的な部分でありながら特に影響の大きいサイトマップ運用とインデックス未登録への対策について、Rettyで取り組んでいることをご紹介できればと思います。

3. サイトマップ運用

3.1 優先してクロールさせたいページを決める

大規模サイトでは、クローラーがすべてのページを毎日クロールしてくれることはないため、サイトマップでクロールの優先順位を明示する必要があります。

ビジネス上の重要性が高いページや更新頻度が高くクロール回数を多くしたいページ、新しくできたページなどクロールさせたいページ群をサイトマップで送信します。

Rettyではディレクトリごとに、ビジネス上の重要性・クロールされているか・ユーザーさんに閲覧されているかを考慮して送信するページを決めています。

3.2 サイトマップインデックスで大量のURLを管理する

単一のサイトマップで送信できるURL数は50,000URLが上限になっています。大規模サイトではすぐにこの上限をオーバーしてしまうため、サイトマップインデックスを活用します。

サイトマップインデックスとサイトマップの構成

サイトマップインデックスはページ群ごとに分割してページ群単位でインデックス状況が把握できるようにしています。

Rettyではサイトマップは優先順位ごとに分割していて、例えばサイトマップ1-1にはサイトマップインデックス1のページ群のうち、優先順位の高い50,000ページを入れています。

サイトマップの内容が頻繁に変更されていない方がクロールが安定していそうなため、現在は優先順位ごとにまとめるようにしています。

3.3 サイトマップで送信するURLの追加・削除

頻繁に起きることではありませんが、サイトの構成変更によってサイトマップの追加が必要な場合があります。

新しいページを追加したがクロールされていなくてインデックスされない、ページ内容を変更したがクロールされていなくて検索結果に反映されないなど、クロールされてないとクリティカルな影響が起きるのでサイトにどのような変更が入るのかは常に把握しておきたいです。

Rettyでは週に1度のスプリントレビューやスプリントプランニングなど、スクラムを軸とした開発体制によってキャッチアップする機会があるのと、適宜Slackなどでも相談しながら進めています。

3.4 サイトマップごとのインデックス状況の監視

サーチコンソールの「ページのインデックス登録」ページは週1,2回ほど更新されます。サイトマップインデックスごとにインデックス登録済みURL数・未登録URL数と、未登録の場合はその内訳が出るので、その内容をスクリーンショットで残すようにしています。

サーチコンソールは3ヶ月分のデータしか見れず、過去の状況を振り返りたいときに記憶に頼らないといけなかったので、データを残すようにしました。

主に気にしているのは、全体の登録・未登録比率と各インデックス未登録要因の前回からの変化、インデックス未登録のURL例です。

未登録を完全にゼロにすることは不可能ですが、対策をしてインデックス状況が変わったかを確認するというサイクルを回しています。

4. インデックス未登録への対応

4.1 全体像を把握する

サーチコンソールでインデックス未登録になっている具体的なページは1,000URLしか表示されないため、大規模サイトではインデックス未登録への対応難易度は高いです。

各インデックス未登録要因の例としてあがっているURLをみて、どのようなページ群なのか、要因と考えられるのは何かを把握しています。

可能な限り例で表示されるURLである程度要因を把握できるようにサイトマップを分割してはいますが、それでもページ数が多いと要因にあたりをつけるのは大変です。

4.2 ログを活用して実態を把握する

クローラー・ユーザーさんのアクセスログをそれぞれBigQueryで分析できる状態にしており、アクセスログもインデックス未登録要因の分析手段として活用しています。

例えば「見つかりませんでした(404)」についてはユーザーさんのアクセスログで404になっているページとリファラを辿ることで実際に起きていることを特定したり、「ページにリダイレクトがあります」についてはクローラーアクセスログでHTTPステータス301を返しているページを確認していたりします。

また、クロール状況はBIツール(RettyではLightdashを利用しています)を使ってSlackで毎日通知しており、サイト全体および各ディレクトリごとのクロール数とHTTPステータスをモニタリングしています。

毎日みておくと傾向が掴めるようになってくるので、変化が起きたことにも気づくのが早くなってきます。

4.2 対処を行うか判断する

インデックス未登録に対しては、どの程度の対応工数が必要か・そのままにすることがSEOにどの程度マイナスなのか・影響するページ数・影響するクロール数を考慮して優先順位をつけ、対応をしています。

しばらく個別対応を続けていくうちに全体の傾向がなんとなく見えてきたので、一度時間をとってサイト全体のインデックス未登録要因をひと通り分類し、あらかじめ対応する問題・対応しないを切り分けるようにしました。

4.3 Rettyで対処したインデックス未登録の事例

Rettyは10年近く運用されているサイトということもあり、Googleに発見されているURL数が現在存在しているページ数を大きく上回っています。

クローラーアクセスログを見ていると、サーチコンソール上では「URLがGoogleに認識されていません」となるにも関わらず、クロールされているページがあることに気づきました。

調べていくうちに、過去の施策で作っていたが現在は削除されているページや誤って生成されてしまったページに対して、かなり長期間クロールがきていることがわかりました。

無駄なクロールになってしまっていたのでそれらのURLをrobots.txtでブロックしたところ、無事にクロールが来なくなり「見つかりませんでした(404)」で検出されるページ数もかなり削減できました。

おわりに

大規模サイトではクロール・インデックス管理が、サイトを支える基盤としての大きな役割を担っています。

クローラーの挙動の変化など外部要因の変動をキャッチアップして、継続的にサイトの土台として機能させ続けることが大事になってきます。

テンプレートで生成されているページも多く、少しのミスで広範囲に影響が出てしまう可能性もあるので、気を抜かずに運用していきましょう。