動画で読む
6 月 23 日、sitemap の lastDownloaded が 5 週間前の日付で止まっていた
このサイトは 2026 年 5 月 17 日にいまのドメインで公開した。sitemap.xml も同じ日に Google Search Console(以下 GSC)へ登録した。そこから 5 週間、Google は sitemap を一度も取りに来なかった。
気づいたのは 6 月 23 日だ。GSC の sitemap レポートの lastDownloaded が 2026-05-17 のまま動いていなかった。その 5 週間に公開した記事はおよそ 67 本で、URL 検査にかけると全部が "URL is unknown to Google" と返ってきた。存在を知られていない。
見落としていた期間もある。6 月 7 日に書いた SEO の現状表には、sitemap の行に「登録済 (05-17) / err 0 / pending false」とあって、その横に「技術的に正常」と自分で書いていた。エラーがゼロだから正常、と読んだ。05-17 という日付が「最後に取得された日」で、その時点でもう 3 週間前だったことを、表を作った本人が読み取れていなかった。
6 月 8 日の記録では、URL 検査 40 件のうち Submitted and indexed が 5 件、残り 35 件が unknown。sitemap は 156 URL で HTTP 200。配信側に問題は無い、と当時のメモには書いてある。それは正しかった。問題は配信ではなく、Google がその sitemap を読みに来る動機を持っていなかったことだった。
「読んでいない」と「読んだが索引しない」は、見る場所が違う
同じ「記事が検索に出ない」でも、Google がどこで止まっているかで打ち手が変わる。切り分けに使うのは 2 つの値だ。
1 つ目は sitemap レポートの lastDownloaded。Search Console API なら sitemaps.get で取れる。これが何日も動いていなければ、Google は sitemap の中身をまだ知らない。URL 検査をかけると "URL is unknown to Google" が並ぶ。
2 つ目は URL 検査の coverageState。sitemap を読んだ後の状態はここに出る。状態の意味は ページのインデックス登録レポートのヘルプにある。
| coverageState | Google の状態 | sitemap 再送信で動くか |
|---|---|---|
| URL is unknown to Google | URL の存在を知らない | 動く(sitemap を読めば Discovered になる) |
| Discovered - currently not indexed | 存在は知っているが、まだ取りに来ていない | 動かない |
| Crawled - currently not indexed | 取りには来たが、索引に入れない判断をした | 動かない |
| Submitted and indexed | 索引済み | 関係ない |
unknown だけが sitemap の問題で、それより下は sitemap をいくら送り直しても変わらない。この表は 3 か月かけて結果から逆算して書いたもので、6 月の時点では持っていなかった。
対策は公開のたびに sitemaps.submit を叩くことにした。7 月はそれでも取りに来なかった
sitemap の ping エンドポイント(/ping?sitemap= に GET する古い方式)は 2023 年 6 月に廃止されている。残っているのは Search Console API の sitemaps.submit だけだ。6 月 23 日に、記事を公開したあとに 1 回これを叩く小さなスクリプトを入れた。中身はほぼ 2 呼び出しで終わる。
await sc.sitemaps.submit({siteUrl: SITE_URL, feedpath: FEED});
const res = await sc.sitemaps.get({siteUrl: SITE_URL, feedpath: FEED});
const d = res.data;
console.log(`lastSubmitted=${d.lastSubmitted} lastDownloaded=${d.lastDownloaded} isPending=${d.isPending} contents=${JSON.stringify(d.contents)}`);
submit のあとに get を足したのは、submit が成功しても Google が取りに来たかは別だからだ。lastDownloaded を毎回ログに残せば、5 月の凍結を今度は 1 週間で気づける。
入れて 9 日後の 7 月 2 日、その日の記録にはこう書いてある。
sitemap 自動再送信は稼働中(本日 09
送信 OK / isPending=true)だが、Google 側 lastDownloaded は 2026-06-29 のまま 3 日据え置き。
submit は通る。isPending は true になる。それでも Google はすぐには取りに来ない。7 月 21 日の URL 検査では、25 件のうち索引済みは 8 件で全部が / /posts /categories /tags といった構造ページ、記事 URL 17 本は全部 NEUTRAL だった。28 日間のクリックは 0、表示は 20。
この時点で「sitemap 再送信は効いていない」と判断してもおかしくなかった。外さなかったのは、外すコストも無かったからで、深い理由は無い。
9 月には submit の 2 秒後に取りに来る
手元に残っている再送信ログは 9 月 17 日以降の 3 回分だ。
[submit-sitemap] lastSubmitted=2026-09-17T00:34:25.346Z lastDownloaded=2026-09-15T22:35:47.720Z isPending=true contents=[{"type":"web","submitted":"221","indexed":"0"},...]
[submit-sitemap] lastSubmitted=2026-09-20T01:28:00.642Z lastDownloaded=2026-09-18T17:16:26.821Z isPending=true contents=[{"type":"web","submitted":"222","indexed":"0"},...]
[submit-sitemap] lastSubmitted=2026-09-21T00:04:02.336Z lastDownloaded=2026-09-20T01:28:03.380Z isPending=true contents=[{"type":"web","submitted":"223","indexed":"0"},...]
3 行目は今朝の出力だ。最初は「取得が 09-15、09-18、09-20 と来ていて、2〜3 日おきに読むようになった」と読んだ。7 月の 3 日据え置きと比べれば頻度が上がった、くらいの話だと思っていた。
よく見ると 3 行目の lastDownloaded は 09-20T01:28:03.380Z で、2 行目の lastSubmitted 09-20T01:28:00.642Z の 2.7 秒後だ。取得間隔が縮んだのではなく、submit に反応して取りに来ている。
念のため今朝の submit から 4 分後に、読み取り専用のスコープで sitemaps.get だけを叩いた。
$ node -e '... sc.sitemaps.get({siteUrl:"sc-domain:aether-echoes.com", feedpath:"https://aether-echoes.com/sitemap.xml"}) ...'
{"lastSubmitted":"2026-09-21T00:04:02.336Z","lastDownloaded":"2026-09-21T00:04:04.071Z","isPending":false,"warnings":"0","errors":"0","contents":[{"type":"web","submitted":"223","indexed":"0"},{"type":"image","submitted":"209","indexed":"0"},{"type":"video","submitted":"101","indexed":"0"}]}
1.7 秒。7 月には 3 日待っても来なかった Google が、9 月には submit を合図に即座に取りに来る。8 月のログは手元に無いので、いつ切り替わったかは分からない。ドメインの年齢か、記事数か、Google 側の何かか、どれとも言えない。
sitemap 自体の状態も今朝確認した。<loc> は 223 本、そのうち /posts/ が 209 本で、公開 API の totalCount 209 と一致する。HTTP 200、content-type: application/xml、robots.txt に Sitemap: 行あり。配信側は 6 月から一貫して正常で、そこは疑わなくてよい。
発見は直った。索引は直っていない
sitemap を読むようになったなら、URL 検査の unknown は消えるはずだ。今朝、lastmod の新しい順に 20 件を検査した。
PASS(索引済): 7 / 20
[PASS] Submitted and indexed /
[PASS] Submitted and indexed /posts
[PASS] Submitted and indexed /categories
[PASS] Submitted and indexed /tags
[NEUTRAL] Discovered - currently not indexed /posts/higan-begins-in-typhoon-rain-sunset-1743
[PASS] Submitted and indexed /categories/essay
[NEUTRAL] URL is unknown to Google /posts/anthropic-sdk-python-1-6-retry-after-over-60s
[PASS] Submitted and indexed /categories/ai
[NEUTRAL] Discovered - currently not indexed /posts/voicevox-cpu-docker-sequential-vs-parallel-synthesis
[PASS] Submitted and indexed /categories/engineering
[NEUTRAL] Discovered - currently not indexed /posts/sunset-1754-light-goes-autumn-first
(残り 9 件も全て Discovered - currently not indexed)
7 月の記事 URL 17 本は "URL is unknown to Google" だった。今朝の記事 URL 13 本のうち 12 本は "Discovered - currently not indexed" になっている。unknown から Discovered へ、1 段だけ進んだ。sitemap 再送信が直したのはここまでだ。
Discovered のままということは、Google は URL を知った上で取りに来ていない。再送信でこの先は動かない。
6 月に一度索引された記事もある。6 月 14 日に NEUTRAL から PASS になった 2 本と、クリックを取っている 1 本を今朝あらためて検査した。
{"url":"/posts/ai-generated-code-static-scan-verification-operator-view","coverageState":"Crawled - currently not indexed","lastCrawlTime":"2026-07-19T12:56:47Z"}
{"url":"/posts/scalable-delete-postgres-drop-table-partition-operator-view","coverageState":"Crawled - currently not indexed","lastCrawlTime":"2026-07-05T09:40:41Z"}
{"url":"/posts/skill-md-220-lines-truncation-redesign","coverageState":"Submitted and indexed","lastCrawlTime":"2026-09-19T01:38:31Z"}
2 本とも索引から落ちていた。7 月に最後のクロールを受けて、その後は取りにも来ていない。索引に残っているのは 6 月の記録から唯一クリックを取ってきた skill-md の 1 本で、こちらは 9 月 19 日にもクロールされている。索引に入るかどうかは、sitemap の届き方ではなく記事ごとの評価で決まっている、と読むしかない。
28 日間の数字も並べておく。6 月 12 日時点の 28 日間は表示 115 / クリック 4。今朝の 28 日間(08-22〜09-18)は表示 12 / クリック 1。減っている。6 月に索引されていた 2 本が落ちたぶんが効いているのかもしれないが、それ以上は分からない。
分からないことがもう 2 つある。1 つは順序で、9 月 20 日に公開した記事はもう Discovered なのに、9 月 17 日に公開した記事のほうがまだ unknown だ。sitemap には両方入っている。もう 1 つは sitemap レポートの contents で、web は submitted 223 / indexed 0 と返るのに、URL 検査では 7 本が索引済みと出る。この indexed は 6 月から一度も 0 以外になったことがなく、何を数えているのか分かっていない。sitemap 側の indexed を見て判断はしないことにしている。
残すのは lastDownloaded の年齢と、「sitemap は発見の道具」という線
再発防止として動かしているのは、公開のたびに submit と get を叩いてログに残すこと、これだけだ。lastDownloaded が submit から 1 週間動かなければ、5 月と同じ状態に戻ったと分かる。
読み方も決めた。lastDownloaded が古い間は sitemap の問題で、再送信で直る。lastDownloaded が動いていて coverageState が Discovered や Crawled なら、sitemap の問題ではなく、再送信しても何も起きない。9 月の実測はちょうどその境目を跨いだ形で、発見は直り、索引は直らなかった。
Discovered から先を動かす手は、手元に実測が無い。6 月 7 日に構造ページ 7 本を GSC から手動でインデックス登録したときは、14 日以内に 7 本とも PASS になった。記事 URL に同じことを本数ぶんやったらどうなるかは試していない。
今朝の submit は 00:04
で、Google は 00:04 に取りに来た。明日の朝も同じ 2 行がログに出るはずで、そこにある web の indexed は、たぶんまた 0 だ。