1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Next.js (App Router) で差をつける!モダンSEO対策完全ガイド

1
Posted at

Next.jsはデフォルトでSEOに強いフレームワークですが、App Routerの登場により、その実装方法は大きく進化しました。本記事では、フロントエンドエンジニアが最低限押さえておくべきSEOの実装ポイントを5つのステップで解説します。


1. Metadata API を使い倒す

App Routerでは、metadata オブジェクトをエクスポートするだけで、<head> 内のタグを安全かつ動的に管理できます。

静的なメタデータ

page.tsxlayout.tsx で定義します。

import type { Metadata } from 'next'

export const metadata: Metadata = {
  title: 'サービス名 | 最高の体験を',
  description: 'Next.jsで構築された高パフォーマンスなWebアプリです。',
  keywords: ['Next.js', 'React', 'SEO'],
  openGraph: {
    title: 'サービス名',
    description: 'SNSシェア時の説明文',
    images: [{ url: 'https://example.com/og-image.png' }],
  },
}

動的なメタデータ

ブログ記事など、IDに基づいてタイトルを変えたい場合は generateMetadata 関数を使用します。

export async function generateMetadata({ params }): Promise<Metadata> {
  const id = params.id
  const product = await getProduct(id) // データ取得

  return {
    title: `${product.name} | サービス名`,
    description: product.description,
  }
}

2. Core Web Vitals の最適化

Googleの評価指標(LCP, CLS, FID)をハイスコアに保つための「Next.js三種の神器」を活用します。

  • next/image
    画像の最適化(WebP変換、リサイズ、Lazy Load)。priority 属性を使ってLCPを改善しましょう。

  • next/font
    Google Fontsなどをセルフホストし、レイアウトシフト(CLS)をゼロにします。

  • next/script
    外部JS(分析タグなど)の読み込みタイミングを strategy="afterInteractive" などで制御し、メインスレッドをブロックさせません。


3. sitemap.ts と robots.ts の動的生成

手動でXMLを書く必要はありません。App Routerならコードで生成できます。

// app/sitemap.ts
import { MetadataRoute } from 'next'

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const posts = await getPosts() // 全記事の取得など
  const postUrls = posts.map((post) => ({
    url: `https://example.com/blog/${post.slug}`,
    lastModified: new Date(),
  }))

  return [
    { url: 'https://example.com', lastModified: new Date() },
    ...postUrls,
  ]
}

4. 構造化データ (JSON-LD) の注入

検索結果をリッチにするために、script タグを使って構造化データを流し込みます。

export default function Page() {
  const jsonLd = {
    '@context': 'https://schema.org',
    '@type': 'Product',
    name: '製品名',
    image: '...',
    description: '...',
  }

  return (
    <section>
      <script
        type="application/ld+json"
        dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
      />
      <h1>製品ページ</h1>
    </section>
  )
}

5. レンダリング戦略の使い分け

SEOにおいて「表示速度」は正義です。

  • SSG / ISR
    可能な限りこれらを選択し、エッジサーバーから静的ファイルを配信します。

  • Streaming with Suspense
    重いデータ取得がある場合でも、ヘッダーなどの骨組みを先に返すことで、ユーザー(とクローラー)への応答速度を上げます。


最後に

Next.jsでのSEO対策は、単なる「タグの設定」ではなく「UXの最適化」そのものです。

これらを実装した後は、必ず Lighthouse や Search Console で実際の数値を計測し、PDCAを回していきましょう。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?