本サイトはアフィリエイトプログラムを利用しており、広告主から成果報酬を受け取ることがあります。Amazonのアソシエイトとして、適格販売により収入を得ています。

ホーム › 記事 › クロールが12日間止まり、再発防止を作った8日後に、デプロイが「完了」と出たまま動いていなかった

クロールが12日間止まり、再発防止を作った8日後に、デプロイが「完了」と出たまま動いていなかった

著者:SecBilly 公開 2026-09-29

このサイトで起きた2件の故障の記録です。どちらも画面には成功と出ていました。

1件目はGoogleのクロールが12日間止まっていたこと。2件目は、その再発防止を作った8日後に、デプロイスクリプトが「✓ デプロイと確認まで完了」と表示しながら1件もデプロイしていなかったことです。

この記事の要点

使った記録

自分のサイトのログと管理画面の実測値だけです。

推測の部分には「分からない」と書きます。

1件目:12日間クロールされなかった

GA4のセッションが1しかない原因を追ったときに見つけました。記事の質でも本数でもありませんでした。

Search Console の URL 検査の結果はこうです。

項目表示
前回のクロール2026/09/09 7:11:18
クロールを許可?いいえ、robots.txt によってブロックされています
ページの取得失敗しました: robots.txt によりブロックされました
インデックス登録を許可?はい

Googleはこのサイトの本文を一度も読めていませんでした。URLだけ知っている状態です。

原因は200を返す認証ページだった

2026-09-09 に Googlebot が来たとき、Vercel のデプロイが保護された状態でした。/robots.txt は HTTP 200 を返しましたが、中身は Vercel の認証ページのHTMLでした。

Googleは robots.txt を読めない場合、サイト全体を不許可として扱います。そのため以後12日間まったくクロールされませんでした。

同じ200を、2者が逆に誤読した

この事故の少し前、自分は別件で「公開してはいけないファイルが本番に出ていないか」を調べていました。20件のURLに curl を投げ、ステータスコードだけを見て「全部漏れている」と判断しました。実際の200は同じ認証ページで、中身は漏れていませんでした。

どちらもステータスコードだけを見ていました。200は「取得できた」としか言っていません。

直した結果

サイト側が正常であることを Googlebot の User-Agent で実測し、Search Console でインデックス登録をリクエストしました。

12日間2026-09-21
robotsDISALLOWEDALLOWED
取得BLOCKED_ROBOTS_TXTSUCCESSFUL
前回クロール2026-09-092026-09-21 01:56:42

デプロイを直した時点では回復していません。Googleが次に来るまで、壊れていた期間の影響は残りました。

再発防止として作ったもの

同じ日に2つ作りました。

仕組みいつ動く何を見るか
クロール監視毎日 07:23サイト側(Googlebot UA で取得)+ Google側(Search Console API)
deploy.shデプロイのたび公開ゲート → デプロイ → サイト側の健全性

角度を2つに分けたのが要点でした。サイトを直しても、Googleが来るまでは直っていません。

2件目:デプロイが0件のまま「完了」と出た

8日後の 2026-09-29、トップページの表記を直して deploy.sh を走らせました。画面にはこう出ました。

✓ 公開ゲート通過
✓ 正常
✓ デプロイと確認まで完了

本番は変わっていませんでした。ローカルのファイルは直っていて、公開されているHTMLだけが古いままでした。

原因は2つ重なっていた

1つ目。NODE_OPTIONS が実体の消えたファイルを読み込み先に指していて、node 自体が起動に失敗していました。vercel は node で動くので、コマンドは何もせずに終わります。

2つ目。スクリプトの書き方がこうでした。

vercel deploy --prod 2>&1 | tail -20

パイプでつなぐと、終了コードは最後のコマンド(tail)のものになります。vercel が落ちても、シェルから見た結果は成功です。

後段のチェックも通ってしまった

deploy.sh はデプロイのあとに健全性チェックを走らせます。これも通りました。古い版のサイトが正常に動いていたからです。

前段が何もしなくても、対象が以前から正常なら後段は通ります。「後段が通った」は「前段が走った」の証拠になりません。

裏の取り方

vercel deploy --prod を単体で走らせたら、node の起動失敗がそのまま出ました。デプロイのURLは1つも返りませんでした。原因を直してから同じスクリプトを走らせると、今度はURLが返り、3秒でデプロイが1件できました。本番の表記もそこで変わりました。

何回「完了」と出していたかは分かりません。スクリプトがその記録を残していなかったためです。

2件に共通していたこと

1件目2件目
画面の表示HTTP 200✓ 完了
実際認証ページデプロイ 0件
気づくまで12日直したファイルが本番に出ないことに気づくまで
検知した仕組み無し(手で調べた)無し(手で調べた)

どちらも、成功を報告する仕組みが失敗を隠していました。そしてどちらも、作ってあった監視では捕まりませんでした。

仕事で統制の有効性を確かめるときも同じ問いを使います。「動いていますか」ではなく「動かなかったとき、それが分かりますか」です。この2件は、自分のサイトでその問いに答えられていなかった記録です。

直したこと

deploy.sh を2か所変えました。

1. パイプをやめて変数で受け、終了コードを捨てないようにした

2. 出力にデプロイURLが含まれることを検査し、無ければ落とすようにした

2つ目が効きます。「コマンドが成功した」ではなく「その段が作るはずのものが実際にできたか」を見るためです。

同じ日に、GA4の取得スクリプトでも近いものを見つけました。CSVの書き出しが extrasaction="ignore" になっていて、列定義に無いキーを何も言わずに捨てていました。新しく足した流入元の値が、件数は出るのに中身だけ空で記録されていました。こちらも未知のキーがあれば落とすように変えて、わざと壊して落ちることを確認しました。

まとめ

この記事に書いたのは自分のサイトで起きたことだけです。まだ見つかっていない同じ形の故障があるかは分かりません。

関連する記事

面談したエージェントの一覧は転職エージェントの比較にまとめています。よかった3社には紹介料が発生するリンクを置いていません。

SecBilly

フルスタックエンジニアを約11年、そこから同じ会社で情報セキュリティへ1年3か月、 現在は GRC 専任(セキュリティ・GRC は通算3年10か月)。 情報処理安全確保支援士(RISS)を受験中です。勤務先は公開していません。

運営者について →