Astroブログのページネーションをサイトマップから除外する方法

2025/6/1

このサイトはアフィリエイト広告を利用しています。

目次

はじめに

Astroでブログサイトを構築する際、サイトマップの最適化は重要なSEO対策の一つです。しかし、デフォルト設定では/blog/2//blog/3/などのページネーションページもサイトマップに含まれてしまい、検索エンジンにとって価値の低いページが混在する問題があります。

本記事では、Astroの@astrojs/sitemapインテグレーションを使って、ページネーションページを効率的にサイトマップから除外する方法を詳しく解説します。

サイトマップ除外の必要性

SEO上の問題点

ページネーションページがサイトマップに含まれることで、以下の問題が発生する可能性があります:

📢 重要

サイトマップは検索エンジンに対して「この URL が重要である」というシグナルを送る役割を持ちます。そのため、価値の低いページは除外することが推奨されています。

除外対象となるページ

一般的に以下のページをサイトマップから除外することを検討しましょう:

基本的な実装方法

パッケージのインストール

まず、Astroの公式サイトマップインテグレーションをインストールします:

Terminal window
npx astro add sitemap

または手動でインストール:

Terminal window
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構造を確認しましょう:

Terminal window
# ビルド後のサイトマップを確認
npm run build
cat 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;
},
})

💡 注意

changefreqpriorityは検索エンジンによって無視される場合があります。設定は参考程度に留めましょう。

4. robots.txtとの連携

より確実にするため、public/robots.txtでも補完設定を行いましょう:

User-agent: *
Allow: /
Disallow: /blog/[2-9]*
Disallow: /admin/

実装後の検証

サイトマップの確認

実装後は以下の手順で動作を確認します:

Terminal window
# ビルド実行
npm run build
# サイトマップファイルの確認
ls -la dist/sitemap*
# 内容の確認
cat dist/sitemap-0.xml | grep "/"

まとめ

Astroブログのページネーションをサイトマップから除外することで、以下の効果が期待できます:

実装は@astrojs/sitemapfilterオプションを使用することで簡単に実現できます。正規表現を活用することで、柔軟かつ効率的な除外設定が可能になります。

継続的なSEO対策として、定期的にサイトマップの内容を見直し、新しいページ構造に応じて除外条件を調整することをおすすめします。


出典リスト

公式リソース(Official Resources)

参考サイト(Reference Sites)

この記事をシェアする

関連記事