Marketing
Astroでサイトマップを自動生成する3つの設定
Astroで作ったサイトでサイトマップを自動生成し、検索エンジンに伝える設定が分かる記事です。
記事を1本足すたびに、public フォルダの sitemap.xml を開いて、URLを1行ずつ書き足している。そんな運用をしていませんか。公開したあとで書き忘れに気づき、慌てて直している方もいるはずです。
Astroなら、この手作業は丸ごとなくせるうえに、書き忘れの心配もなくなります。この記事では、サイトマップの自動生成から検索エンジンに伝えるところまでを、3つの観点に分けて説明します。公式ドキュメントで確かめたことと、このサイト自体の設定は、はっきり分けて書く方針です。
サイトマップを自動生成するために入れる3つの設定
Astroでは、公式の統合機能を入れるだけで、サイトマップがビルドのたびに作られます。触るのは設定ファイルの数行だけ。手順そのものは短く迷う場面も少ないです。
ここでは入れるものを3つに分けます。統合そのもの、サイトの公開URL、ビルド後の確認の3点です。順番に手を動かせば足りる小さな作業だと見ています。
統合を追加して設定ファイルに書く
使うのは、公式の @astrojs/sitemap という統合です。パッケージを追加して、astro.config.mjs の integrations に sitemap() を加えます。
このサイトも同じ構成です。package.json の dependencies に @astrojs/sitemap が入っていて、設定ファイルで読み込んでいます。ほかの統合と並べて書くだけで、迷う場所はありません。
この段階で余計な設定を足す必要はありません。自分ならまず sitemap() だけで動かし、出力を見てから必要な指定を足します。最初から作り込むと、何が効いているのか分からなくなるからです。
公開URLを site に書く
次に、astro.config.mjs の defineConfig に site を書きます。公式によると、この統合はサイトの公開URLが分からないとサイトマップを作れません。
つまり site は必須の設定です。値は http:// か https:// で始まるURLにします。このサイトでは、site に https://tsutashimi.com を指定しています。
開発中はローカルのURLのままにしがちな場所です。最初に見るのは本番のURLを入れたかどうか。サイトマップに載るURLは、ここで書いた値が土台になるからです。
ビルドして生成物を確かめる
設定が済んだら、npm run build を実行します。ビルド後、dist に sitemap-index.xml と sitemap-0.xml ができていました。
生成された2つのうち、index は番号つきのサイトマップへの案内役で、URLの一覧は sitemap-0.xml の側に入っています。
記事を足したら、ビルドし直して sitemap-0.xml を開く。新しい記事のURLが載っていれば、更新漏れは起きていません。目で見て確かめる習慣を、最初に一度だけつけておくと安心です。
載せるページを絞り込む3つの基準
自動生成は、何も指定しなければ、サイトのすべてのページを載せます。ですが全部を載せるのが正解とは限りません。
どのページを載せてどのページを外すのか。この記事では3つの基準で整理します。公式の filter の使い方と、このサイトでの判断を合わせて説明するので、自分のサイトに当てはめながら読んでみてください。
既定では全ページが載る
公式によると、filter を指定しなければ、すべてのページがサイトマップに入ります。つまり、外したいページは自分で明示する必要があるわけです。
サイトマップは、載せたいページの一覧だと考えています。載せないページは放っておくのではなく、はっきり外す。そう決めておけば、あとで見返したときに迷わずに済みます。
Googleも、検索結果に出したいURLを載せるように案内しています。同じ内容が複数のURLにあるなら、載せるのは正規のURLだけです。
載せないページを filter で外す
外すときは、sitemap() の filter に関数を書きます。公式の説明では、関数にはページのURLが渡されます。true を返せば載せて、false を返せば外す仕組みです。
このサイトで外すのは2種類のページ。旧ページへのリダイレクト専用のページ、たとえば /lp/ 以下です。もう一つは、公開していても検索結果に出さない方針のページです。
自分なら、リダイレクト専用のページと検索に出さないページは入れません。リダイレクト先の正規ページがあるのに旧URLまで載せる意味はなく、検索に出さないと決めたページを載せるのも、矛盾した合図になるからです。
changefreq と priority は無理に書かない
統合には、changefreq と priority と lastmod の設定もあります。全ページにまとめて値を入れる書き方で、ページごとに変えたいときは serialize を使う形です。
ただしGoogleのドキュメントには、priority と changefreq の値は無視されるという一文があります。Astroの公式の章にも同じ注意書きが載っています。lastmod が使われるのは、日付が正確なときだけです。
そこでこのサイトではこれらを入れていません。効かない設定を足して管理の手間が増えるなら、書かないほうが楽です。lastmod を入れるなら、本当に更新した日だけを入れる覚悟が要ります。
検索エンジンにサイトマップを伝える3つの経路
サイトマップは、作っただけでは役目の半分にすぎません。置き場所を検索エンジンに知らせて、はじめて使われる可能性が出てきます。
伝える経路は大きく3つ。robots.txt に書く方法、Search Console から送る方法、公開後に置き場所を確かめる方法です。それぞれ何ができて何ができないのかを、順に見ていきます。
robots.txt に Sitemap の行を書く
一番手軽なのは、robots.txt に Sitemap の行を足す方法です。Astroの公式にも、public/robots.txt に sitemap-index.xml のURLを書く例が載っています。
このサイトの public/robots.txt にも、Sitemap: の行に sitemap-index.xml のURLを書いています。指定するのは sitemap-0.xml ではなく、index の側。
Googleの案内でも、robots.txt の Sitemap 行は、次にそのファイルを読んだときに見つけてもらえる方法とされています。ファイルを1つ置くだけなので、まずここから設定するのが近道です。
Search Console から送信する
もう一つの経路が、Search Console のサイトマップのレポートから送る方法です。送ったあとは、Googleがいつ読み込んだか、処理でエラーが出たかを確認できます。
このサイトでは、Search Console に登録して、sitemap-index.xml を送ってあります。結果の数字はこの記事では書きません。
送ったからといって、Googleが読むとは限りません。公式も、サイトマップに載せたページがすべて取り込まれるとは保証していません。エラーの有無を見られる点が、この方法の一番の価値だと見ています。
公開後に置き場所を開いて確かめる
最後は地味ですが、公開したあとで、サイトマップのURLをブラウザで開くことです。ビルドが通っても、本番に置かれていなければ意味がありません。
確かめるのは、sitemap-index.xml が開けること、そこに書かれた sitemap-0.xml も開けることの2点です。載せたくないページが混ざっていないかも、この場で見られます。
Googleは、サイトマップを出せば掲載されるとは言っていません。小規模で内部リンクが張られたサイトなら、そもそも必須ではないとも書いています。それでも自動生成は、一度入れれば手間が残らない方法です。
まとめ
Astroのサイトマップ自動生成は、統合を入れて、site を書き、ビルドで確かめる3つの設定で動きます。載せないページは filter で外し、robots.txt で伝えます。
小規模なサイトでは、手で書くより自動生成のほうが更新漏れは起きにくいというのが、自分の考えです。まずは site と sitemap() の2か所を設定して、ビルドしてみてください。
あわせて読みたい:Search Consoleを見る順番/このブログを作った理由
- #SEO
- #Astro
- #サイトマップ