Cyber SEO:すべての年間プランが50%オフ
設定

当社はプライバシーを重視しており、ウェブサイトの基本機能に必要のない特定のストレージを無効にするオプションを提供しています。カテゴリーをブロックすると、ウェブサイトでの体験に影響が出る可能性があります。詳細はこちら (クッキーポリシー)

すべてのクッキーを受け入れる

Next.js SEO:レンダリング、メタデータ、サイトマップ、上位表示するブログ

Next.js SEOガイド:SSG・SSR・ISRの選び方、メタデータとcanonicalの設定、sitemap.xmlの生成、webhookで更新するブログ、AIクローラーに読まれるページ作り。

公開日:
25/10/2026
-
更新日:
25/10/2026
Sorankによる Next.js SEO ガイドの表紙。サーバーでレンダリングされたページ、メタデータ、サイトマップ、ブログのルートを示す

ツール

Sorank創業者 Thibault Besson-Magdelain

著者について

Thibault Besson-Magdelain

Sorank創業者。SEO歴7年以上、GEOに情熱を注いでいます。
このページの内容

要点

Next.jsは、クローラーに空の枠ではなく完全なHTMLを返すため、SEOに最も適したReactフレームワークのひとつです。上位表示を狙うなら、コンテンツページを事前レンダリング(静的生成またはISR)し、Metadata APIでタイトル・説明文・canonicalを定義し、appフォルダからsitemap.xmlとrobots.txtを生成し、本物のリンクと正しいステータスコードを使い、主要なコンテンツをブラウザでしか動かないコードの外に置いてください。多くのAIクローラーはJavaScriptを実行しないからです。

さらに詳しく知るには、こちらに質問

クイック診断

SEOはあなたに向いている?どう始めるべき?

4つの簡単な質問で、Googleから集客できるかがわかります。

質問 1 / 425%
あなたの商品はGoogleで検索されていますか?

Next.js SEOの本質は、ルートごとに正しく選ぶことです。何をサーバーでレンダリングし、何をキャッシュし、どのスクリプトが動く前に何をHTMLに含めるか。GoogleはJavaScript SEOの基本で、JavaScriptアプリをクロール、レンダリング、インデックス登録の3段階で処理すると説明し、サーバーサイドレンダリングや事前レンダリングは「今でも優れた方法」だと述べています。Next.jsはこれを標準で行います。本ガイドはApp Router(Next.js 13以降)を対象に、旧来のPages Routerについても補足します。

Next.jsはSEOに強いのか?

はい。クライアントサイドレンダリングの一般的なReactアプリは、ほぼ空のHTMLを送り、ブラウザでページを組み立てます。検索エンジンはそれをレンダリングする必要があり、多くのボットはまったくレンダリングしません。Next.jsはReactをサーバーでレンダリングするため、HTMLレスポンスの時点で見出し、本文、リンク、メタデータが含まれています。この違いがインデックス登録にどう影響するかは、JavaScript SEOのガイドで解説しています。

App Routerでは、コンポーネントはデフォルトでServer Componentsです。'use client'を付けたコンポーネントも、サーバーでHTMLとして事前レンダリングされます。弱点はデータです。useEffectの中や、クリック後に初めて読み込む内容は、初期HTMLに含まれません。コンテンツはServer Componentsで取得し、クライアントコンポーネントはインタラクションだけに使いましょう。

SSG、SSR、ISR、CSR:どのレンダリング方式を選ぶべきか?

Next.jsではルートごとに方式を組み合わせられます。選択は鮮度、速度、そしてクローラーが受け取る内容に影響します。

方式HTMLが作られるタイミングSEOの評価向いている用途
静的生成(SSG)ビルド時最良:完全なHTMLで非常に高速ランディングページ、ドキュメント、定番記事
インクリメンタル静的再生成(ISR)ビルド時、その後バックグラウンドまたはオンデマンドで更新大規模・更新の多いサイトに最良ブログ、商品カタログ、CMSのページ
サーバーサイドレンダリング(SSR)リクエストごと良好:完全なHTML、サーバー速度に依存パーソナライズやリアルタイムのページ
クライアントサイドレンダリング(CSR)ブラウザ内弱い:多くのボットに内容が見えないログイン後の管理画面

Next.jsのISRドキュメントは、その利点として「サイト全体を再ビルドせずに」静的コンテンツを更新できること、大量のページを長いビルド時間なしで扱えることを挙げています。export const revalidate = 3600 を指定したルートは、最大で1時間に1回再生成されます。正確に制御したい場合は、コンテンツ変更時にrevalidatePathまたはrevalidateTagを呼び出します。ISRは静的エクスポート(output: 'export')では動作しません。クライアントレンダリングのままにせざるを得ないアプリについては、シングルページアプリケーションのSEOのガイドで対処法を紹介しています。

ヒント

確認すべきはブラウザの表示ではなく、ボットが受け取る内容です。URLにcurlを実行するか、view-sourceを開いて記事中の一文を検索してください。生のHTMLに見つからなければ、その文はJavaScriptに依存しています。

Metadata APIでタイトル、説明文、canonicalをどう設定するか?

App RouterではMetadata APIがnext/headに代わります。Next.jsのメタデータに関するドキュメントによると、layoutやpageから静的なmetadataオブジェクトを、値がデータに依存する場合はgenerateMetadata関数をエクスポートすれば、Next.jsがheadタグを生成します。どちらもServer Componentsでのみ使えます。

export async function generateMetadata({ params }) {
  const { slug } = await params
  const post = await getPost(slug)
  return {
    title: post.title,
    description: post.excerpt,
    alternates: { canonical: `/blog/${slug}` },
    openGraph: { images: [post.cover] },
  }
}

ほとんどの問題を防ぐ5つのルール:

  • metadataBaseを設定する:ルートlayoutに本番ドメインを指定し、相対パスのcanonicalやOpen GraphのURLを絶対URLにします。
  • タイトルテンプレートを使う:ルートlayoutで '%s | ブランド名' のように設定し、各ページに固有のタイトルとブランド名を1回だけ付けます。
  • インデックス対象の全ページに自己参照のcanonicalを付ける:alternates.canonicalで指定すると、URLパラメータや末尾スラッシュによる重複を防げます。canonicalタグの用語解説にルールをまとめています。
  • ページごとに説明文を書く:generateMetadataの中でコンテンツから生成し、サイト共通のデフォルト値は使いません。
  • Open Graph画像を追加する:ルートのフォルダにopengraph-imageファイルを置き、Open Graphプレビューツールで結果を確認します。

動的ページでは、Next.jsは描画を速めるため、最初のバイトの後にメタデータをストリーミングします。ドキュメントによると、headにメタデータがあることを前提とするボット(user agentで判定され、例としてBingbot、Twitterbot、Slackbotが挙げられています)にはストリーミングが無効になり、htmlLimitedBotsオプションで対象リストを変更できます。重視するクローラーが含まれていなければ追加してください。Pages Routerでの同等の仕組みはnext/headのHeadコンポーネントで、重複タグを避けるためにkey属性を付けます。

Next.jsでsitemap.xmlとrobots.txtをどう生成するか?

どちらもappフォルダの特殊ファイルです。URLの配列を返す関数をエクスポートするsitemap.tsは/sitemap.xmlに、robots.tsは/robots.txtになります。サイトマップのリファレンスによると、このファイルはデフォルトでキャッシュされ、Googleの上限はサイトマップ1つにつき50,000 URLです。それを超える場合はgenerateSitemapsで複数ファイルに分割します。

import type { MetadataRoute } from 'next'

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const posts = await getPosts()
  return posts.map((p) => ({
    url: `https://example.com/blog/${p.slug}`,
    lastModified: p.updatedAt,
  }))
}

含めるのは、canonicalでインデックス可能かつ200を返すURLだけにし、lastModifiedには実際の更新日を入れます。多言語サイト向けにalternates.languagesも指定できます。robots.tsではサイトマップの場所を示し、どのAIボットにクロールを許可するかを決めます。対象のボットはAIクローラー向けrobots.txtの記事で一覧にしています。形式の詳細はXMLサイトマップの用語解説をご覧ください。

Next.jsサイトのSEOを最も壊しやすい技術的な落とし穴は?

問題起きること対策
onClickとrouter.pushによる遷移Googleはhref付きのa要素しかたどらない本物のリンクを出力するnext/linkのLinkコンポーネントを使う
存在しないコンテンツを200で返すSearch Consoleで「ソフト404」notFound()を呼び、ルートが404を返すようにする
移転したページに一時的なリダイレクトredirect()は307を返すpermanentRedirect()かnext.configのpermanent: true(308)を使う
末尾スラッシュの混在同じページに2つのURLtrailingSlashオプションでどちらかに統一し、canonicalも揃える
プレビューやステージング環境のインデックスGoogleにサイトの複製が載る本番以外のドメインでnoindexを返す
クリックで読み込むタブ内のコンテンツHTMLに本文がないすべてサーバーでレンダリングし、必要ならCSSで隠す

これらはすべてクロール可能性を下げます。クローラーはリンクから各URLを発見でき、正しいステータスコードを受け取れなければなりません。

Next.jsで構造化データをどう追加するか?

Next.jsのドキュメントは、JSON-LDをtypeがapplication/ld+jsonのscriptタグとしてpageやlayoutコンポーネント内で直接レンダリングし、ページと同じデータから作り、シリアライズしたJSON内の < をエスケープしてインジェクションを防ぐよう推奨しています。サーバーでレンダリングされるので、GoogleもAIクローラーも生のHTMLで読み取れます。記事にはArticle(またはBlogPosting)、ルートlayoutにはOrganization、深い階層のページにはBreadcrumbList、ECにはProductを使います。schemaジェネレーターで有効なひな形を作り、Googleのリッチリザルトテストでページを検証しましょう。

Core Web Vitalsを満たす速度のNext.jsサイトにするには?

Next.jsには、Core Web Vitalsが悪化するよくある原因に対処するコンポーネントが用意されています。

  • next/image:画像をリサイズし、最新フォーマットで配信し、デフォルトで遅延読み込みし、サイズ指定を必須にしてレイアウトのずれを防ぎます。ファーストビューのメイン画像は優先指定して遅延読み込みを避けます(多くの場合、Largest Contentful Paintの要素です)。
  • next/font:フォントを自社ドメインでホストし、フォントの遅い差し替えによるずれを防ぎます。
  • next/script:外部スクリプトを戦略(afterInteractive、lazyOnload)に沿って読み込み、ページをブロックしません。
  • クライアントのJavaScriptを減らす:'use client'の境界ごとにダウンロードとハイドレーションが必要なコードが増え、モバイルのInteraction to Next Paintを悪化させます。

ラボのスコアだけでなく実ユーザーのデータを測りましょう。両方の読み方はPageSpeed Insightsのガイドで解説しています。

上位表示するNext.jsブログをどう運用するか?

Next.jsブログには主に3つの形があります。リポジトリ内のMDXやMarkdownファイル(シンプルですが記事ごとにコミットとデプロイが必要)、Server Componentsから取得するヘッドレスCMS(Sanity、Contentful、Strapi、Payload)、そして外部ツールから記事を受け取る公開用webhookです。どの場合もSEOの型は同じで、generateStaticParams、generateMetadata、ISRを備えた動的ルートapp/blog/[slug]、同じデータソースから作るサイトマップ、全記事にリンクする一覧ページで構成します。

webhookを使えば、公開作業をデプロイの流れから切り離せます。Route Handlerが記事を受け取って保存し、関係するページを再検証します。

// app/api/publish/route.ts
import { revalidatePath } from 'next/cache'

export async function POST(request) {
  if (request.headers.get('authorization') !== `Bearer ${process.env.PUBLISH_SECRET}`) {
    return new Response('Unauthorized', { status: 401 })
  }
  const article = await request.json()
  await savePost(article)
  revalidatePath('/blog')
  revalidatePath(`/blog/${article.slug}`)
  return Response.json({ ok: true })
}

注意

エンドポイントはシークレットで保護し、公開URLのパスを正確に再検証してください。ISRのドキュメントは、複数のサーバーインスタンスでデフォルトのファイルキャッシュを使う場合、オンデマンド再検証はリクエストを受けたインスタンスしかクリアしないと警告しています。共有のキャッシュハンドラーを使いましょう。

Next.js SEOはAIアシスタントからの引用にどう役立つか?

サーバーレンダリングはGEO(生成エンジン最適化)の第一条件です。Vercelが2024年12月に公開した分析The rise of the AI crawlerは、「主要なAIクローラーはいずれも現在JavaScriptをレンダリングしていない」と結論づけ、GPTBot、ChatGPT-User、OAI-SearchBot、ClaudeBot、PerplexityBotを挙げ、同社ネットワーク上で1か月にGPTBotが5億6,900万回、Claudeが3億7,000万回のリクエストを行ったと集計しています。本文、見出し、JSON-LDを事前レンダリングしたNext.jsのページはそのすべてに読まれますが、クライアントレンダリングのページは読まれません。

第二の条件は、引用に値するコンテンツです。セクションごとにひとつの質問に答え、出典、数値、明確な定義を備え、定期的に公開される記事です。この部分を自動化するのが、私たちの製品Sorankです。SorankはautopilotでSEOとGEOを進めるソフトウェアで、キーワードを見つけ、ブログ記事ジェネレーターが出典、内部リンク、画像付きの記事を月20本、60本、または120本作成します。Next.jsサイトとは、導入ページで説明しているカスタムwebhookで連携します。あなたのRoute Handlerが各記事を受け取って保存し、ブログを再検証します。さらにAIでの言及トラッキングが、ChatGPT、Claude、Geminiがあなたのブランドを引用しているかを毎週確認します。

対象キーワードからSEO記事を作成するSorankのブログ記事ジェネレーターの入力画面

まとめると、見つけてほしいページはすべて事前レンダリングし、メタデータはサーバーで定義し、サイトマップはコンテンツと同じデータソースから生成することです。Next.jsは道具を提供し、順位やAIでの引用はそれを使って何を公開するかで決まります。Next.jsブログに記事を継続的に供給するなら、Sorankの料金プランをご覧ください。月額49ドルからで、3日間の無料トライアルがあります。

よくある質問

SEOではNext.jsのほうがReactより優れていますか?

Next.jsはReactの上に構築されているため、比較の対象はレンダリング方式です。標準的なReactのシングルページアプリはブラウザでレンダリングされ、ほぼ空のHTMLを送りますが、Next.jsはサーバーまたはビルド時にページを事前レンダリングします。JavaScriptを実行しないAIボットを含むクローラーも、Next.jsなら追加設定なしで完全なコンテンツを受け取れます。

Next.jsはサイトマップを自動で生成しますか?

自動ではありません。App Routerでは、URLを返すsitemap.tsファイルをappフォルダに追加すると、Next.jsがそれを/sitemap.xmlで配信します。大規模サイトでは、Googleがサイトマップ1つにつき最大50,000 URLまで受け付けるため、generateSitemapsでリストを複数ファイルに分割します。

SEOにはApp RouterとPages Routerのどちらを使うべきですか?

どちらもHTMLを事前レンダリングするので、どちらでも上位表示は可能です。新規プロジェクトにはApp Routerが推奨です。Server ComponentsでクライアントのJavaScriptが減り、Metadata API、sitemap.ts、robots.tsがSEO関連ファイルを標準で扱えます。既存のPages Routerのサイトでは、SEOだけを理由に移行する価値はあまりありません。

成長を目指す企業のためのブログ

Sorankの無料SEOツール

無料ツールをすべて見る

先行導入企業のご紹介

野心的な創業者たちからの声

オーガニック成長ソフトウェア

8 か月で顧客 0 人から 5000 人

Thibault BMsorank.com
オーガニック成長レジャーと航空

4か月でクリック数0から1104へ

Dominiqueflight-sensations-idf.com
オーガニック成長EC

5 か月で訪問者 0 人から 1 万人

Celio Fabianomonrobotlavevitre.fr
オーガニック成長音楽ソフトウェア

4か月でクリック数30倍

Valentin Cordiertiger-sounds.com
オーガニック成長健康・ウェルネス

4か月でクリック数30倍

Rodrigue Bretonalthevia.com