Astroで/sitemap.xmlが404になった。標準出力はsitemap-index.xmlだった
公開中のAstroサイトで/sitemap.xmlだけ404になったときに、@astrojs/sitemapの出力名と公開ファイルを確認した記録です。

ゆまラボのhttps://bringain.com/sitemap.xmlを開くと404。サイト本体は普通に動いているので、最初は少し違和感があった。

記事もカテゴリページも普通に見えていたので、サイト全体のデプロイ失敗ではない。/sitemap.xmlだけが存在していなかった。
最初は「サイトマップを追加していないから404」くらいに考えていたが、Astroの公式連携を調べると、もう1つ引っかかる点があった。
@astrojs/sitemapの標準出力名は/sitemap.xmlではない。
@astrojs/sitemapで出るのはsitemap-index.xml#
Astroの@astrojs/sitemapを使う構成では、現在の標準出力は次の形になる。
sitemap-index.xml
sitemap-0.xml
astro.config.*では公開URLをsiteに設定しておく。
import { defineConfig } from 'astro/config';
import sitemap from '@astrojs/sitemap';
export default defineConfig({
site: 'https://bringain.com',
integrations: [sitemap()],
});
この状態でビルドに成功しても、/sitemap.xmlという名前を生成していなければ、そのURLは404のままになる。
最初に見るべきなのはブラウザの404だけでなく、distに何が出ているか。
npm run build
Get-ChildItem .\dist\*.xml
ここでsitemap-index.xmlとsitemap-0.xmlがあるなら、Astroのサイトマップ生成自体は動いている。
検索エンジン向けだけならsitemap-index.xmlでも問題ない#
サイトマップのURLは必ず/sitemap.xmlでなければならないわけではない。
Astro公式の例でもrobots.txtからsitemap-index.xmlを参照している。
Sitemap: https://bringain.com/sitemap-index.xml
その形で運用するなら、404になっている/sitemap.xmlを無理に作る必要はない。
自分のサイトでは、ブラウザからhttps://bringain.com/sitemap.xmlを直接確認できる形にしたかったので、そのURLでもXMLを返すように変更した。
/sitemap.xmlを追加したあとは公開ファイルを確認する#
AstroはHTML以外のルートも作れる。例えばsrc/pages/sitemap.xml.tsのような静的エンドポイントからXMLを返す方法がある。
実装方法が何であっても、公開前に見る場所は同じ。
ビルド後のdistに目的のXMLがあるか。
そしてCloudflare Workersへ、そのdistが実際にデプロイされているか。
ローカルのdistにあるのに公開URLだけ404なら、Astro側ではなくデプロイ側を確認することになる。
ゆまラボはStatic Assetsとしてdistを配信しているので、この確認がそのまま公開状態の切り分けになった。
修正後はブラウザでXMLがそのまま見えた#
修正後に同じURLを開くと、404ではなくXMLが表示された。

画面上部には次の表示が出ている。
This XML file does not appear to have any style information associated with it.
最初はこの表示も少し気になったが、これはXMLに表示用スタイルがないというブラウザの案内で、エラーではない。
その下にurlsetとlocが並び、実際のURLが入っている。
<url>
<loc>https://bringain.com/</loc>
</url>
ここまで見えれば、少なくとも/sitemap.xmlは404ではなくなっている。
HTTPステータスだけ確認するなら次でもよい。
curl.exe -I https://bringain.com/sitemap.xml
robots.txtは実際に使うURLへ合わせる#
最後にrobots.txtも確認した。
/sitemap.xmlを使うなら、参照先も同じURLにする。
Sitemap: https://bringain.com/sitemap.xml
Astro標準のsitemap-index.xmlを使うなら、こちらにする。
Sitemap: https://bringain.com/sitemap-index.xml
ファイル名より、ビルド結果に存在するURLとrobots.txtの参照先が一致している方が重要。
今回の404は、Astroサイト全体の故障ではない。/sitemap.xmlがある前提で見に行ったものの、その名前では生成していなかったのが出発点。
参考#
- Astro公式:@astrojs/sitemap
https://docs.astro.build/en/guides/integrations-guide/sitemap/ - Astro公式:Endpoints
https://docs.astro.build/ja/guides/endpoints/


