Astroで/sitemap.xmlが404になった。標準出力はsitemap-index.xmlだった

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

執筆:ゆまラボ運営者

公開:更新:
Astroで/sitemap.xmlが404になった。標準出力はsitemap-index.xmlだった

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

修正前に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.xmlsitemap-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が表示された。

修正後にブラウザで表示されたsitemap.xml

画面上部には次の表示が出ている。

This XML file does not appear to have any style information associated with it.

最初はこの表示も少し気になったが、これはXMLに表示用スタイルがないというブラウザの案内で、エラーではない。

その下にurlsetlocが並び、実際の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がある前提で見に行ったものの、その名前では生成していなかったのが出発点。

参考#