Next.jsでパンくずリストを作る (リッチリザルト対応)
2024/10/10このページはPRを含みます
Next.jsでパンくずリストを作る方法を紹介。今回はcategoryコンポーネントを流用してパンくずリストを作った。さらに深い階層の場合は各自で読み替えてほしい。今回もmicroCMSブログのデザインに寄せる形で作成した。追加でリッチリザルトにも対応させている。
完成系イメージ
Breadcrumbコンポーネントを作成する
まずはBreadcrumbコンポーネントを作成していく。表示するのは「記事一覧(TOP)」と「カテゴリ」を表現して、パンくずリストにする。そのためcategoryの情報をインポートする。Breadcrumbディレクトリ配下にindex.tsxとindex.module.cssを作成して、以下のようにした。
import type { Category } from "@/app/_libs/microcms";
import styles from "./index.module.css";
import Link from "next/link";
type Props = {
category: Category;
};
export default function Breadcrumb({ category }: Props) {
const breadcrumbList = [
{
"@type": "ListItem",
position: 1,
name: "記事一覧",
item: "https://monaka496.com/",
},
{
"@type": "ListItem",
position: 2,
name: category.name,
item: `https://monaka496.com/blog/category/${category.id}`,
},
];
return (
<>
{/* パンくずリスト表示 */}
<ul className={styles.breadcrumb}>
<li className={styles.breadcrumbitem}>
<Link href="/" className={styles.breadcrumblink}>
記事一覧
</Link>
</li>
<li className={styles.breadcrumbitem}>
<Link
href={`/blog/category/${category.id}`}
className={styles.breadcrumblink}
>
{category.name}
</Link>
</li>
</ul>
{/* 構造化データを埋め込む */}
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify({
"@context": "https://schema.org",
"@type": "BreadcrumbList",
itemListElement: breadcrumbList,
}),
}}
/>
</>
);
}
.breadcrumb {
display: flex;
flex-wrap: wrap;
padding-top: 10px;
}
.breadcrumbitem {
display: flex;
flex-wrap: wrap;
}
.breadcrumbitem:not(:last-child)::after {
content: ">";
margin: 0 10px;
}
.breadcrumblink {
color: #331cbf;
}
articleコンポーネントで呼び出す
記事を表示しているarticleコンポーネントで呼び出しをする。追加したのは以下の部分
import Breadcrumb from "../Breadcrumb";
(中略)
<Breadcrumb category={data.category} />
リッチリザルトのチェック
リッチリザルトテストというものがある。デプロイ後のページのURLを入力して、チェックOKになっていればリッチリザルトにも対応できている。
まとめ
今回はパンくずリストの機能追加と合わせて、リッチリザルトにも対応させてみた。microCMSブログのデザインに寄せつつ、リッチリザルト部分をアレンジしてみたがうまく行ってよかった。今回の機能追加で、リッチリザルトの対応方法もわかったので、ほかに追加できるところがないかも検討したい
Next.js+ヘッドレスCMSではじめる! かんたんモダンWebサイト制作入門 高速で、安全で、運用しやすいサイトのつくりかた