【Next.js×SSR】ReactでSEO最強のブログを作る完全ガイド|初心者でも簡単構築&コード付き解説

プログラミング

「Reactでブログを作ってみたけど、検索に強くない」
「SSR(サーバーサイドレンダリング)って聞くけど難しそう」
と感じている方も多いのではないでしょうか?

実は、Next.jsを使えば、ReactのままSEOに強いブログを簡単に構築できます。
この記事では、ページ表示の高速化・URL構造の最適化・SEOに有利なSSRの実装方法を、誰でもわかるよう丁寧に解説します。

完成形コードも掲載しており、初心者でも今日から本格ブログが始められる内容になっています。

SSR対応ブログを作る理由

なぜSSRがブログに必要なのか?

結論:SSRは検索エンジンに強く、表示速度も速くなるからです。

通常のReactアプリでは、初回表示時にJavaScriptが動くまで中身が見えません。
これは検索エンジンにとって不利で、SEO評価が落ちる原因となります。

しかしSSR(サーバーサイドレンダリング)を使えば、あらかじめサーバーでページを生成してから表示されます。

この利点は以下の通りです:

  • GoogleやYahooに正確に情報が届く
  • 表示が早くなることで離脱率が減る
  • SNSシェアでも正しい情報が表示されやすい

経済産業省も「情報の発信・認知度向上にはWeb検索最適化が欠かせない」と公表しています
(https://www.meti.go.jp/policy/mono_info_service/joho/marketing.html)。


Next.jsとReactの違いとは?

Next.jsを使うメリット

結論:Next.jsはReactの進化系であり、SSRやルーティングが標準で使えます。

Reactはビュー(画面)を作るためのライブラリですが、
Next.jsはそのReactをベースに以下の便利機能を最初から備えています

  • SSR(サーバーサイドレンダリング)
  • ファイルベースのルーティング
  • ページごとのメタ情報(SEOタグ)設定
  • 静的生成(SSG)との併用
  • APIルートの作成機能

インストールは以下で行えます。

1
2
3
npx create-next-app@latest my-blog
cd my-blog
npm run dev

ページと記事の構造を作る

投稿ページのフォルダ構成とルート設定

結論:pagesディレクトリにファイルを置けば、自動的にルーティングされます。

Next.jsではpages/index.jsがトップページ、pages/posts/[id].jsが記事ページです。

以下のような構造にします:

1
2
3
4
pages/
├── index.js
└── posts/
    └── [id].js

記事一覧を表示するindex.jsの例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import Link from 'next/link';
const posts = [
  { id: 'first', title: '初めての投稿' },
  { id: 'second', title: '二つ目の記事' },
];
export default function Home() {
  return (
    <div>
      <h1>ブログ一覧</h1>
      <ul>
        {posts.map((post) => (
          <li key={post.id}>
            <Link href={`/posts/${post.id}`}>{post.title}</Link>
          </li>
        ))}
      </ul>
    </div>
  );
}

getServerSidePropsでSSRを実装

サーバー側でデータを取得して表示

結論:getServerSideProps関数を使えばSSRが簡単に使えます。

1
2
3
4
5
6
7
8
9
export async function getServerSideProps(context) {
  const id = context.params.id;
  const data = await fetch(`https://example.com/api/posts/${id}`).then(res => res.json());
  return {
    props: {
      post: data,
    },
  };
}

記事詳細ページ([id].js)にこの関数を入れることで、ページが表示される前にサーバーで情報が取得されます。

これはReactだけでは実現できない、Next.jsの大きな特徴です。


SEO設定のポイント

ヘッドタグとメタ情報の設定

結論:next/headを使えばSEOタグの個別設定が簡単にできます。

1
2
3
4
5
6
7
8
9
10
11
12
13
import Head from 'next/head';
export default function Post({ post }) {
  return (
    <>
      <Head>
        <title>{post.title}|My Blog</title>
        <meta name="description" content={post.summary} />
      </Head>
      <h1>{post.title}</h1>
      <p>{post.content}</p>
    </>
  );
}

検索エンジンだけでなく、SNSのシェア時のカード表示にも関わるため、
title・description・OGPタグは必ず設定するようにしましょう。


完成形コード一覧

pages/index.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import Link from 'next/link';
export default function Home() {
  const posts = [
    { id: 'first', title: '初めての投稿' },
    { id: 'second', title: '二つ目の記事' },
  ];
  return (
    <div>
      <h1>ブログ一覧</h1>
      <ul>
        {posts.map((post) => (
          <li key={post.id}>
            <Link href={`/posts/${post.id}`}>{post.title}</Link>
          </li>
        ))}
      </ul>
    </div>
  );
}

pages/posts/[id].js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import Head from 'next/head';
export default function Post({ post }) {
  return (
    <>
      <Head>
        <title>{post.title}</title>
        <meta name="description" content={post.summary} />
      </Head>
      <h1>{post.title}</h1>
      <p>{post.content}</p>
    </>
  );
}
export async function getServerSideProps(context) {
  const { id } = context.params;
  const res = await fetch(`https://example.com/api/posts/${id}`);
  const data = await res.json();
  return {
    props: {
      post: data,
    },
  };
}

まとめ

この記事では、ReactとNext.jsを使ってSSR対応のSEOに強いブログアプリを作成しました。

重要なポイントは以下です:

  • Next.jsを使えばReactでもSSRが可能
  • getServerSidePropsを使って事前にデータを取得できる
  • next/headページごとのSEO対策が可能

検索に強いブログを目指すなら、React単体ではなくNext.jsを使うことが最適解です。
今日からあなたも、SSR対応のブログ開発をはじめてみてください。


関連リンク:

タイトルとURLをコピーしました