前回
Next.jsのチュートリアルをやってみる【認証の追加】はじめに
前回はNextAuth.jsを利用して認証関連の機能を追加いたしました。今回はSEOのためにメタデータを追加する方法について学んでいきます。
メタデータとは?
メタデータはWebページに関する詳細な情報を提供します。基本的にはHTMLの<head>
要素内に埋め込むことでページを訪れたユーザーには見えず裏で機能します。この情報によって検索エンジンやほかのシステムにどのようなページかを伝えることができます。
なぜメタデータが重要なのか?
メタデータはSEOを強化するうえで重要な役割を果たし、検索エンジンやソーシャルメディアプラットフォームにとってアクセスしやすく、理解しやすいものにします。適切にメタデータを追加することで、検索結果でのランキングを向上させるのに役立ちます。
メタデータの種類
メタデータには様々な種類があり、それぞれ独自の目的を果たします。一般的には以下の種類が使用されます。
タイトル
ブラウザのタブに表示されるウェブページのタイトルを担当します。検索エンジンがウェブページの内容を理解するのに役立つため、SEO対策には欠かせないメタデータです。
<title>Page Title</title>
説明
このメタデータは、Webページのコンテンツの概要を示すもので、検索エンジンの検索結果に表示されることが多いです。
<meta name="description" content="A brief description of the page content." />
キーワード
このメタデータには、ウェブページのコンテンツに関連するキーワードが含まれ、検索エンジンがページをインデックスするのに役立ちます。
<meta name="keywords" content="keyword1, keyword2, keyword3" />
オープングラフ
このメタデータはソーシャルメディアプラットフォームでウェブページが共有される際に、タイトル、説明文、プレビュー画像などの情報を提供し、ウェブページの表現方法を向上させます。
<meta property="og:title" content="Title Here" />
<meta property="og:description" content="Description Here" />
<meta property="og:image" content="image_url_here" />
ファビコン
このメタデータはブラウザのアドレスバーやタブに表示されるファビコン(小さなアイコン)をウェブページにリンクします。
<link rel="icon" href="path/to/favicon.ico" />
メタデータの追加
Next.jsにはアプリケーションのメタデータを定義するためのMetadata APIがあります。アプリケーションにメタデータを追加するには、2つの方法があります。
- 設定ベース:静的なメタデータオブジェクト、もしくは動的な
generateMetadata
関数をlayout.js
またはpage.js
ファイルにエクスポートします。 - ファイルベース:Next.jsには、メタデータ用に使用する特別なファイルがいくつかあります。
favicon.ico
,apple-icon.jpg
,icon.jpg
:ファビコンやアイコンに使用opengraph-image.jpg
,twitter-image.jpg
:SNSの画像に採用されます。robots.txt
:検索エンジンのクロールに関する指示。sitemap.xml
:ウェブサイトの構造に関する情報を提供します。
これらのファイルを静的なメタデータとして使用することも、プロジェクト内で動的に生成することもできます。この両方のオプションを使用すると、Next.jsはページに関する<head>
要素を自動的に生成します。
ファビコンとオープングラフ画像
public
フォルダの中を確認するとfavicon.ico
とopengraph-image.jpg
の二種類の画像があることが確認できます。
これらの画像を/app
フォルダのルートに移動しましょう。
すると、Next.jsは自動的にこれらのファイルを識別して、ファビコンとOG画像として使用します。開発ツールなどでアプリケーションの<head>
要素をチェックすることで確認できます。
ImageResponse
コンストラクタを使用すると、動的なOG画像を作成することもできます。
ページのタイトルと説明
layout.js
やpage.js
ファイルからもmetadata
オブジェクトをインクルードして、タイトルや説明文などのページ情報を追加することができます。
ルート・レイアウトで以下のフィールドを持つ新しいmetadata
オブジェクトを作成しましょう。
import { Metadata } from 'next';
export const metadata: Metadata = {
title: 'Acme Dashboard',
description: 'The official Next.js Course Dashboard, built with App Router.',
metadataBase: new URL('https://next-learn-dashboard'),
};
Next.jsは自動的にタイトルとメタデータをアプリケーションに追加します。
特定のページにカスタムタイトルを追加したい場合は、ページ事態にmetadata
オブジェクトを追加することで実現できます。入れ子になったページのメタデータは、親のメタデータを上書きします。
以下のように/dashboard/incoices
ページでタイトルを変更することができます。
import { Metadata } from 'next';
export const metadata: Metadata = {
title: 'Invoices | Acme Dashboard',
};
ですが、この場合すべてのページでAcme Dashboard
の様にアプリのタイトルを繰り返す必要があります。
代わりにmetadata
オブジェクトのtitle.template
フィールドを使用して、ページタイトルのテンプレートを定義することができます。このテンプレートには、ページタイトルの他に、任意の情報を含めることができます。
ルートレイアウトで、テンプレートを含めるためにmetadata
オブジェクトを更新しましょう。
import { Metadata } from 'next';
export const metadata: Metadata = {
title: {
template: '%s | Acme Dashboard',
default: 'Acme Dashboard',
},
description: 'The official Next.js Learn Dashboard built with App Router.',
metadataBase: new URL('https://next-learn-dashboard.vercel.sh'),
};
テンプレート内の%s
は特定のページタイトルに置き換えられます。
これで、/dashboard/invoices
ページにページタイトルのみを追加することができるようになります。以下のように変更してみましょう。
export const metadata: Metadata = {
title: 'Invoices',
};
dashboard/invoices
ページに移動してページタイトルが「Invoices | Acme Dashboard」になっていたら成功です。
練習:メタデータの追加
メタデータの追加方法を学ぶことができたので、他のページのタイトルも変えてみましょう。
/login
page./dashboard/
page./dashboard/customers
page./dashboard/invoices/create
page./dashboard/invoices/[id]/edit
page.
まとめ
- メタデータとはWebページのコンテンツに関する情報のデータ。
- メタデータは
<head>
要素で設定することができる。 - Next.jsでは
layout.js
またはpage.js
でメタデータを追加することができる。 title.template
フィールドの様に使用することで、ページタイトルのテンプレートを定義することができる。(その他の情報も可能)