【テクニカルSEO】GoogleBotのクロール量が急増したときの対処(大量アクセスが来た場合)
こんにちは、エドです。
下書きはたくさんあるんですけど公開できるレベルに至ってないので
これが2記事目になりますね。
今回はGoogleBot大暴れの巻きです。
タイトルは「対処」となっていますが、
結論から言うとすべてを救う対処法はありません。ヒドイ。
少し長いので、情報だけが欲しい方は目次からどうぞ。
- ターゲットユーザー
- 読むのに必要なスキル
- GoogleBotとは
- GoogleBotのクロール
- GoogleBot大量アクセスの問題
- アクセス制限に必要な情報
- 大量アクセス発生時のGoogle見解
- アクセス制限の方法
ターゲットユーザー
- 中規模~大規模サイトの(運用者 or SEO担当者)
読むのに必要なスキル
- インフラ基礎知識
- リダイレクトの基礎知識
- クローラの基礎知識
GoogleBotとは
GoogleBotとは、検索したときに検索結果に出すサイト情報を集める
Googleが作成したクローラ(自動プログラム)です。
いくつかバリエーションがあり、パソコン用、スマホ用などが存在しています。
一覧はこちら ※2020/05/27現在
https://support.google.com/webmasters/answer/1061943?hl=ja
GoogleBotは優秀で、某〇nigや〇aiduのクローラのようにコントロール不能にならず、
Robots.txtを見てくれてメタタグにも従ってくれます(基本的には)
そして、GoogleBotもですが、ほとんどのクローラはUserAgent*1を持ち、
アクセス元の識別が可能になっています。
本当に優秀なGoogleBotですが、いざ大暴れ(短時間の大量アクセス)した
際の対処法がかなり少ないのはご存じでしょうか?
GoogleBotのクロール
通常、GoogleBotはサイト規模に応じて負荷をかけないように調整してくれています。
負荷というのは、時間単位のアクセス数です。
短期間のアクセスが多すぎると、サイト側にとってはDDos攻撃*2と変わりがありません。
※Googleにその気がなくても
突如襲い来る「大量アクセス」
つまり通常は適切にアクセスしてくるGoogleBotですが、
たまになぜか異常なほどの大量アクセスを送ってくることがあります。
通常時の数十倍、通常時で10万件/日なら、500万件/日なんて規模で
アクセスしてくる場合もあります。
SEO担当が気づくことは「まれ」
そして、SEO担当がこれに気づくこと自体滅多にありません。
気づくのはたいていインフラ側の担当者さんです。
大規模サイトの場合、サーバーダウン手前でアラートが鳴り対処できるように
設定されています。
インフラの担当者が大量アクセスを解析して
どうもGoogleBotっぽい。SEOの担当者側で解決するべき問題では?
となるのです。
※余談ですが、筆者は大規模サイトのSEO担当者時代、サーバーログのうち
BOTだけを抜き出したデータベースを作成していました。
それをグラフで毎日Slackに送って、異常値がないかを監視してたりもします
異常値があるときは一人で大騒ぎしていました(笑)
GoogleBot大量アクセスの問題
では大量アクセスされると何が問題なのでしょうか?
「そりゃサーバーダウンするかもしれないからだろ?」
その通りですが、クローラの大量アクセスというのはGoogleに限らずちょくちょく
ありまして、その都度アクセス制限をかけるのが普通です。
「GoogleBotもアクセス制限かけりゃいいんじゃないの?」
そう、ここが問題です。
GoogleBotにアクセス制限をかけてしまうと、GoogleBotがページを辿れなくなって
しまうだけではなく、他にも問題が発生します。
GoogleBotアクセス制限かけた場合の問題
- Googleがページを辿れなくなる
- 大量のエラーを返すとクロール頻度が下がる可能性がある
- エラーを返したページは正当に評価されない可能性がある
それぞれ問題を見ていきます。
Googleがページを辿れなくなる
これはそのまま、クロールにたいして制限しているので見れなくなりますよね。
更新されたページがあっても見ることはできず、リンクも辿れなくなります。
もちろん削除されたページも判別できません。
大量のエラーを返すとクロール頻度が下がる可能性がある
Googleがこれに言及しています。
>サーバーのエラー率が上昇すると、Googlebot はリクエストを抑制してサーバーの過負荷を防ぎます
https://support.google.com/webmasters/answer/35253?hl=ja
エラーを返すとはページのステータスコードで判断されます。
よくある 404(ページが見つかりません)などもステータスコードですね。
その他 500(サーバーエラー)、503(サーバーアクセス負荷)、
429(アクセス過多)などが大量アクセス時に返すことの多いステータスコードです。
これらを返されると、Googleは「サーバーの調子が悪いんだな」と判断して
クロール頻度を下げるのです。
エラーを返したページは正当に評価されない可能性がある
当然GoogleBotはページを読めないので、評価の更新はされません。
また、エラーが続くと「ページ自体が不安定」と解釈される可能性もあります。
※断言できないのがSEOの難しいところです
簡単にまとめると
「GoogleBotのアクセス制限をかけたら”SEO評価ダウン”がありうる」
ということが問題になるのです。
そのまま放置したらサーバーダウンし、アクセス制限をかけたら
SEOがダウンする・・・前門の虎、後門の狼のようなこの状況。
しかし、サイトがダウンしたらSEOもへったくれもないので、当然サーバーダウン
対策を取ることになります。
SLA(サービスレベル保障)が99.999%のようなサイトならなおさらですね。
アクセス制限に必要な情報
通常、アクセスを制限するために必要な情報は一般的なケースでは
- IPアドレス
- UserAgent
のどちらかです。
GoogleBotのUserAgentもIPアドレスも公開されています。
https://support.google.com/webmasters/answer/80553?hl=ja
UserAgent
https://support.google.com/webmasters/answer/1061943?hl=ja
IPアドレスは大量にあり、IPレンジで範囲制限をしなければならないので、
私はUserAgentを推奨します。
※UserAgentは容易な反面、偽装が可能です。偽装されたとしても偽装ごと
アクセス制限かければいいので問題ないと考えていますが、気になる方は
IPアドレスの実装をお勧めします
大量アクセス発生時のGoogle見解
Googleに問い合わせても、「ツールを使ってくれ」か
「我々は特に問題は発生していない」
として回答がもらえないことが多いです。
超大規模サイトになると調査はしてくれますが、
基本的に「自分たちで解決してくれ」と言われてしまいます。
仕方ない。自分たちでやるしかない。
アクセス制限の方法
ではアクセス制限の方法はどういった方法があるでしょうか。
Search Consoleでクロール頻度を設定する
こちらのクロール頻度設定ページから変更が可能です。*3
※SearchSoncoleにログインした状態でクリックしてください
頻度の設定で、低いにすればクロール頻度を減らせます*4
メリット
・ インフラの設定をしなくともSearchConsoleのみで完結する
・GoogleBotに明確な意思表示ができる
デメリット
・反映されるまでに時間がかかる
・効果がないケースもある(通常は効果があります)
・クロール調整のバーが出ないサイトもある
エラーステータスコードを返す
こちらはサイト全体か、ページ別どちらでも対応が可能です。
アクセスしてきた際にHTTPステータスコードにエラーコードを返すというものです。
返す場合は以下のステータスコードから最適と思われるものを返します
・500
・503
・429
500はInternalServerErrorといい、内部サーバーエラーを指します。
503はService Unavailableといい、サーバー高負荷など一時的にアクセス不可を指します
429はToo Many Requestsといい、アクセス過多。リクエスト数限界を意味します。
これらはエラーのため、一般ユーザーもその制限を受けてしまいます!
つまり全ページでエラーを返してしまうと実質サービス停止に近いもので
かなり注意が必要です。
ここで、ある程度インフラ知識のある方ならふと思うのが
「GoogleBotのみエラーコード返却すればいいんじゃない?」
問題ない行為なのか?に関しては
私個人の見解としては以下の理由からグレーゾーンとしています。
- GoogleBotのみが悪さをしている
- クローキングには当たらない(はず)
GoogleBotのみが悪さをしている
これは問題のあるBOTを制限する行為で、サイト側からすれば運営上必要です。
何もおかしい行為ではありません。
クローキングには当たらない
クローキングをご存じでしょうか?Googleガイドラインにも記述のある
ユーザーとBotに表示させるコンテンツを別々にする行為をいいます。
私の解釈は「悪意を持って、Botに見せるコンテンツ変化させること」と
解釈していますので大丈夫なはず、という見解です。
(正直なところ、ここは意見の分かれ目だと思います)
メリット
・ 絶対これ以上負荷が増えない
・ 対応にSEOの知識を必要としない
・ 対応直後から効果がある
デメリット
・人間もアクセスできない
・サーバーの設定変更が必要
・知識がない人間が扱うと致命的なミスがありうる
エラーステータスコードを返す その2
こちらもアクセスしてきた際にHTTPステータスコードにエラーコードを
返すというものです。
その1と違うのが、制限する範囲を絞る部分です。
具体的にいうと
- サーバー台数のうち半数のみ制限をかける
- ロードバランサーで片方のみに制限をかける
- 特定ページのみ制限をかける
というものです。
ここまで専門的だと私もあまり詳しくはないので詳細は割愛しますが、
最後はわかりやすいですね(笑)
メリット
・ 負荷が緩やかになる
・ 人間もBotも半数はアクセスできる
・ 対応にSEOの知識を必要としない
・ 対応直後から効果がある
デメリット
・ 人間もBotも半数しかアクセスできない
・サーバーの設定変更が必要
・知識がない人間が扱うと致命的なミスがありうる、その1よりもさらに高度
まとめ
これら以外にもテクニカルな解決方法はあるかもしれませんが、
基本的にツールかサーバー側でアクセス制限をかけるしか対処方法は
ありません。
まずはSearchConsoleでクロール制限を行い、
クロール頻度が変わらないようだったらサーバー制限をかけると
いうのが現状ベストかと思います。
※本記事に関して、間違いや問題発言がありましたらコメント欄にて教えて
いただけますと幸いです。
その他、他にもこんな方法があるよ!というのも歓迎です!私のほうで検証出来たら
追記したいと思います!