クロールしたページのカスタム抽出

保存したページ本文に対して、コンテンツセレクターと宣言型の抽出ルールを実行します。保存済みスキャンのソース検索では、GTMスニペットなどのマーカーがあるページを特定できます。

できること

抽出ルール

ルールはコードではなく、単純なデータです。各ルールには、kind(text、attribute、structured、presence、count)、セレクター、演算子(equals、contains、matches、exists)を指定します。演算子matchesは、正規表現ではなく、範囲を限定したグロブパターンです。scan-extractは、保存したページ本文に対してルールを実行します。通信も書き込みもないため、ルールを直して、再クロールなしでもう一度実行できます。貼り付けたHTMLでCSS、XPath、正規表現の抽出を試すには、custom-extract-sampleを使います。

保存したHTMLを検索

scan-content-searchは、生のHTML、headのマークアップ、本文テキスト、CSSセレクターに一致したマークアップから、文字列や正規表現を探します。GTMスニペットなどのマーカーがあるページを探すときに使います。一致した結果は新しいローカルパッケージに書き出されるため、結果を保管できます。

  • リテラルか正規表現の検索、生のHTMLかレンダリング後のDOM
  • 結果は、scan-content-search-pageで100件ずつ読めます

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

  1. 一度クロールして本文を保存

    保存済みスキャンには、本文保持の上限内で、ページ本文がまるごと保存されます。以降のルールと検索は、稼働中のサイトではなく、このコピーに対して実行します。

  2. 抽出ルールをオフラインで実行

    ルールをJSONで書きます。kindはtext、attribute、structured、presence、count、演算子はequals、contains、matches(グロブ)、existsです。--inputかMCPツールでseohead scan-extractに渡します。何も取得せず、結果も保存しません。

  3. 保存したHTMLでマーカーを検索

    scan-content-searchは、生のHTML、headのマークアップ、本文テキスト、CSSセレクターから、リテラルの文字列や正規表現を探し、ローカルパッケージを書き出します。結果はscan-content-search-pageで100行ずつ読みます。

この機能のチェック項目

チェック項目意味重要度根拠
TITLE_MISSINGtitle要素がありません。titleセレクターにkind textのルールを使うと、保存済みスキャン全体で同じ抜けを見つけられます。CriticalページのURL。title要素がないか、空です
CANONICAL_MISSINGインデックス可能なページに、canonical URLがありません。link[rel=canonical]にpresenceルールを使うと、canonicalがないページを一覧にできます。ImportantページのURL。canonicalリンクが見つかりません
SCHEMA_VALIDATION_ERROR構造化データの検証エラーです。JSONポインターを指定したstructuredルールを使うと、エラーの原因になったJSON-LDの値を読めます。ImportantページのURLと、検証に失敗した構造化データの項目
STRUCTURED_DATA_MISSINGあるはずのページに、構造化データがありません。JSON-LDブロックにpresenceルールを使うと、構造化データのないページを確認できます。TipページのURL。構造化データが見つかりません
LOREM_IPSUM_PLACEHOLDERページのコンテンツ領域に、Lorem Ipsumのダミーテキストがあります。ダミーの文言でコンテンツ検索を行うと、スキャン全体から見つけられます。ImportantページのURLと、ダミーテキストに一致した件数

コマンド1つで実行

bash
seohead scan-content-search --scan ./scans/audit.sqlite --query gtm.js

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

必要なもの

  • ページ本文を保存した、保存済みスキャン(SQLite)
  • 抽出の場合:ルールのJSONリスト。--inputまたはMCPツールで渡します
  • 検索の場合:検索文字列または正規表現と、新しい出力フォルダ

制限事項

  • 検索や抽出ができるのは、本文が保存されているページだけです
  • 抽出ルールに正規表現のフィールドはありません。正規表現にはコンテンツ検索を使います
  • 検出されたのは、コードがHTMLに含まれているという事実です。訪問者に対してタグが動作したかどうかは、これでは確認できません
  • レンダリング後のコンテンツを検索できるのは、スキャンにレンダリング後のコピーが保存されている場合だけです

よくある質問

抽出のためにサイトを再取得しますか?
しません。scan-extractとscan-content-searchが読むのは、保存済みスキャンファイルに入っている本文です。URLは取得しないため、ルールを直して、新たにクロールせずに再実行できます。
GTMタグが見つかったら、動作しているということですか?
そうとは限りません。検索で一致したのは、タグがHTMLにあるという事実です。訪問者に対してタグが動作したことの証明にはなりません。検索で確認できるのは、コードがどこにあるかです。
ページ本文が保存されていない場合はどうなりますか?
「なし」ではなく「不明」と報告します。本文がスキャンにない場合、マーカーがないとは判定しません。
抽出結果は保存されますか?
scan-extractは結果を保存せず、その実行分だけを表示します。scan-content-searchは新しいローカルパッケージを書き出すため、一致した結果を保管できます。
正規表現は使えますか?
コンテンツ検索では使えます。--kind regexでPythonの正規表現を指定します。ページが正規表現の時間枠を超えた場合や、プラットフォームが時間枠を強制できない場合は、不一致ではなく「利用不可」と報告します。抽出ルールでは正規表現を使えません。