Astroには公式インテグレーションの@astrojs/sitemapがあるおかげで、npx astro add sitemap
を叩くだけでpages
配下の各ルートを全て含んだxmlファイルを自動で作成してくれるため、非常に簡単にサイトマップを配置できる。
しかしその反面、当サイトのようなブログサイトでありがちな下記要件を満たすのは少し手間がかかる。
- 記事の更新日を
lastmod
に指定したい
noindex
にしている記事(パス)を除外したい
sitemap.xml
というファイル名で作成したい(上記インテグレーションだとsitemap-index.xml
とsitemap-0.xml
の2ファイルが作成されてしまう)
インテグレーションをカスタムするという方法もあるが、今後改修する際の融通も効きやすさを考慮して今回はサイトマップを自前で実装してみる。
実装方法
0. サンプル記事の用意
今回は例として上記のようなArticle
オブジェクト群を用いる。
3つ目の記事だけnoindex
にしたいという前提で、それぞれのupdatedAt
は適当に指定している。
1. xmlの構築
サイトマップの中身を生成する関数を作成する。
2. APIルートの定義
/sitemap.xml
というエンドポイントでレスポンスを返すために、src/pages/sitemap.xml.ts
を作成しAPIルートを定義する。
試しにhttp://localhost:4321/sitemap.xml
を叩いてみると、無事期待通りのxmlが返ってきた。noindex
にしたい記事もしっかり除外されている。
3. サイトマップの登録
あとはクローラー向けに、<head>
内とrobots.txt
にサイトマップの設定を追記すれば完了。