「店舗ページに構造化データを入れておいて」と言われた。けれど公式ドキュメントを開くと、英語のプロパティ名が並んでいて、どこから手をつけるかが決まらない。

しかもLocalBusinessという型は、調べるほど話が広がっていきます。業種ごとに別の型がある。店舗が複数あるときは書き方が変わる。部門を表すプロパティまである。

この記事は、店舗ページのLocalBusiness schemaを今日はじめて触る方を想定して書きました。必須の項目から始めて、業種別サブタイプの選び方、複数店舗と部門の書き分け、公開したあとの見直しまで、順番に進みます。

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

  • 「LocalBusiness schema 実装」で検索して、そのまま貼れるテンプレートを探している
  • 業種ごとに型が分かれていると聞いたが、自社がどれに当たるのか分からない
  • 店舗が複数あるとき、1ページにまとめてよいのか判断がつかない

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

  • 自社の業種に合ったサブタイプを、自分で選べるようになります
  • 複数店舗と部門(department)のどちらで書くかを判断できます
  • 公開したあとにずれる場所が分かり、見直す順番を決められます

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

  • LocalBusiness schemaとは、店舗の住所・営業時間・価格帯を、機械が読める形で伝える構造化データです。
  • 必須プロパティはnameとaddressだけ。書くこと自体の負荷は高くありません。
  • 差がつくのは、どの型で名乗るか・拠点をどう分けるか・公開後に何を見直すかの3つです。
店舗ページで先に決めるのは、この3つです順番に決めていけば、迷わず書き終わります店舗ページで先に決めるのは、この3つです1つめどの型で名乗るか業種にいちばん近いサブタイプを選ぶ2つめ拠点をどこで切るかページを分けるか、部門で入れ子にするか3つめ公開後に何を見直すか営業時間・価格帯・電話番号鈴木さん順番に決めていけば、迷わず書き終わります
店舗ページで先に決めるのは、この3つです — 順番に決めていけば、迷わず書き終わります

この記事では、ある会社で店舗ページを見ている2人と、専門家の会話をはさみながら進めます。近い立場の人の質問から読んでいただいて構いません。

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

01そもそもLocalBusiness schemaの実装って、AI検索対策では何をするんですか?

若葉さん
若葉さんの発言

あの…そもそもなんですが、LocalBusiness schemaって、店舗ページに住所を書き足す作業なんでしょうか。

鈴木さん
鈴木さんの発言

住所そのものは、もうページに書いてありますよね。同じ内容を、機械が読み違えない形でもう一度言い直しておく作業だと思ってください。

schema.orgは、LocalBusinessを「特定の物理的なビジネス、または組織の支店」を表す型として定義しています(出典: schema.org)。レストランや美容室、クリニックのように、物理的な拠点を持つ事業者が対象です。

この型には、ほかの構造化データにはない特徴があります。Organization(組織)とPlace(場所)という2つの型を、同時に継承している点です(出典: schema.org)。正式には Thing > Organization > LocalBusiness と、Thing > Place > LocalBusiness という2本の経路をたどります。

言いかえると、会社としての顔と、場所としての顔を、1つの型でまとめて名乗れるということです。会社としての顔は名称や連絡先。場所としての顔は、住所や座標、営業時間にあたります。

LocalBusinessは、2つの型の重なりにあります会社としての顔と、場所としての顔を両方持ちますLocalBusinessは、2つの型の重なりにあります会社としての顔と、場所としての顔を両方持ちますOrganization(組織)Place(場所)名称/連絡先/運営している会社所在地/座標/開いている時間LocalBusinessLocalBusiness : 店舗ページのひとかたまりで両方を名乗れるschema.orgは、この2本の継承経路を定義しています。
LocalBusinessは、2つの型の重なりにあります — 会社としての顔と、場所としての顔を両方持ちます

この章のまとめ

LocalBusinessは、組織と場所の2系統を受け継いだ型です。会社としての名乗りと、拠点としての事実を、1か所でまとめて伝えられます。

02LocalBusiness schemaの実装で必須なのは、AI検索最適化として何と何ですか?

必須プロパティは、nameとaddressの2つだけです(出典: Google公式)。残りは、自社に該当するものを足していく形になります。

ただし、addressには書き方の決まりがあります。住所の文字列を1行そのまま入れる欄ではありません。PostalAddress型を入れ子にして書きます(出典: schema.org)。中身はstreetAddress・addressLocality・addressRegion・postalCode・addressCountryに分かれます。

住所は、分けて書くと伝わりますひとつづきの文字列では、どこが何か分かりません住所は、分けて書くと伝わりますひとつづきの文字列では、どこが何か分かりませんひとかたまりで入れる町名も番地も郵便番号もひと続きどこまでが市区町村か区別がない国を表す情報がどこにも無い分けて入れ子にする番地・市区町村・都道府県に分ける郵便番号は独立した欄に置く国はアルファベットのコードで書く
住所は、分けて書くと伝わります — ひとつづきの文字列では、どこが何か分かりません

addressCountryには、ISO 3166-1のアルファベット2文字コード(日本ならJP)が推奨されています(出典: schema.org)。

この章のまとめ

必須はnameとaddressだけです。addressはPostalAddress型を入れ子にして、番地から国まで分けて書きます。

03推奨プロパティは、LocalBusiness schemaのAI検索対策でどこから埋めるんですか?

必須が少ないぶん、Google公式は推奨プロパティを挙げています。よく使うものを表にまとめます。

プロパティ内容
telephoneText市外局番を含む電話番号
urlURLその拠点自体の完全なURL
geoGeoCoordinates緯度・経度(小数点以下5桁以上の精度が必要)
openingHoursSpecificationOpeningHoursSpecification営業時間(曜日・開始・終了・季節営業の期間)
priceRangeText価格帯の目安(100文字未満)
aggregateRatingAggregateRating複数レビューの平均評価
reviewReview個別のレビュー
menuURL飲食店のメニューページのURL
servesCuisineText飲食店が提供する料理のジャンル
departmentLocalBusiness拠点内の独立した部門

この表を上から順に埋めていく必要はありません。まず必須の2つ、次にどの店にも当てはまる欄、最後に業種で分かれる欄、という順に考えると迷わなくなります。menuとservesCuisineは飲食店向けのプロパティです(出典: Google公式)。

埋める順番は、下から順に決まります上の段ほど、当てはまるお店が限られていきます埋める順番は、下から順に決まります上の段ほど、当てはまるお店が限られていきます業種で分かれる欄メニュー・料理ジャンル・部門どのお店にも当てはまる欄電話・URL・座標・営業時間・価格帯必須:name と addressここが欠けると、名乗りとして成立しません
埋める順番は、下から順に決まります — 上の段ほど、当てはまるお店が限られていきます

レビューまわりには、実装の前に知っておきたい前提があります。Google公式は、対象企業が自社サイト上で自らレビューを管理している場合、LocalBusinessとOrganization型を星評価の対象外としています(出典: Google公式)。自社サイトに自己申告のレビューを載せてマークアップしても、星評価としては扱われません。条件の詳細は、別記事『Review・AggregateRating schemaの実装手順』で確認してください。

この章のまとめ

推奨は「どの店にも効く欄」と「業種で分かれる欄」に分けて考えると、埋める順番が決まります。数を増やすこと自体は目的になりません。

04業種別サブタイプの選び方は、LocalBusiness schemaのAI対策でなぜ大事なんですか?

高梨課長
高梨課長の発言

型が業種ごとに分かれていると聞きました。うちはエステサロンですが、LocalBusinessのままではいけないのでしょうか。

鈴木さん
鈴木さんの発言

動くことは動きます。ただGoogle公式ドキュメントは、当てはまるいちばん具体的な型を使ってほしいと書いています。挙げられている例は、Restaurant・DaySpa・HealthClubです。

Google公式ドキュメントには「Use the most specific LocalBusiness sub-type possible」とあります(出典: Google公式)。LocalBusinessをそのまま使うのは、当てはまる型が見つからないときの選択肢だと考えてください。

schema.orgは、LocalBusinessの下に30以上のサブタイプを定義しています(出典: schema.org)。代表的なものを業種別に並べます。

業種カテゴリ主なサブタイプ
飲食FoodEstablishment、Restaurant、CafeOrCoffeeShop
美容・健康HealthAndBeautyBusiness、DaySpa、HealthClub
医療Dentist、MedicalBusiness
士業LegalService
宿泊LodgingBusiness
小売Store、ShoppingCenter

型を具体にするほど、何屋なのかが説明なしで伝わります。お客さまに自己紹介するときの言い方に、いちばん近い型を選ぶ。それが目安になります。

自己紹介の言い方を、そのまま型にします具体的な型ほど、説明なしで何屋かが伝わります自己紹介の言い方を、そのまま型にします具体的な型ほど、説明なしで何屋かが伝わりますお客さまへの言い方選ぶサブタイプお店をやっていますLocalBusinessエステサロンですDaySpa歯科医院ですDentist法律事務所ですLegalService鈴木さんいちばん具体的なところまで降りると、名乗りが一段はっきりします
自己紹介の言い方を、そのまま型にします — 具体的な型ほど、説明なしで何屋かが伝わります

1つの事業者が複数の業態を兼ねることもあります。その場合は、@typeを配列で指定します。Google公式ドキュメントは、電気工事士・配管工・鍵屋を兼業する例を示しています(出典: Google公式)。["Electrician", "Plumber", "Locksmith"] という書き方です。エステと物販を兼ねる店舗なら、["DaySpa", "Store"] と書けます。

この章のまとめ

サブタイプは、いちばん具体的な型を選びます。当てはまるものが無いときだけLocalBusinessのまま。兼業なら@typeを配列で書けます。

05AI検索対策で使える、LocalBusiness schemaの実装テンプレートはありますか?

エステサロンを想定した基本形です。自社の情報に置き換えれば、そのまま利用できます。

{
  "@context": "https://schema.org",
  "@type": "DaySpa",
  "name": "サンプルエステサロン 渋谷店",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "サンプル2-3-4",
    "addressLocality": "渋谷区",
    "addressRegion": "東京都",
    "postalCode": "150-0000",
    "addressCountry": "JP"
  },
  "telephone": "+81-3-0000-0001",
  "url": "https://sample-spa.example.com/shibuya/",
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 35.65858,
    "longitude": 139.70157
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "10:00",
      "closes": "20:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Saturday", "Sunday"],
      "opens": "09:00",
      "closes": "18:00"
    }
  ],
  "priceRange": "¥¥"
}

@typeには、LocalBusinessではなくDaySpaという具体的なサブタイプを指定しています。addressgeoは、それぞれPostalAddress型・GeoCoordinates型を入れ子にします。平日と土日で営業時間が違うときは、openingHoursSpecificationを配列にして分けて書きます。

テンプレートを自分のものにする順番上から順に触れば、置き換えは終わりますテンプレートを自分のものにする順番上から順に触れば、置き換えは終わります1業種の型を決める兼業しているなら、配列にして両方を名乗ります2所在地と連絡先を入れる住所は入れ子、国コードはアルファベットで書きます3開いている時間を実態に合わせる曜日でちがうなら、まとまりを分けて並べます
テンプレートを自分のものにする順番 — 上から順に触れば、置き換えは終わります

JSON-LDそのものの文法(@context@typeの意味)は、別記事『JSON-LDの書き方入門|3つのコピペ例で今日から書ける』で解説しています。

この章のまとめ

テンプレートは、型・住所と連絡先・営業時間の順に置き換えれば形になります。曜日で営業時間が違うときは、配列にして分けます。

06店舗が複数あるとき、LocalBusiness schemaの実装はAI検索最適化としてどう分けるんですか?

高梨課長
高梨課長の発言

店舗が増えてきました。店舗一覧のページに、まとめて書いてしまってもいいものでしょうか。

鈴木さん
鈴木さんの発言

そこは分けるほうが安全です。urlプロパティの説明が「その拠点自体の完全なURL」となっているので、1つの名乗りは1つの拠点に対応する設計なんです。

Google公式ドキュメントは、urlプロパティを「その拠点自体の完全なURL」と説明しています(出典: Google公式)。1つのLocalBusinessは1つの拠点に対応する設計です。複数店舗を展開しているなら、拠点ごとに別ページ・別マークアップにするのが基本になります。

ここで起きやすいのが、住所だけ差し替えて紹介文を使い回してしまうことです。駐車場があるかどうか、対応できる時間帯、扱っているメニュー。拠点ごとに違うはずの情報が消えると、AIも検索エンジンも拠点を選び分ける材料を失います。この落とし穴は、別記事『ローカルビジネスのAIO事例』でも扱っています。

拠点の切り方で、届く情報が変わります同じ文の使い回しは、選ばれる手がかりを消します拠点の切り方で、届く情報が変わります同じ文の使い回しは、選ばれる手がかりを消します一覧ページにまとめる住所だけ差し替える紹介文はどのお店も同じurlは一覧ページのままどのお店も同じ顔に見えてしまう拠点ごとに分けるお店ごとにページを持つそのお店にしかない事実を書くurlはその拠点のものひとつの名乗り=ひとつの拠点
拠点の切り方で、届く情報が変わります — 同じ文の使い回しは、選ばれる手がかりを消します

この章のまとめ

1つのLocalBusinessは1拠点です。複数店舗は拠点ごとに別ページ・別マークアップにします。紹介文の使い回しは、拠点を選び分ける材料を消してしまいます。

07部門(department)は、LocalBusiness schemaのAI検索対策でいつ使うんですか?

departmentは、同じ拠点の中にある独立した部門を表すプロパティです。Google公式ドキュメントは、小売店(Store)の中にある調剤薬局(Pharmacy)部門を例に挙げています(出典: Google公式)。

{
  "@context": "https://schema.org",
  "@type": "Store",
  "name": "サンプルストア 渋谷店",
  "department": [
    {
      "@type": "Pharmacy",
      "name": "サンプルストア 渋谷店 調剤薬局",
      "telephone": "+81-3-0000-0002"
    }
  ]
}

departmentの中では、親と同じプロパティを部門ごとに個別に定義できます(出典: Google公式)。電話番号や営業時間が部門によって違うときに効いてきます。

別ページか、departmentかの見分け方住所と、電話・時間の2点だけで決まります別ページか、departmentかの見分け方住所と、電話・時間の2点だけで決まります1住所を見るちがえば別の拠点として扱う2電話と時間を見る同じ住所の中で独立しているか3書き方が決まる別ページか、入れ子にするか鈴木さん住所がちがうかどうか。ここだけ見れば、たいてい決まります
別ページか、departmentかの見分け方 — 住所と、電話・時間の2点だけで決まります

見分ける手がかりは住所です。住所が違えば別の拠点なので、ページごと分けます。住所が同じで、電話や営業時間だけが独立しているなら、departmentの出番です。

この章のまとめ

別拠点かdepartmentかは、住所で見分けます。同じ住所の中で、電話や営業時間が独立している部門だけを入れ子にします。

08公開したあと、LocalBusiness schemaのAI対策として何がずれていくんですか?

若葉さん
若葉さんの発言

公開したら、いったん終わりでいいんですよね…?

鈴木さん
鈴木さんの発言

実は、負荷がかかるのはここからなんです。お店の情報は変わっていきますが、schemaは書いたときのまま残ります。 この差が、そのままずれになります。

Google公式の構造化データガイドラインは、マークアップの内容を実際の表示情報と一致させることを求めています(出典: Google公式)。時間が経つほどずれやすいのは、次の3か所です。

崩れる箇所起きること確認方法
openingHoursSpecification臨時休業・季節営業が反映されず、通常の営業時間のまま残るvalidFrom・validThroughによる期間指定の有無を確認する
priceRange価格改定後も、古い価格帯の表記が残る実際のメニュー・料金表と突合する
address・telephoneGoogleビジネスプロフィールの表記とずれる住所・電話番号をGoogleビジネスプロフィールと突合する
ずれは、あとから静かに生まれますお店は変わり、書いた内容は止まったままですずれは、あとから静かに生まれますお店は変わり、書いた内容は止まったままです公開した日表示と一致しているこの時点では合っている料金を変えた日価格帯が取り残される古い目安だけが残る長期休業の前開いている時間が古くなるふだんの時間だけが残る気づいた日どこが古いか分からないまとめて洗い直すことになる
ずれは、あとから静かに生まれます — お店は変わり、書いた内容は止まったままです

openingHoursSpecificationには、validFrom・validThroughで期間を区切る書き方があります(出典: schema.org)。年末年始や夏季休業のように、通常と違う営業時間を指定するためのプロパティです。通常の営業時間だけを置いたままにすると、休業日なのにschema側では営業中、という状態が起こりえます。

住所と電話番号は、Googleビジネスプロフィールの表記と揃えます。運用の考え方は、別記事『ローカルビジネスのAIO事例』もご覧ください。

この章のまとめ

ずれるのは営業時間・価格帯・住所と電話番号です。実際の表示と一致させることが求められている以上、書いたあとの見直しまでが実装の一部です。

09LocalBusiness schemaを実装すれば、AI検索やナレッジパネルに表示されるんですか?

高梨課長
高梨課長の発言

上に説明する立場として、いちばん聞かれそうなのがここです。入れれば、地図やナレッジパネルに出るようになるんでしょうか。

鈴木さん
鈴木さんの発言

そこは正直にお伝えします。Google公式ドキュメントは、構造化データを利用する機能が検索結果に表示されることを保証しないと明記しています。

期待の置きどころを間違えると、実装そのものが目的になってしまいます。表示されるかどうかは、こちらで決められる話ではありません。

期待してよいことと、確約されていないこと見え方そのものは、こちらでは決められません期待してよいことと、確約されていないこと見え方そのものは、こちらでは決められません実装で手に入るものお店の事実を取り違えられにくくする拠点ごとのちがいを機械に渡せる表示との食いちがいに気づきやすくなる土台としての値打ち約束されていないもの検索結果に出ることナレッジパネルに載ること公式ドキュメントが保証しないと明記
期待してよいことと、確約されていないこと — 見え方そのものは、こちらでは決められません

つまり実装は、表示を確約する施策ではありません。AIやGoogleに、店舗の正確な情報を渡すための土台です。この位置づけで見ると、埋めた欄の数より、書いた内容が実態と合っているかのほうが大事になります。

この章のまとめ

表示は保証されていません。実装の値打ちは、店舗の事実を取り違えられにくい形で渡せることにあります。

10実装したLocalBusiness schemaは、AI検索対策としてどう確認するんですか?

書き終えたら、公開する前に確認します。Rich Results Testにコードかページを入れると、エラーと警告の有無を確かめられます。検証ツールの使い分けは、別記事『構造化データのテストツール入門』で解説しています。

ただし、ツールが通ることと、名乗りとして正しいことは別の話です。ツールは、priceRangeが古いままかどうかまでは教えてくれません。実際のページの表示、そしてGoogleビジネスプロフィールと見比べるところまでが確認です。

公開する前に、ここだけ見てくださいツールが通っても、中身が古いことはあります公開する前に、ここだけ見てくださいツールが通っても、中身が古いことはあります必須のふたつを入れ、住所は入れ子にした文字列を1行で入れていないか当てはまるいちばん具体的な型を選んだいちばん広い型のまま残っていないか拠点ごとにページとマークアップを分けた紹介文まで分かれているか座標の精度と、価格帯の長さを確かめた桁と長さの条件を満たしているか時間と電話番号をビジネスプロフィールと見比べたページの表示とも突き合わせる
公開する前に、ここだけ見てください — ツールが通っても、中身が古いことはあります

この章のまとめ

ツールで構文を確認し、そのあとにページの表示・ビジネスプロフィールと突き合わせます。ここまでが実装の一部です。

11LocalBusiness schemaの実装で、AI検索最適化としてやりがちな失敗は何ですか?

最後に、実務でよく見かける失敗を3つ挙げます。どれも「よかれと思って」起きるものです。

よくある3つの失敗と、戻る場所どれも「よかれと思って」起きますよくある3つの失敗と、戻る場所どれも「よかれと思って」起きます失敗①型を選ばずに公開戻る場所=業種別サブタイプの一覧失敗②紹介文の使い回し戻る場所=拠点ごとのちがい失敗③時間の置き去り戻る場所=更新のときの往復
よくある3つの失敗と、戻る場所 — どれも「よかれと思って」起きます

1. LocalBusiness型のまま公開してしまう

Google公式ドキュメントは、いちばん具体的なサブタイプを使うよう明記しています。LocalBusinessのままにするのは、当てはまる型が見つからないときだけです。

2. 複数店舗のページで、住所だけ差し替えて紹介文を使い回してしまう

拠点ごとの違いが消えて、AIが拠点を選び分ける材料を失います。ページを分けたなら、中身も分けます。

3. 季節営業や臨時休業が、schema側に反映されないまま残ってしまう

営業時間を変えたら、schema側も見直す。この往復を運用に組み込んでおくと、ずれが溜まらなくなります。

この章のまとめ

失敗の多くは、公開した時点で終わりにしたときに起きます。型の選び方・拠点の分け方・営業時間の更新。この3点を見直せば防げます。

12よくある質問

LocalBusiness型をそのまま使ってはいけませんか?

技術的には使えます。ただしGoogle公式ドキュメントは、当てはまるいちばん具体的なサブタイプを使うよう明記しています。該当する型が見つからないときの選択肢と考えてください。

複数店舗を展開している場合、店舗ごとにページを分ける必要がありますか?

分けるのが基本です。urlプロパティが「その拠点自体の完全なURL」と説明されているとおり、1つのLocalBusinessは1拠点に対応する設計になっています。

実装すれば、Googleのナレッジパネルに表示されますか?

表示されるとは限りません。Google公式ドキュメントは、構造化データを利用する機能が検索結果に表示されることを保証しないと明記しています。実装は、表示のための土台づくりと位置づけてください。

自社サイトに載せたお客さまの声は、星評価として表示されますか?

表示されません。Google公式は、対象企業が自社サイト上で自らレビューを管理している場合、LocalBusinessとOrganization型を星評価の対象外としています。条件の詳細は、別記事『Review・AggregateRating schemaの実装手順』で扱っています。

営業時間が季節で変わる場合は、どう書けばいいですか?

openingHoursSpecificationのvalidFrom・validThroughで、期間を区切って指定します(出典: schema.org)。通常の営業時間だけを残すと、休業日にschema側だけ営業中になります。

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

LocalBusiness schemaの必須は、nameとaddressだけです。書くこと自体の負荷は高くありません。差がつくのは、サブタイプの選び方・拠点と部門の分け方・公開後も表示と一致させ続けられるかです。

まず着手するのは、本店1拠点への実装です。複数店舗への展開は、拠点ごとのページ分割と紹介文の作り分けができてから広げると安全です。

今日この順でやります

  1. 自社の型を決める

    業種にいちばん近いサブタイプを選びます。兼業なら@typeを配列にします

  2. 必須の2つを埋める

    nameとaddress。addressはPostalAddress型を入れ子にします

  3. 表示と突き合わせる

    営業時間・価格帯・住所と電話番号を、ページとビジネスプロフィールで見比べます

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

  • LocalBusiness schemaには何を書けばいいですか?必須の項目はどれですか?

    「LocalBusiness schemaの実装で必須なのは、AI検索最適化として何と何ですか?」の章で、必須と推奨を表と図解で説明しています

  • 店舗が複数ある場合、LocalBusiness schemaはどう書き分ければいいですか?

    「店舗が複数あるとき…どう分けるんですか?」の章と、部門(department)の章に見分け方があります

  • LocalBusinessをそのまま使ってはいけないと聞きましたが、なぜですか?

    「業種別サブタイプの選び方は、LocalBusiness schemaのAI対策でなぜ大事なんですか?」の章で説明しています

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