JavaScriptレンダリング対応クローラー

SpiderHeadは、Playwright経由のヘッドレスブラウザーでページをレンダリングし、元のHTMLとレンダリング後のDOMを並べて保持できます。スクリプトの実行後にだけ現れる要素が分かります。レンダリングは任意で、既定ではオフです。

できること

元のHTMLとレンダリング後の比較

render-checkは、1つのURLを2回読み込みます。サーバーが返したままの状態と、スクリプトの実行後のブラウザー上の状態です。titleタグ、canonicalタグ、リンク、現れたり消えたりするコンテンツを比較します。クロールではrendering.modeをjsに設定すると、SpiderHeadが選択的にレンダリングします。既定では、テンプレートのパターンごとに数件のURLを試し、結果が異なるパターンを最大30ページまでレンダリングします。

  • レンダリングで見つかったルートは証跡として記録されます。それらをクロールするかどうかは別のオプトインです(rendering.rendered_links.crawl)
  • 1回の実行によるラボの表示速度であり、フィールドのCore Web Vitalsではありません

必要なときだけ使う

ブラウザーは任意の追加機能なので、基本のクロールには不要です。renderグループとブラウザーをインストールします。Chromiumだけで約150MBかかります。まずテンプレートごとに1ページずつrender-checkを実行し、元のページとレンダリング後のページに差があった場合にだけ、サイト全体をレンダリングしてください。

  • pip install -e ".[render]"
  • python -m playwright install chromium

3ステップで、スキャンを1件保存

  1. 元のHTMLとレンダリング後のDOMを取得

    render-checkは、URLを2回読み込みます。1回目はサーバーが返したままの状態、2回目はスクリプトの実行後に、Playwright経由のChromiumで読み込みます。

  2. スクリプト実行後にだけ現れる要素を比較

    比較では、レンダリング後にだけ存在する語数とリンク数を数えます。また、#rootや#appのマウントポイントだけの、空のアプリシェルも検出します。

  3. コンソールエラーとラボの表示速度を確認

    rendering.artifacts.console_errorsをオンにすると(既定ではオフ)、レンダリング中に記録されたスクリプトエラーがJS_CONSOLE_ERRORSとして報告されます。表示速度は、ローカルでの1回の実行によるラボデータで、フィールドのCore Web Vitalsではありません。

この機能のチェック項目

チェック項目意味重要度根拠
JS_CONSOLE_ERRORSページのレンダリング中に、ブラウザーのコンソールにJavaScriptエラーが記録されたImportantレンダリング実行時のコンソールエラーのテキスト
ROBOTS_BLOCKS_RESOURCESレンダリングに必要な.js、.css、_next/staticのファイルが、robots.txtでブロックされているTipリソースのパスに一致するrobots.txtのルール(robots-checkの結果)
AJAX_CRAWLING_SCHEME_URLページ、またはそのページにあるリンクが、非推奨の#!または_escaped_fragment_のAJAXスキームを使っているTipこのスキームを使っているURL
チェック一覧にある関連項目
RENDER_RESOURCE_BLOCKEDNOINDEX_ONLY_IN_RAW_HTMLCANONICAL_ONLY_IN_RENDERED_HTMLPAGE_TITLE_ONLY_IN_RENDERED_HTML

コマンド1つで実行

bash
seohead render-check --url https://example.com/

先にインストールします: インストールガイド。どのコマンドも、AIエージェント向けのMCPツールとして実行できます。

必要なもの

  • render-check用のページURL
  • render extraと、インストール済みのPlaywrightブラウザー
  • レンダリングを伴うクロールの場合:rendering.modeをjsに設定したクロール設定

制限事項

  • 表示速度の数値は、ローカルでの1回の実行結果です。フィールドデータではありません
  • ブラウザーはrootでの実行を拒否します
  • ページのアクションは宣言型(click、scroll、wait、extract)です。独自のJavaScriptは渡せません
  • 常時接続のあるサイトでは、networkidleにならない場合があります

よくある質問

クロールのたびにブラウザーが必要ですか?
いいえ。基本のクロールはブラウザーなしで動きます。Chromiumは、render-checkとレンダリングを伴うクロール用の追加機能です。pip install -e ".[render]"を実行し、続けてpython -m playwright install chromiumを実行します(約150MB)。
レンダリングチェックで、サイトに変更が加わりますか?
いいえ。ブラウザーと同じようにURLとそのリソースを読み込むだけで、何も編集しません。クリックなどのページアクションが実行されるのは、クロールで設定した場合だけです。
表示速度の数値はCore Web Vitalsですか?
いいえ。LCP、CLS、各種タイミングは、1台のマシンでの1回の実行結果です。ラボ計測であり、Chrome UX Reportのフィールドデータではありません。
スマートフォンとしてレンダリングできますか?
はい。--viewport mobileを付けると、組み込みのスマートフォン用IDとビューポートが使われます。独自のIDを使う場合は、--user-agentを指定します。
ページの読み込みが終わらない場合はどうしますか?
--wait domcontentloadedを指定します。既定はloadです。常時接続のあるサイトではnetworkidleにならないことがあるため、避けてください。