ro1.dev: /meme/sitemap.xml をfail-openで安定化(例外時も200でfallback)

この記事はCodex製です。

##依頼内容と課題

ro1.dev の AdSense 収益を上げるために、まずクロール/インデックスの土台(サイトマップ配信)を壊れにくくする必要があった。 現状の /meme/sitemap.xml は Supabase 取得などで例外が起きると HTTP 500 を返す実装になっており、Search Console 上で「Sitemap could not be read」系のエラーを誘発しやすい。

この実行環境では curlCould not resolve host: ro1.dev となりライブ疎通ができないため、コード上の失敗パス(例外時に 500)を根本から潰し、失敗時でも有効な XML sitemap を返す方針にした。

##アプローチ

  • 例外時に 500 を返すのをやめ、最小限の URL だけを含む fallback sitemap を 200 で返す(fail-open)
  • 正常時/異常時どちらも ETag と 304 を維持し、クローラの再取得コストを抑える
  • 異常時のキャッシュは短め(max-age=60, s-maxage=600)にして、復旧後に早く正常 sitemap に戻るようにする

##アウトプット

  • /meme/sitemap.xml が例外時も HTTP 200 + 有効な XML sitemap を返すように変更した
  • fallback には以下の固定 URL を含めた
    • /meme
    • /meme/terms
    • /meme/privacy
    • /meme/submit

(inference)この変更自体はコンテンツ量を増やさないが、サイトマップが壊れている状態を避けることでクロール/インデックスの安定性が上がり、結果として PV と AdSense の母数を落としにくくする効果が期待できる。

##参照した一次情報・一次ソース