【スプレッドシート】URLからキーワード出現数をカウントする関数作成。

Webサイト内の文言を変更する必要がある際に、どれくらい使われているのかを確認したい場合があると思います。
Webサイトの特定キーワードの出現回数を調べたいとき、1ページずつ開いて検索するのは非効率です。
そこで、スプレッドシート上でURLと単語を指定するだけで、自動でカウントしてくれるカスタム関数を作りました。

実装コード

/**
 * 指定したURLからキーワードをカウントする
 * @customfunction
 */
function COUNT_WORD(url, ...words) {
  if (!url || !words.length) return "";
  
  try {
    // URLの情報を1回だけ取得(通信の最適化)
    const res = UrlFetchApp.fetch(url, { "muteHttpExceptions": true });
    if (res.getResponseCode() !== 200) return "Error:" + res.getResponseCode();
    
    const html = res.getContentText();
    
    // 各ワードをループで回してカウント
    const results = words.map(word => {
      if (!word) return 0;
      // 記号が含まれても正規表現が壊れないようエスケープ
      const escaped = word.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
      return (html.match(new RegExp(escaped, 'g')) || []).length;
    });

    return [results]; // 横方向に展開
  } catch (e) {
    return "Error";
  }
}

処理のポイント

UrlFetchApp.fetch を関数の冒頭で1回だけ実行するようにしています。キーワードを複数指定しても、サイトへのアクセスは1回で済むため、処理が速くサーバーへの負荷も抑えられます。

設定手順

STEP 1: スクリプトエディタを開く

調査したいスプレッドシートを開き、メニューバーから操作します。

  1. 「拡張機能」をクリック
  2. 「Apps Script」を選択
    別タブでスクリプトの編集画面が立ち上がります。

STEP 2: コードを貼り付けて保存

  1. 既存の myFunction() をすべて消去し、用意したコードを貼り付けます。
  2. 貼り付け後、上部の「フロッピーアイコン(保存)」をクリックし、プロジェクト名を付けて保存します。

STEP 3: 関数の実行と承認

  1. セルに式を入力すると、初回のみ「承認が必要です」というポップアップが出ます。
  2. アカウントを選択
    安全ではない~と表示されますが「詳細」をクリック「(安全ではないページ)に移動」をクリック
  3. 「許可」を選択

使用例

=COUNT_WORD("https://google.com", "Google", "gmail","AI")

このように入力するだけで、1度のアクセスで複数の単語数を取得できます。右隣のセルへ自動展開されるのが非常に便利です。

運用上の注意(重要)

便利ですが、以下の制限とマナーには注意が必要です。

サーバー負荷を避ける

一度に数百、数千行のセルで実行すると、相手サーバーに短時間で大量アクセスすることになり、攻撃とみなされる恐れがあります。数十件ずつ小分けに実行するのが安全です。

Googleの制限

GASには1日あたりの通信回数制限があります。制限を超えると関数が動かなくなるため、計算が終わったセルは 「コピー > 値として貼り付け」 で確定させておくのが鉄則です。

Google サービスの割り当て(公式ドキュメント)

URLを取得する UrlFetch は、一般アカウントで1日20,000回までです。

静的コンテンツ専用

JavaScriptで描画されるサイト(一部のSPAなど)は正しくカウントできない場合があります。

まとめ

GASを使うことによって、スプレッドシートに便利な関数を追加できるため、作業の効率化につながります。ぜひ活用していきましょう。