Astroブログのページネーションをサイトマップから除外する方法
2025/6/1
このサイトはアフィリエイト広告を利用しています。
目次
はじめに
Astroでブログサイトを構築する際、サイトマップの最適化は重要なSEO対策の一つです。しかし、デフォルト設定では/blog/2/
、/blog/3/
などのページネーションページもサイトマップに含まれてしまい、検索エンジンにとって価値の低いページが混在する問題があります。
本記事では、Astroの@astrojs/sitemap
インテグレーションを使って、ページネーションページを効率的にサイトマップから除外する方法を詳しく解説します。
サイトマップ除外の必要性
SEO上の問題点
ページネーションページがサイトマップに含まれることで、以下の問題が発生する可能性があります:
- 検索エンジンのクローラーリソースの無駄遣い
- 重要なページの優先度低下
- サイトマップファイルサイズの増大
重要
サイトマップは検索エンジンに対して「この URL が重要である」というシグナルを送る役割を持ちます。そのため、価値の低いページは除外することが推奨されています。
除外対象となるページ
一般的に以下のページをサイトマップから除外することを検討しましょう:
- ページネーションページ(
/blog/2/
、/blog/3/
など) - プライバシーポリシーなどの法的ページ
- 管理者向けページ
基本的な実装方法
パッケージのインストール
まず、Astroの公式サイトマップインテグレーションをインストールします:
npx astro add sitemap
または手動でインストール:
npm install @astrojs/sitemap
基本設定
astro.config.mjs
でサイトマップインテグレーションを設定します:
import { defineConfig } from 'astro/config';import sitemap from '@astrojs/sitemap';
export default defineConfig({ site: 'https://your-site.com', integrations: [ sitemap({ filter: (page) => { // ページネーションページを除外 return !page.match(/\/blog\/[2-9]\d*\/?$/); }, }), ]});
より高度な除外設定
複数条件による除外
実際のプロジェクトでは、複数の条件でページを除外する必要があります:
sitemap({ filter: (page) => { // 除外したいパスのパターン const excludePaths = [ '/admin/', // 管理者ページ '/privacy-policy' // プライバシーポリシー ];
// 除外パスのチェック const isExcludedPath = excludePaths.some(path => page.includes(path));
// ページネーションページのチェック(2ページ目以降) const isPaginationPage = page.match(/\/blog\/[2-9]\d*\/?$/);
// どちらの条件にも該当しない場合のみ含める return !isExcludedPath && !isPaginationPage; },})
正規表現パターンの解説
使用している正規表現/\/blog\/[2-9]\d*\/?$/
について詳しく説明します:
パターン | 説明 |
---|---|
\/blog\/ | /blog/ の文字列にマッチ |
[2-9] | 2から9の数字(1ページ目は除外) |
\d* | 0個以上の数字(10、11、100なども対象) |
\/? | スラッシュが0個または1個(末尾スラッシュ対応) |
$ | 文字列の終端 |
ポイント
この正規表現により、/blog/2
、/blog/2/
、/blog/10/
などのページネーションページのみを除外し、/blog/
(1ページ目)や/blog/article-title/
(個別記事)は維持できます。
実装のポイント
1. サイト構造の確認
まず、自分のサイトのURL構造を確認しましょう:
# ビルド後のサイトマップを確認npm run buildcat dist/sitemap-0.xml
2. 段階的な実装
一度にすべての除外条件を追加するのではなく、段階的に実装することをおすすめします:
// ステップ1: ページネーションのみ除外sitemap({ filter: (page) => !page.match(/\/blog\/[2-9]\d*\/?$/),})
// ステップ2: その他の除外条件を追加sitemap({ filter: (page) => { const excludePaths = ['/blog/tag/', '/admin/']; return !excludePaths.some(path => page.includes(path)) && !page.match(/\/blog\/[2-9]\d*\/?$/); },})
3. カスタムプロパティの設定
サイトマップの詳細設定も可能です:
sitemap({ filter: (page) => !page.match(/\/blog\/[2-9]\d*\/?$/), serialize(item) { // ブログ記事の優先度を高く設定 if (/\/blog\/[^\/]+\/$/.test(item.url)) { item.priority = 0.9; item.changefreq = 'weekly'; } return item; },})
注意
changefreq
とpriority
は検索エンジンによって無視される場合があります。設定は参考程度に留めましょう。
4. robots.txtとの連携
より確実にするため、public/robots.txt
でも補完設定を行いましょう:
User-agent: *Allow: /Disallow: /blog/[2-9]*Disallow: /admin/
実装後の検証
サイトマップの確認
実装後は以下の手順で動作を確認します:
# ビルド実行npm run build
# サイトマップファイルの確認ls -la dist/sitemap*
# 内容の確認cat dist/sitemap-0.xml | grep "/"
まとめ
Astroブログのページネーションをサイトマップから除外することで、以下の効果が期待できます:
- SEO効果の向上:重要なページに検索エンジンの注意を集中
- クローラー効率の改善:無駄なリソース消費を削減
- サイトマップの最適化:ファイルサイズの削減と管理の簡素化
実装は@astrojs/sitemap
のfilter
オプションを使用することで簡単に実現できます。正規表現を活用することで、柔軟かつ効率的な除外設定が可能になります。
継続的なSEO対策として、定期的にサイトマップの内容を見直し、新しいページ構造に応じて除外条件を調整することをおすすめします。
出典リスト
公式リソース(Official Resources)
参考サイト(Reference Sites)