
ウェブサイトの運営やSEO対策において、リンク切れ(404エラー)のチェックは欠かせない作業です。しかし、何百ものURLを手動で一つずつ開いて確認するのは非常に手間がかかります。
今回は、GoogleスプレッドシートのA列に並んだURLリストを自動で巡回し、その結果(HTTPステータスコード)をB列に書き出してくれる便利なGASライブラリのコードをご紹介します。


このライブラリの主な目的は、スプレッドシートに記載されたURLが現在アクセス可能かどうか(生きているか死んでいるか)を自動で判定することです。
UrlFetchAppというGASの標準機能を使用し、各URLに実際にアクセスを試みます。その結果返ってきたHTTPステータスコード(例:200 OK, 404 Not Found, 500 Server Errorなど)を取得し、隣のセルに「✅ OK (200)」や「❌ 404 Not Found」といった分かりやすい形式で記録します。
このライブラリは、以下のような場面で非常に役立ちます。
check404Only関数を使えば、大量のURLリストの中から「404エラーになっているURLだけ」を素早く抽出できます。このライブラリ(ID: 1mTRw0sYI7DHJ9psMiSIZ0owuExPQ3eaLAFSyu5TYnbclwp9TMBWjxwJj)はすでに公開されているため、ご自身のスプレッドシートで以下の手順を踏むだけですぐに利用できます。
1mTRw0sYI7DHJ9psMiSIZ0owuExPQ3eaLAFSyu5TYnbclwp9TMBWjxwJj「検索」ボタンを押し、ライブラリ(URLChecker)が見つかったら、「追加」ボタンを押します。(注:識別子はデフォルトで URLChecker になりますが、ご自身で MyChecker など自由な名前に変更しても構いません。以降の説明は URLChecker を前提とします)コード.gs などのファイルに、以下の「呼び出し用コード」を貼り付けます。これは、ライブラリの機能を「実行」するためのスイッチの役割を果たします。/**
* [checkURLsInColumnA を実行します]
* 現在アクティブなシート(開いているシート)のURLをすべてチェックします。
*/
function runCheckOnActiveSheet() {
// 1. 現在アクティブなシートを取得します
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// 2. ライブラリ関数を実行します('URLChecker'はライブラリ追加時の識別子です)
URLChecker.checkURLsInColumnA(sheet);
}
/**
* [check404Only を実行します]
* 現在アクティブなシートのURLをチェックし、404エラーのみをマークします。
*/
function run404CheckOnActiveSheet() {
// 1. 現在アクティブなシートを取得します
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// 2. ライブラリ関数を実行します
URLChecker.check404Only(sheet);
}
/**
* スプレッドシートを開いた時(またはリロードした時)に
* カスタムメニューを自動で追加します。
*/
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('カスタムURLチェック')
.addItem('全URLをチェック', 'runCheckOnActiveSheet')
.addItem('404エラーのみチェック', 'run404CheckOnActiveSheet')
.addToUi();
}このライブラリは、主に2つの関数を提供しています。
この関数は、渡されたシートのA列を上から順にチェックし、すべてのHTTPステータスコードをB列に記録します。
sheet.getRange("A:A").getValues() でA列の全データを取得します。forループで1行ずつURLを取り出します。UrlFetchApp.fetch(url, options) で実際にHTTPリクエストを送信します。muteHttpExceptions: true オプションが非常に重要です。これが true だと、404や500エラーが発生してもスクリプトが停止せず、エラー情報(ステータスコード)を取得できます。headers: {'User-Agent': ...} を設定しています。一部のサーバーは、GASからのアクセス(標準のUser-Agent)をボットと見なして拒否することがあるため、一般的なブラウザ(Mozilla)を偽装しています。response.getResponseCode() でステータスコード(200, 404など)を取得します。results.push(...) で結果を配列に一時保存し、最後に resultRange.setValues(results) でB列に一括書き込みしています(1行ずつ書き込むより高速なため)。Utilities.sleep(200) で、各リクエストの間に200ミリ秒(0.2秒)の待機時間を設けています。これは、短時間に大量のリクエストを送って相手サーバーに負荷をかけすぎないための重要な「レート制限」対策です。この関数の基本的な構造は checkURLsInColumnA と同じですが、結果を書き込むロジックだけが異なります。
404 の場合のみ results.push(['❌ 404 Not Found']) で記録します。results.push(['']) となり、B列には何も書き込まれません。これにより、エラーが発生しているURLだけがB列にリストアップされ、問題のある箇所を素早く特定できます。
いいえ、違います。これはGoogle Apps Script(GAS)のサードパーティ製ライブラリ(URLChecker)です。利用するには、記事の手順(スプレッドシートでApps Scriptを開く → スクリプトIDでライブラリを追加 → 呼び出し用コードを貼り付ける)に従って、ご自身でセットアップを行う必要があります。
はい、意図的な仕様です。記事の「内部解説」セクションで説明されている通り、Utilities.sleep(200)という処理により、各URLのリクエスト後に0.2秒間の待機時間を設けています。これは、短時間に大量のリクエストを送信して相手(チェック先)のサーバーに過度な負荷をかけないための重要な「レート制限」対策です。
はい、それは意図された動作です。記事の「2. check404Only(sheet)」の解説にある通り、この関数はステータスコードが404のURLのB列にのみ「❌ 404 Not Found」と書き込みます。 それ以外(200 OKなど)のURLのB列には、空の文字列([''])を書き込む仕様になっているため、既存の「OK」表示は上書きされて消えます。これにより、B列には404エラーが発生している箇所だけが残ります。