Next.js アプリのサイトマップを Vercel で自動生成!SEO対策もバッチリ【初心者向け】

投稿日:
更新日:

1. サイトマップって何?なぜ必要なの?

サイトマップとは、Webサイトの全ページのURLをリスト化したものです。検索エンジンのクローラー(Webサイトを巡回するロボット)は、このサイトマップを参考にWebサイトを効率的にクロールし、インデックス(検索エンジンのデータベースに登録)します。

サイトマップの重要性

  • SEO (Search Engine Optimization: 検索エンジン最適化) の向上: 検索エンジンがWebサイトの構造を理解しやすくなり、検索結果で上位表示されやすくなります。
  • クロールの効率化: 特に大規模なWebサイトや、内部リンクが少ないWebサイトでは、サイトマップがあることでクローラーがすべてのページを見つけやすくなります。
  • 新規ページの迅速なインデックス: 新しく作成したページをサイトマップに追加することで、検索エンジンに素早く認識してもらうことができます。

2. Next.js でサイトマップを生成する方法

Next.js でサイトマップを生成する方法はいくつかありますが、ここでは Vercel の Serverless Functions (サーバーレス関数) を利用して自動生成する方法を紹介します。

2.1. 必要なパッケージのインストール

まず、必要なパッケージをインストールします。ターミナルで以下のコマンドを実行してください。

npm install next-sitemap gray-matter glob
# next-sitemap: サイトマップを生成するためのライブラリ
# gray-matter: Markdownファイルのフロントマターを解析するためのライブラリ
# glob: ファイルパスのパターンマッチングを行うためのライブラリ

2.2. サイトマップ生成スクリプトの作成

次に、サイトマップを生成するスクリプトを作成します。scripts ディレクトリを作成し、その中に generate-sitemap.js というファイルを作成してください。

// scripts/generate-sitemap.js
const fs = require('fs');
const globby = require('globby');
const matter = require('gray-matter');

async function generateSitemap() {
  const baseUrl = 'https://your-domain.com'; // あなたのWebサイトのURLに置き換えてください
  const pages = await globby([
    'pages/**/*{.js,.mdx}', // pagesディレクトリ以下の.jsと.mdxファイルを対象にする
    '!pages/_*.js', // _app.jsや_document.jsなどのファイルを対象外にする
    '!pages/api', // apiディレクトリを対象外にする
  ]);

  const sitemap = `<?xml version="1.0" encoding="UTF-8"?>
    <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
      ${pages
        .map((page) => {
          const path = page
            .replace('pages', '')
            .replace('.js', '')
            .replace('.mdx', '')
            .replace('/index', '');
          const route = path === '/index' ? '' : path;
          return `
            <url>
              <loc>${baseUrl}${route}</loc>
            </url>
          `;
        })
        .join('')}
    </urlset>
  `;

  fs.writeFileSync('public/sitemap.xml', sitemap); // publicディレクトリにsitemap.xmlを生成
}

generateSitemap();

2.3. Vercel の Serverless Function の設定

api ディレクトリに sitemap.js というファイルを作成します。

// pages/api/sitemap.js
import { SitemapStream, streamToPromise } from 'sitemap';
import { Readable } from 'stream';
import globby from 'globby';
import matter from 'gray-matter';

export default async function handler(req, res) {
  try {
    const baseUrl = 'https://your-domain.com'; // あなたのWebサイトのURLに置き換えてください

    const pages = await globby([
      'pages/**/*{.js,.mdx}',
      '!pages/_*.js',
      '!pages/api',
    ]);

    const links = pages.map((page) => {
      const path = page
        .replace('pages', '')
        .replace('.js', '')
        .replace('.mdx', '')
        .replace('/index', '');
      const route = path === '/index' ? '' : path;
      return { url: `${route}`, changefreq: 'daily', priority: 0.7 };
    });

    // ストリームを作成
    const stream = new SitemapStream({ hostname: baseUrl });

    // URLを追加
    links.forEach((link) => stream.write(link));

    // ストリームを終了
    stream.end();

    // ストリームをPromiseに変換
    const sitemap = await streamToPromise(stream).then((data) =>
      data.toString()
    );

    // レスポンスを設定
    res.writeHead(200, {
      'Content-Type': 'application/xml',
    });
    res.end(sitemap);
  } catch (e) {
    console.log(e);
    res.status(500).end();
  }
}

2.4. Vercel デプロイ時にサイトマップを生成する設定

vercel.json ファイルに、デプロイ時にサイトマップを生成する設定を追加します。

{
  "version": 2,
  "builds": [
    {
      "src": "pages/api/sitemap.js",
      "use": "@vercel/node"
    }
  ],
  "routes": [
    {
      "src": "/sitemap.xml",
      "dest": "/api/sitemap"
    }
  ]
}

2.5. Vercel にデプロイ

これで設定は完了です。Vercel にデプロイすると、自動的にサイトマップが生成され、https://your-domain.com/sitemap.xml でアクセスできるようになります。

3. サイトマップの確認と送信

生成されたサイトマップが正しいことを確認しましょう。ブラウザで https://your-domain.com/sitemap.xml にアクセスし、XML形式でサイトマップが表示されることを確認してください。

次に、Google Search Console (グーグル サーチコンソール) にサイトマップを送信します。Google Search Console にログインし、Webサイトを登録後、「サイトマップ」の項目からサイトマップのURL (https://your-domain.com/sitemap.xml) を送信してください。

4. まとめ

この記事では、Next.js アプリのサイトマップを Vercel で自動生成する方法を解説しました。

  • サイトマップは SEO 対策に非常に重要
  • Vercel の Serverless Functions を利用することで、サイトマップを自動生成できる
  • 生成されたサイトマップは Google Search Console に送信する

サイトマップを正しく設定することで、あなたのWebサイトがより多くの人に届くようになります。ぜひ試してみてください!

次のステップ

  • Google Search Console でWebサイトのパフォーマンスを分析する
  • robots.txt ファイルを設定して、クローラーのアクセスを制御する
  • Webサイトのコンテンツを充実させて、SEO をさらに強化する

関連リソース