GSCWizard-Botとは?
GSCWizard-Botは、GSC Wizard内のオンページSEOレポートを支えるクローラーです。ログイン中のユーザーが、自分が所有するGoogle Search Consoleプロパティのレポートを開いたときにだけ動作します。ウェブ全体を巡回したり、リンクをたどったり、インデックスを作成したりすることはありません。
アクセスログにこのユーザーエージェントが記録されていた場合は、サイトの確認済みオーナー(またはSearch Consoleプロパティにアクセスできる方)がGSC WizardでオンページSEOチェッカーを開き、ページの分析を依頼したことを意味します。
ログイン中のオーナーがGSC Wizard(またはGSC Wizard MCPサーバー)にXMLサイトマップの読み取りを依頼した場合も、同じユーザーエージェントが使われます。たとえば、サイトマップ内のURLとSearch Consoleのクリック数・表示回数を結び付けるサイトマップのパフォーマンスレポートがその例です。このときのリクエストは、サイトマップファイル自体への1回のリクエスト(サイトマップインデックスの場合は、その子サイトマップも含む)だけで、記載されているURLをクロールすることはありません。
そのため、GSCWizard-Botがrobots.txtやsitemap.xmlなどのファイルをリクエストしているのを見かけることもあります。ボットはrobots.txtを読んで、そこに含まれるSitemap:ディレクティブを見つけ(記載がない場合は/sitemap.xmlにフォールバックします)、どのページがXMLサイトマップに含まれているかを確認します。
クローラーがチェックする内容
GSCWizard-Botは、取得したすべてのページから3つのHTML要素を抽出し、Google Search Consoleで過去28日間にそのページが表示された中で最も表示回数の多いクエリと比較します。
1 ページタイトル:<title>
<title>タグの内容を読み取り、GSCの上位クエリに含まれる主要な単語(3文字以上)がすべて含まれているかを確認します。現在のタイトルをそのまま表示し、合格か不合格かのフラグを添えます。
2 メタディスクリプション:<meta name="description">
メタディスクリプションのcontent属性を読み取り、同じようにキーワードが含まれているかを確認します。現在の文字数も記録します。
3 H1見出し:<h1>
ページ内のすべての<h1>を抽出し、いずれかにターゲットキーワードが含まれているかを確認します。
チェックするのはこれだけです。GSCWizard-Botは、JavaScriptを実行せず、ページをレンダリングせず、スタイルシートやスクリプトをダウンロードせず、ページ内のリンクをたどらず、それ以外のデータも収集しません。ページのチェックでは、生のHTMLレスポンスだけを読み取ります。唯一の例外がフィード監査です。販売者が自身のGoogle Merchant Centerアカウントを接続した場合、ボットはその販売者のフィードで参照されている商品画像を取得し、ピクセル寸法を測定します。画像のリクエストでは先頭の64 KBだけを取得し(範囲指定のリクエスト)、幅と高さを記録して、データ自体は破棄します。ページの場合と同様に、まず画像ホストのrobots.txtを読み、robots.txtで許可されていない画像は取得しません。ページ内で見つけた画像を取得することは一切ありません。
クロールの動作
1回の実行の中で、各URLは1度だけ、10秒の厳格なタイムアウト付きで取得されます。リダイレクトはたどります(最大5回まで、そのつど再確認します)。同じURLが、その後の実行で再び取得されることもあります。たとえば、スケジュール設定された監査が繰り返されるときや、サイトのオーナーがレポートを再実行するときです。そのため、時間をおいて同じURLへのリクエストが繰り返されることがあります。
正常にクロールできたURLは保存され、スケジュール設定されたバックグラウンドの実行で最大7日間再利用されます。ユーザーがレポートを再実行した場合は必ず新しくクロールするため、タイトル、メタディスクリプション、H1の変更はすぐに反映されます。そのため、サイトのオーナーが作業中のときは、同じURLへのリクエストが繰り返されることがあります。
ページのクロール(オンページのチェックと内部リンクのクロール)は、1回の実行につき最大1,000ページで、対象は常にそのプロパティ自身のページです。Search Consoleがそのプロパティについて報告するURLから選ばれます。フィード監査は、販売者自身のMerchant Centerフィードに含まれるすべての商品URLと、そのフィードのエントリが参照する画像を対象とします。ページ数の固定の上限はなく、その代わりに相手サーバーへの配慮によって制限されます。具体的には、ホストごとの並列リクエスト数を少なく抑え、サーバーが429や503を返したときは間隔を空け、後述のrobots.txtのルールに従います。
実際のページやフィードの画像を取得する前に、クローラーはrobots.txtをダウンロードし(サイトごとに1回の実行につき1度)、GSCWizard-Bot向けの(なければ*にフォールバックして)Allow/Disallowのルールを評価します。*のワイルドカードや$のアンカーにも対応しています。許可されていないURLは取得せず、代わりにレポートでユーザーに報告します。robots.txtが存在しない場合や、アクセスできない場合は、「すべて許可」として扱います。
サイトマップの網羅性を確認するために、クローラーは/robots.txtをリクエストしてSitemap:ディレクティブを探し、なければ/sitemap.xmlにフォールバックします。サイトマップインデックスは1階層だけたどります(最大でサイトマップファイル50件、URL50,000件)。サイトマップのURLは比較のためだけに使用し、クロールの対象としてキューに入れることはありません。
Accept: text/htmlを送信し、レスポンス本文を直接解析します。ヘッドレスブラウザ、スクリプトの実行、アセットの取得は行いません。
プライベート、内部、ループバックのIPアドレス範囲に解決されるURLは、ネットワークリクエストを送る前にブロックされます。
GSCWizard-Botを許可する方法
ほとんどのサイトでは、変更は必要ありません。WAF、ボット管理の仕組み、または厳しいファイアウォールを使っていて、オンページSEOレポートが空になる(またはHTTP 403/429エラーになる)場合は、このユーザーエージェントをホワイトリストに追加してください。
robots.txt(明示的な許可)
User-agent: GSCWizard-Bot
Allow: /
Cloudflare WAFとBot Fight Mode
国別のブロックやASNルールなど、独自のカスタムルールを使っている場合は、Security → WAF → Custom rulesにルールを追加し、ブロックするルールより上に配置してください。
(http.user_agent contains "GSCWizard-Bot")
Action: Skip → All remaining custom rules
(Pro plans and above: also All Super Bot Fight Mode rules)
この方法は、CloudflareのFreeプランに搭載されているボット対策機能のBot Fight Modeには効きません。CloudflareはこれをWAFの外で動かしているため、SkipやAllowのアクション、Page Rulesは効果がありません。無効にする以外で唯一尊重されるのは、リクエストに最初に一致するIP Access Ruleです。現在のサーバーアドレスについては、メールでお問い合わせください。GSCWizard-Botは現在、Cloudflareの認証済みボットです(ユーザーエージェントの検証を参照)。Cloudflareのデフォルトのボット設定では認証済みボットは対象外となるため、まずはルールなしでお試しください。IP Access Ruleを追加すると、そのアドレスはほかのセキュリティチェックも通過できるようになります。そのため、それでもリクエストがチャレンジされる場合にだけ追加してください。
Nginx
if ($http_user_agent ~* "GSCWizard-Bot") {
set $allow_bot 1;
}
# use $allow_bot to bypass rate limits / challenges
Apache
SetEnvIfNoCase User-Agent "GSCWizard-Bot" allow_bot
<RequireAll>
Require all granted
Require env allow_bot
</RequireAll>
GSCWizard-Botをブロックする方法
GSCWizard-Botは、ページを取得するたびに先にrobots.txtを確認し、そのルールを順守します。次のルールを追加すると、GSCWizard-Botはサイト内のどのページも取得しなくなります。ブロックされたURLはクロールされず、レポートでは「robots.txtによりブロック」と表示されます。
User-agent: GSCWizard-Bot
Disallow: /
エッジで完全にブロックしたい場合は、User-AgentヘッダーがGSCWizard-Botに一致するリクエストを拒否するルールであれば、どれでも機能します。上記の許可ルールを反転させてください。
ユーザーエージェントの検証
クローラーは、3つのユーザーエージェント文字列のいずれかを送信します。オンページSEOチェッカー(タイトル、メタディスクリプション、H1のチェックとサイトマップの読み取り)は1つ目を使います。拡張テクニカル監査(robots.txtやサイトマップを探すリクエストも行います)は2つ目を使います。Merchant Centerのフィード監査は、販売者自身のフィードが参照する商品画像の寸法を測定するときに、3つ目を使います。
GSCWizard-Bot/1.0 (On-Page SEO Checker)
GSCWizard-Bot/1.0 (Full On-Page Checker)
GSCWizard-Bot/1.0 (Feed Audit image probe)
3つともGSCWizard-Botという接頭辞を共有しているため、部分文字列の一致ルール1つですべてをカバーできます。ページのリクエストにはAccept: text/htmlが付き、アプリケーションサーバーから送信されます。ただし、ユーザーエージェント文字列だけでは何の証明にもなりません。誰でもコピーできるためです。確実に確認したい場合は、後述の署名を検証してください。
暗号による検証(Web Bot Auth)
GSCWizard-Botが送るすべてのリクエストには、HTTP Message Signatures(RFC 9421)を使ってEd25519の鍵で署名が付けられます。これは、Cloudflareが認証済みボットを識別するのに使っているWeb Bot Authと同じ方式です。署名付きのリクエストには、次の3つの追加ヘッダーが含まれます。
Signature-Agent: "https://tool.gscwizard.com/.well-known/http-message-signatures-directory"
Signature-Input: sig1=("@authority" "signature-agent");created=...;keyid="...";alg="ed25519";expires=...;nonce="...";tag="web-bot-auth"
Signature: sig1=:...:
公開鍵は、JSON Web Key Setとしてtool.gscwizard.com/.well-known/http-message-signatures-directoryで公開しています。この鍵で署名を検証すれば、リクエストが当社から送信されたものであり、別のホストに対して再送されたものではないことを確認できます。署名には送信先のホストが含まれ、5分後に失効します。
GSCWizard-Botは、この鍵とともにCloudflareの認証済みボットのディレクトリに登録されているため、Cloudflareを使っているサイトでは署名が自動的に検証されます。Cloudflareのデフォルトのボット設定では認証済みボットは対象外となっており、カスタムルールでは、Known Botsフィールドのcf.client.botで一致させることができます。
GSCWizard-Botを名乗っていても有効な署名がないリクエストは、当社のものではありません。そのように扱い、当社までお知らせください。
ご質問・不正利用の報告
GSCWizard-Botが不審な動作をしている、上記の説明より多くクロールしている、またはサイトのクロールを完全に停止してほしい場合は、次の方法でご連絡ください。