パンくずリストの構造化データは、書くプロパティが少ないので簡単そうに見えます。ところが実際にやってみると、「どこから書き始めるのか」「どこまで書くのか」で手が止まります。

そういうところで迷ったまま、この記事にたどり着いた方が多いのではないかと思います。しかもこの構造化データは、書いた瞬間よりも書いたあとのほうが崩れます。カテゴリの名前が変わるたび、階層が増えるたびに、画面とコードが少しずつ食い違っていくためです。

この記事は、BreadcrumbListをこれから書く方に向けて書きました。必須の項目とコピペ用のテンプレート、省略できる例外、そして公開後に崩れる場所まで、図解と会話をはさみながら進めます。

こんなふうに調べていませんか

  • 「BreadcrumbList schema 書き方」で検索して、そのままコピペできるテンプレートを探している
  • パンくずのどこまでをコードに書くのか、判断がつかない
  • カテゴリ名を変えたあと、構造化データも直すべきか分からない

この記事を読み終えたときに手に入るもの

  • position・name・itemの役割を、自分の言葉で説明できるようになります
  • 自社の階層に置き換えるだけで試せるJSON-LDが、手元に残ります
  • 公開後にずれていく場所と、その防ぎ方が分かります

結論30秒でわかる、この記事の結論

  • BreadcrumbListとは、そのページがサイトのどこにあるかを、機械に伝える構造化データです。
  • 各段に書くのはposition(順番)・name(表示名)・item(URL)。最後の段だけitemを省けます。
  • Google公式は、ListItemを最低2つ含めることを条件として明記しています。
パンくずの実装で決めるのは、この3つです書くより、書いたあとを守るほうが大変ですパンくずの実装で決めるのは、この3つですまず1段ぶんの中身順番・表示名・行き先で1組つぎに省けるのは末尾だけ途中でやると成り立ちませんそのあと画面と合わせ続ける崩れるのは公開したあとです鈴木さん書くより、書いたあとを守るほうが大変です
パンくずの実装で決めるのは、この3つです — 書くより、書いたあとを守るほうが大変です

この記事では、ある会社のマーケティング部の2人と、専門家の会話をはさみながら進めます。あなたに近い立場の人の質問から読んでいただいて構いません。

  • 若葉さん(Web担当2年目)— 「そもそも、それって何ですか?」を聞く役
  • 高梨課長(マーケ課長)— 「誰が、どれくらいの手間でやるんですか?」を聞く役
  • 鈴木さん(AIO/SEOの専門家・本誌監修)— 答える役

01そもそもBreadcrumbList schemaの書き方は、AI対策として何のためにあるんですか?

若葉さん
若葉さんの発言

あの、パンくずって画面に出ていますよね。それとは別に、コードにも書かないといけないんでしょうか。

鈴木さん
鈴木さんの発言

いい質問です。画面のパンくずは人が見るもの、構造化データは機械が読むもの。同じ情報を、読む相手ごとに用意しておくと考えると分かりやすいですよ。

schema.org公式は、BreadcrumbListを「リンクされたウェブページの連なりからなるItemList」と定義しています。各ページは少なくともURLと名前で記述され、通常は現在のページで終わる構成になります。

Google公式は、パンくずリストを「サイト階層におけるそのページの位置を示すもの」と説明しています。実装すると、検索結果でパンくず表示が使われる場合があるとも案内しています。

駅の案内看板にたとえると、こうなりますプロパティ名は、身近なものに置きかえて覚えます駅の案内看板にたとえると、こうなりますプロパティ名は、身近なものに置きかえて覚えます駅の通路でいうと構造化データでいうと通路にずらりと並ぶ案内看板パンくずリスト(画面の表示)看板に書かれた文字name(表示名)何枚目に立っている看板かposition(並びの番号)その看板が指し示す先item(行き先のURL)
駅の案内看板にたとえると、こうなります — プロパティ名は、身近なものに置きかえて覚えます

たとえて言うなら、駅の通路にずらりと並ぶ案内看板です。看板に書かれた文字がname、何枚目に立っているかがposition、その看板が指し示す先がitemにあたります。看板を読む人が「いま自分はどこにいるのか」を掴むのと同じことを、機械にもさせているわけです。

この章のまとめ

画面のパンくずは人向け、BreadcrumbListは機械向け。中身は同じで、書き写す先が違うだけです。

02BreadcrumbListの必須3項目は、AI検索対策として何を書けばいいんですか?

BreadcrumbListとListItemの必須プロパティを、表に整理します。

プロパティ必須/推奨内容
BreadcrumbListitemListElement必須ListItemの配列。最低2つ必要
ListItemposition必須パンくずの位置。1から始まる整数
ListItemname必須ユーザーに表示される階層名
ListItemitem必須(最後の階層を除く)該当階層のURL
1段ぶんは、3つの問いに答えています名前で覚えるより、問いから思い出すほうが速いです1段ぶんは、3つの問いに答えています名前で覚えるより、問いから思い出すほうが速いです何番目position1から始まる整数で数えるなんと出ているname画面に見えている文字と同じにどこへ飛ぶitemその段が指す先のURL
1段ぶんは、3つの問いに答えています — 名前で覚えるより、問いから思い出すほうが速いです

覚え方は、名前の暗記より問いのほうが速いです。1段ぶんのListItemは、何番目に立っているか。なんと書いてあるか。どこへ連れていくか。この3つに答えているだけです。

もうひとつ、先に押さえておきたい条件があります。ListItemは最低2つ必要だ、という点です。この条件があるため、トップページのすぐ下にある1階層だけのページでは、BreadcrumbListが成立しません。カテゴリを1つ挟む構成にするか、実装を見送るかの判断が先に来ます。

この章のまとめ

1段ぶんに書くのはposition・name・item。そしてListItemは最低2つ。浅い階層のページは、まずここで実装可否が決まります。

03BreadcrumbList schemaの書き方のテンプレートは、AIOでそのまま使えますか?

若葉さん
若葉さんの発言

表は分かりました。実際のコードは、そのままコピペして使ってもいいものなんでしょうか。

鈴木さん
鈴木さんの発言

大丈夫です。 ここでは3階層の例を用意しました。囲みの中の日本語とURLを、自社のものに置き換えれば動きます。

{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "カテゴリ名をここに入力",
      "item": "https://example.com/category/"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "サブカテゴリ名をここに入力",
      "item": "https://example.com/category/sub/"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "対象ページのタイトルをここに入力"
    }
  ]
}
入れ物は、外側から内側へ4段あります置き換えるのは、いちばん内側だけです入れ物は、外側から内側へ4段あります置き換えるのは、いちばん内側だけですいちばん内側:順番・表示名・行き先実際に書き換えるのはここだけその中:1段ぶんの箱階層ひとつぶんの情報がここに入るその中:段の並び上から順に並べる配列いちばん外側:経路そのものたどってきた道を1本ぶん束ねる入れ物
入れ物は、外側から内側へ4段あります — 置き換えるのは、いちばん内側だけです

読みどころは、入れ物の関係です。いちばん外側にあるのが経路そのもの、その中に段の並びがあり、さらにその中に1段ぶんの情報が入ります。JSON-LDの@contextや@typeといった基本の書き方に不安がある方は、別記事『JSON-LDの書き方入門|3つのコピペ例で今日から書ける【図解つき】』を先に読むと迷いません。

手作業でコードを起こすのが負担な場合は、別記事『パンくずリストschemaをAIに実装させる実践プロンプト』が生成のしかたを紹介しています。

この章のまとめ

テンプレートは、外側から内側へ入れ子になっています。置き換えるのは、いちばん内側の文言とURLだけです。

04BreadcrumbList schemaで最後の階層だけitemを省けるのは、AI検索最適化でどういう理屈なんですか?

上のテンプレートで、3番目のListItemだけitemがありません。これは書き忘れではなく、仕様に沿ったものです。最後の階層、つまり対象ページ自身については、itemを省略できます。Google公式は、省略した場合はページ自体のURLが使われると説明しています。

省けるのは末尾だけ、という線引きです同じ省略でも、置く場所で結果が反転します省けるのは末尾だけ、という線引きです同じ省略でも、置く場所で結果が反転します途中の段で省く指す先が外から決まらない機械の側で補えない必須プロパティの欠落になる「省ける」の記憶だけが残ると起きます末尾の段で省く指す先はいま見ているページページ自体のURLが使われる仕様に沿った書き方になる書き忘れではなく、意図した省略です
省けるのは末尾だけ、という線引きです — 同じ省略でも、置く場所で結果が反転します

理屈はシンプルです。最後の段が指す先は、いま読んでいるページそのものです。だからURLを書かなくても、機械の側で補えます。逆に途中の段は、どこを指すのか外からは決められません。ここでitemを省くと、必須プロパティの欠落になります。

省略できるのは最後の段だけ、と覚えてしまうのがいちばん確実です。「省ける」という記憶だけが残っていると、途中の段でも省いてしまい、あとで原因の分からないエラーに悩むことになります。

この章のまとめ

省けるのは最後の段のitemだけ。途中の段で同じことをすると、必須プロパティの欠落になります。

05トップページやドメイン名は、LLMOのパンくず(BreadcrumbList schema)に入れなくていいんですか?

書き始めをどこにするかも、よく迷うところです。結論から言うと、サイトのドメイン名(トップレベルのパス)やページ自体をListItemに含めることは、Google公式から求められていません。トップページの1つ下の階層から書き始める構成も選べます。

書き始めをどこにするかの判断迷ったら、見えているほうに合わせます書き始めをどこにするかの判断迷ったら、見えているほうに合わせますドメイン名そのものを、段として入れる公式から求められてはいません段の数をそろえるために、無い階層を足す画面に無いものを書くことになりますトップの1つ下から書き始めるそういう構成も選べます画面に出ている「ホーム」に合わせて入れる表示との一致を優先した判断です鈴木さん判断の軸は、いつでも「画面に何が出ているか」です
書き始めをどこにするかの判断 — 迷ったら、見えているほうに合わせます

とはいえ、機械的に省けばいいという話でもありません。判断の軸は画面に何が出ているかです。画面のパンくずに「ホーム」を表示しているなら、表示との一致を優先して入れる、という判断のほうが自然になります。

この章のまとめ

ドメイン名やページ自体を入れる義務はありません。ただし、入れるかどうかは画面の表示に合わせて決めます。

06画面のパンくずとschemaの文言は、AI検索最適化でどこまでそろえるんですか?

高梨課長
高梨課長の発言

実装した直後は合っていたはずなんです。それが、いつの間にかずれていることがあって。

鈴木さん
鈴木さんの発言

そこがこの構造化データの本番です。崩れるのは書いた瞬間ではなく、運用の中なんですよ。カテゴリの改名が、いちばんよくある引き金です。

nameプロパティには、実際に画面に表示されているパンくずの文言と同じ値を入れます。position番号は、画面上の並び順と一致させます。そしてカテゴリ名を変更したときは、画面表示とコードの両方を同時に更新する運用が要ります。

改名は、一組の作業にしておきます片方だけ直せる状態が、食い違いを生みます改名は、一組の作業にしておきます片方だけ直せる状態が、食い違いを生みます画面だけ直す見た目はすぐ直るコード側に旧名称が残る残ったことに誰も気づかない目に見えない側が取り残されます一組で直す表示を直したら写しも直す番号の振り直しも同時に見る食い違いが生まれる隙がない改名の手順に組み込んでしまいます
改名は、一組の作業にしておきます — 片方だけ直せる状態が、食い違いを生みます

崩れ方には特徴があります。画面のほうは、見た目ですぐ気づくので直ります。取り残されるのは、目に見えないコードの側です。片方だけを直せる状態にしておかないというのが、いちばん効く予防になります。

この章のまとめ

文言も並び順も、画面が正で、コードがその写しです。改名のときは一組で直す、と決めておいてください。

071つのページに経路が2本あるとき、BreadcrumbList schemaはAI対策ではどう書き分けるんですか?

1つのページに、たどり着く道が複数ある場合もあります。商品ページが、カテゴリからも別の一覧からも開けるケースです。

Google公式は、サイト内のページに複数の到達方法がある場合、1ページに対して複数のパンくずパスを指定できると案内しています。この場合は、複数のBreadcrumbListオブジェクトを配列として並べて記述します。

[
  {
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    "itemListElement": [
      {
        "@type": "ListItem",
        "position": 1,
        "name": "カテゴリA",
        "item": "https://example.com/category-a/"
      },
      {
        "@type": "ListItem",
        "position": 2,
        "name": "対象ページのタイトル"
      }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    "itemListElement": [
      {
        "@type": "ListItem",
        "position": 1,
        "name": "カテゴリB",
        "item": "https://example.com/category-b/"
      },
      {
        "@type": "ListItem",
        "position": 2,
        "name": "対象ページのタイトル"
      }
    ]
  }
]
経路が分かれても、番号は各自1から通し番号にすると、何段目か分からなくなります経路が分かれても、番号は各自1から通し番号にすると、何段目か分からなくなりますひとつめの経路1番目:入口になったカテゴリ2番目:たどり着いたページこの経路の中で完結して数えますふたつめの経路1番目:別の入口のカテゴリ2番目:たどり着いたページ同じページでも、番号は独立します
経路が分かれても、番号は各自1から — 通し番号にすると、何段目か分からなくなります

ここでの注意は番号の振り方です。positionは経路ごとに1から振り直します。経路をまたいで通し番号にすると、それぞれの経路が何段目から始まるのか分からなくなります。階層設計そのものを見直したい場合は、別記事『トピッククラスターの作り方|内部リンク設計6ステップで解説【図解つき】』が参考になります。

この章のまとめ

経路が複数あるなら、BreadcrumbListも複数書きます。番号は経路ごとに1から。通し番号にはしません。

08公開後にBreadcrumbListが崩れるのは、AI検索のどこを見れば分かりますか?

高梨課長
高梨課長の発言

崩れる場所が決まっているなら、そこだけ見る運用にしたいです。どこを見ればいいでしょうか。

鈴木さん
鈴木さんの発言

起きた変更の種類で、取り残される場所が変わります。画面は直る、コードは残る。この非対称を頭に入れておくと、見る場所が絞れますよ。

取り残されるのは、いつも同じ側です起きた変更と、直る場所の組み合わせで見ます取り残されるのは、いつも同じ側です起きた変更と、直る場所の組み合わせで見ますカテゴリの改名 × 画面見た目で気づくので直りますカテゴリの改名 × コード旧い文字が残り、誰も気づきません階層の増減 × 画面並びが変わるので直ります階層の増減 × コード番号の抜けや重複が残ります起きた変更直る場所
取り残されるのは、いつも同じ側です — 起きた変更と、直る場所の組み合わせで見ます

カテゴリ名をリニューアルしたとき、画面側だけを更新してコード側を古いままにしてしまうケースがあります。階層の追加・削除でも同じです。手作業で番号を振り直していると、抜けや重複が起きます。

見るべき症状も、ずれの種類ごとに決まっています。ListItemが検出されない、あるいはitemの欠落がエラーとして出るなら、構文と必須プロパティの問題です。画面と検索結果で階層の順序が食い違うなら、position番号を疑います。カテゴリ改名のあとにコード側だけ旧名称が残っているなら、nameの更新漏れです。

この章のまとめ

崩れるのは構文よりも、並び順と文言です。カテゴリ構成を変えたら、position番号とnameを見に行ってください。

09BreadcrumbList schemaの書き方を確かめる順番は、AI検索対策でどう決めるんですか?

不具合の見つけ方にも順番があります。構文が通っているかを機械に見てもらい、そのあと画面との突き合わせを人の目でやる。この順にすると手戻りが減ります。

確かめる順番と、その先の線引き通ったことと、表に出ることは別の話です確かめる順番と、その先の線引き通ったことと、表に出ることは別の話です1構文を見る検出されない段はないか2並び順を見る画面と番号がそろっているか3文言を見る同じ文字になっているか4その先は選ばれる側使われる場合がある、という案内です
確かめる順番と、その先の線引き — 通ったことと、表に出ることは別の話です
  1. 構文と必須プロパティを見る — リッチリザルトテストの検出結果を見ます
  2. 階層と並び順を見る — 画面のパンくずとコードのpositionを突き合わせます
  3. 文言を見る — 画面のパンくずの文字と、nameが同じかを見ます

検証ツールの詳しい使い方は、別記事『構造化データのテストツール入門|今使うべき2つの使い分け方【図解つき】』で解説しています。あわせて押さえておきたいのは、この先の線引きです。Google公式の案内は、検索結果でパンくず表示が使われる場合がある、という書き方になっています。テストが通ることと、表示に出ることは同じではありません。

この章のまとめ

確かめる順番は、構文・並び順・文言。そして通ったからといって、表示が約束されるわけではありません。

10パンくず(BreadcrumbList schema)をテンプレートで一括出力するのは、AIOの運用として安全なんですか?

高梨課長
高梨課長の発言

うちはページごとに手書きしています。数が増えてきたので、そろそろ限界かもしれません。

鈴木さん
鈴木さんの発言

そこは自動生成に寄せたほうが楽になります。ただし切り替えたあとに、抜き取りの確認だけは入れてください。テンプレート側の作り込みミスは、全ページに同じ形で出ますから。

BreadcrumbListの実装で本当に負荷がかかるのは、コードを書く瞬間ではありません。その後の運用です。カテゴリの改名や階層の追加が起きるたびに、画面とコードの両方を直せる体制になっているかが分かれ目になります。

一括出力に切り替えたあとの確かめ方全ページを見なくても、作り込みミスは見つかります一括出力に切り替えたあとの確かめ方全ページを見なくても、作り込みミスは見つかります1深さの違うページを抜き取る浅い階層と深い階層から選びます2画面と突き合わせる並びの番号と文字を、目で見比べます3テンプレート側を直す1ページずつではなく、出力元を直します
一括出力に切り替えたあとの確かめ方 — 全ページを見なくても、作り込みミスは見つかります

まず着手すべきは、テンプレート出力の見直しです。ページごとに手書きしている状態なら、カテゴリ情報から自動生成する形に寄せておくと、position番号のずれと文言の食い違いをまとめて防げます。

切り替えたあとの確認は、全ページを見る必要はありません。階層の深さが異なるページを2〜3件抜き取って突き合わせると、テンプレート側の作り込みミスに気づけます。サイト全体をAIが辿れる構造にする観点は、別記事『サイト構造とクローラビリティ|AIに読まれる7つの手順【図解でわかる】』で扱っています。

この章のまとめ

手書きから自動生成へ寄せると、ずれの原因がまとめて消えます。切り替えたら、深さの違うページを抜き取って確かめてください。

11よくある質問

1階層だけのBreadcrumbListは実装できますか?

できません。Google公式は、最低2つのListItemを含めることを条件として明記しています。1階層しかない場合は、カテゴリを挟む構成に変えるか、BreadcrumbListの実装自体を見送る選択肢もあります。

パンくずの1つ目に「ホーム」を入れる必要はありますか?

必須ではありません。Google公式は、サイトのトップレベルのパスやページ自体をリストに含めることを求めていません。画面のパンくずに「ホーム」を表示している場合は、表示との一致を優先して入れる判断が自然です。

画面にパンくずを表示していないページに、schemaだけ実装してもいいですか?

おすすめしません。Google公式は、ページに実際に表示されている情報について構造化データを記述するという原則を示しています。階層を伝えたい場合は、まず画面側にパンくずを用意し、その表示内容をコードへ写す順序で進めてください。

カテゴリ構成を変更したら、何を見直せばいいですか?

画面のパンくずと、BreadcrumbList schemaの両方です。特にposition番号とnameの文言は、変更のたびにずれやすい箇所になります。改名と番号の振り直しは、一組の作業だと考えてください。

最後の階層以外でitemを省略すると、どうなりますか?

必須プロパティの欠落になります。省略できるのは最後の階層だけで、そこはページ自体のURLが使われる仕様に支えられています。途中の階層は指す先を機械が補えないため、URLを書く必要があります。

12まとめ|今日やる3つのこと

BreadcrumbListに書くのは、position・name・itemの3つです。ListItemは最低2つ、そして最後の段だけitemを省けます。テンプレート自体は短く、コピペで動きます。

負荷がかかるのは、そのあとです。画面とコードのどちらか片方だけを直せる状態になっていると、カテゴリ改名や階層の追加のたびに少しずつ食い違っていきます。今日やることは、そこを塞ぐ3つです。

今日この順でやります

  1. 画面のパンくずを1本スクリーンショットに撮る

    写す元を先に確定させます

  2. position番号とnameを突き合わせる

    並び順と文言が、画面と同じかを見ます

  3. 深さの違うページを抜き取る

    テンプレート出力なら、階層の深いページと浅いページで確かめます

AI検索では、こう聞かれています

  • BreadcrumbListはどう書けばいいですか?必須プロパティは何ですか?

    「BreadcrumbListの必須3項目は、AI検索対策として何を書けばいいんですか?」の章に、表と覚え方があります

  • パンくずの最後の階層は、itemを省略してもいいんですか?

    「BreadcrumbList schemaで最後の階層だけitemを省けるのは、AI検索最適化でどういう理屈なんですか?」の章で、省ける場所と省けない場所を図解で分けています

  • 1つのページに経路が複数あるとき、パンくずはどう書けばいいですか?

    「1つのページに経路が2本あるとき、BreadcrumbList schemaはAI対策ではどう書き分けるんですか?」の章に、配列で並べるコード例があります

  • 画面のパンくずとschemaの文言がずれていると、何が起きますか?

    「公開後にBreadcrumbListが崩れるのは、AI検索のどこを見れば分かりますか?」の章で、ずれの種類ごとの症状を整理しています

次に読むなら、この記事です