2026年5月20日

2026年5月20日

WordPressにローカルビジネスの構造化データ(LocalBusiness JSON-LD)を設定する方法

店舗や事務所の名前・住所・電話番号・営業時間を検索エンジンに正確に伝えるには、schema.org の LocalBusiness(またはその下位タイプ)をJSON-LD形式でトップページなどに出力します。WordPressでは、SEOプラグインの機能を使うか、wp_head フックで自前のJSON-LDを出力する方法があり、どちらの場合も最後にGoogleのリッチリザルトテストで検証します。この記事では、Googleのドキュメントに沿ったプロパティの選び方、WordPressへの実装コード、検証とつまずきやすい点までを説明します(2026年10月現在)。

LocalBusiness構造化データで伝えられること

LocalBusiness構造化データは、実店舗やサービス拠点を持つ事業者の情報を、機械が読める形でページに埋め込むものです。Googleは、この情報を検索結果のナレッジパネルなどで事業者情報を理解する手がかりの一つとして使います。

あらかじめ知っておきたいのは、構造化データを入れれば地図の検索結果(ローカルパック)に表示されるわけではないという点です。Googleのローカル検索で表示される店舗情報は、主にGoogleビジネスプロフィールの登録内容にもとづいています。構造化データは、自社サイトに書かれた情報とビジネスプロフィールの情報が同じ事業者のものだと結び付ける補助として考えるのが適切です。そのため、サイト・構造化データ・ビジネスプロフィールで、名前・住所・電話番号の表記をそろえておくことが大切です。

Googleが求めるプロパティ

Googleのローカルビジネスの構造化データのドキュメントでは、必須プロパティは name(事業者名)と address(住所)の2つです。そのほか、次のようなプロパティが推奨されています。

  • telephone:電話番号。国番号付きの形式(+81-3-1234-5678)が推奨
  • url:その店舗・事業所のページのURL
  • geo:緯度・経度。小数点以下5桁以上の精度が推奨
  • openingHoursSpecification:営業時間
  • priceRange:価格帯
  • image:店舗や外観の画像
  • servesCuisine・menu:飲食店の場合の料理ジャンルとメニューのURL
  • department:店舗内の別部門(薬局を併設するスーパーなど)

必須・推奨の区分は変わることがあるので、実装前にGoogle検索セントラルの該当ページで最新の内容を確認してください。

@type には、LocalBusiness そのものより、業種に合った下位タイプを指定するほうが情報が正確になります。schema.org には Restaurant、CafeOrCoffeeShop、Dentist、HairSalon、AutoRepair、RealEstateAgent など多くの下位タイプがあり、該当するものがなければ LocalBusiness を使います。

評価(aggregateRating)を入れる前の注意

旧来の解説では、aggregateRating で星評価を表示させる例がよく載っています。しかしGoogleは、事業者が自社のサイトで自社について載せているレビュー(自己言及型のレビュー)について、LocalBusiness や Organization ではレビューのリッチリザルトを表示しない方針をとっています。自社サイトに aggregateRating を入れても星は表示されないと考えてください。

また、ページ上に表示されていない評価やレビューを構造化データだけに書くことは、Googleのガイドライン違反になります。構造化データに書く内容は、そのページで利用者が実際に見られる情報と一致させるのが原則です。

JSON-LDの例

東京都内のカフェを想定した例です。値はすべてダミーなので、自分の事業者の情報に置き換えてください。

{
  "@context": "https://schema.org",
  "@type": "CafeOrCoffeeShop",
  "@id": "https://example.com/#localbusiness",
  "name": "サンプルカフェ 渋谷店",
  "url": "https://example.com/",
  "telephone": "+81-3-1234-5678",
  "image": "https://example.com/wp-content/uploads/shop-front.jpg",
  "priceRange": "¥¥",
  "servesCuisine": "コーヒー",
  "address": {
    "@type": "PostalAddress",
    "postalCode": "150-0002",
    "addressRegion": "東京都",
    "addressLocality": "渋谷区",
    "streetAddress": "渋谷1-2-3 サンプルビル1階",
    "addressCountry": "JP"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 35.65861,
    "longitude": 139.70154
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "08:00",
      "closes": "20:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Saturday", "Sunday"],
      "opens": "10:00",
      "closes": "18:00"
    }
  ]
}

書き方のポイントは次のとおりです。

  • 住所:日本の住所は、addressRegion に都道府県、addressLocality に市区町村、streetAddress にそれ以降を入れると分かりやすくなります。addressCountry は国コード JP です。
  • 営業時間:opens・closes は24時間表記の hh:mm で書きます。定休日の曜日はどのブロックにも含めません。深夜0時をまたぐ場合は、opens を 18:00、closes を 02:00 のように書きます。24時間営業は opens を 00:00、closes を 23:59 とします。年末年始などの特別営業は、validFrom・validThrough で期間を指定した別のブロックを追加します。
  • @id:ページURLに #localbusiness などを付けた固有の識別子にしておくと、ほかの構造化データからこの事業者を参照するときに使えます。
  • 緯度・経度:Googleマップで地点を右クリックすると表示される値を使えます。

WordPressに出力する方法

SEOプラグインの機能を使う

すでにSEOプラグインを使っている場合は、先にその設定を確認します。主要なSEOプラグインは、サイト全体の組織情報(Organization)を自動で出力しており、製品やプランによってはローカルビジネス用の設定画面があります。プラグインで設定できるなら、それを使うのが手間もメンテナンスも少なく済みます。

自前のコードとプラグインの両方で事業者情報を出すと、同じ事業者が別々の内容で二重に記述されることがあります。次の節のコードを使う前に、ページのソースで application/ld+json を検索し、すでに何が出力されているかを確認してください。

functions.phpやプラグインでJSON-LDを出力する

プラグインで対応できない場合は、wp_head フックでJSON-LDを出力します。テーマを更新したときに消えないよう、子テーマの functions.php か、wp-content/mu-plugins/ に置く小さなプラグインファイルに書きます。編集前にファイルのバックアップを取ってください。

<?php
/**
 * トップページに LocalBusiness の JSON-LD を出力する
 */
add_action( 'wp_head', function () {
    if ( ! is_front_page() ) {
        return;
    }

    $schema = array(
        '@context'  => 'https://schema.org',
        '@type'     => 'CafeOrCoffeeShop',
        '@id'       => home_url( '/#localbusiness' ),
        'name'      => 'サンプルカフェ 渋谷店',
        'url'       => home_url( '/' ),
        'telephone' => '+81-3-1234-5678',
        'image'     => home_url( '/wp-content/uploads/shop-front.jpg' ),
        'address'   => array(
            '@type'           => 'PostalAddress',
            'postalCode'      => '150-0002',
            'addressRegion'   => '東京都',
            'addressLocality' => '渋谷区',
            'streetAddress'   => '渋谷1-2-3 サンプルビル1階',
            'addressCountry'  => 'JP',
        ),
        'geo'       => array(
            '@type'     => 'GeoCoordinates',
            'latitude'  => 35.65861,
            'longitude' => 139.70154,
        ),
        'openingHoursSpecification' => array(
            array(
                '@type'     => 'OpeningHoursSpecification',
                'dayOfWeek' => array( 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday' ),
                'opens'     => '08:00',
                'closes'    => '20:00',
            ),
            array(
                '@type'     => 'OpeningHoursSpecification',
                'dayOfWeek' => array( 'Saturday', 'Sunday' ),
                'opens'     => '10:00',
                'closes'    => '18:00',
            ),
        ),
    );

    $json = wp_json_encode( $schema, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_HEX_TAG );
    if ( $json ) {
        echo '<script type="application/ld+json">' . $json . '</script>' . "\n";
    }
} );

wp_json_encode() で配列をJSONに変換しているので、引用符などのエスケープを自分で行う必要はありません。JSON_UNESCAPED_UNICODE は日本語を \u 形式にせずそのまま出力するため、ソースが読みやすくなります。JSON_HEX_TAG は < と > をエスケープし、値に </script> のような文字列が含まれてもスクリプトタグが途中で閉じないようにするためのものです。将来、カスタマイザーやカスタムフィールドから値を読み込むように変える場合も、この変換を通しておけば安全に出力できます。

複数店舗がある場合は、トップページに全店舗を並べるより、店舗ごとのページを作り、それぞれのページにその店舗の情報だけを出力するほうが、ページの内容と構造化データが対応して分かりやすくなります。

リッチリザルトテストで検証する

出力したら、Googleの「リッチリザルトテスト」にページのURLを入力して検証します。公開前のページは、コードを貼り付けて検証することもできます。

確認するのは次の点です。

  • 検出された項目に「ローカルビジネス」が表示されている
  • エラーがない(必須の name・address が欠けているとエラーになる)
  • 警告に表示された推奨プロパティのうち、実際の情報として出せるものは追加する

リッチリザルトテストは、Googleが対応しているタイプだけを対象にします。schema.org の仕様に沿っているかを広く確認したい場合は、Schema Markup Validator(validator.schema.org)も併用します。

テストで「検出されない」ときは、キャッシュ系プラグインやCDNのキャッシュが古いページを返している可能性があります。キャッシュを削除してから再度テストしてください。条件分岐に is_front_page() を使っているので、トップページ以外のURLで試していないかも確認します。

検証に通っても、検索結果への反映はGoogleが再クロールしてからになり、時間がかかります。営業時間や電話番号を変更したときは、構造化データとページ本文、Googleビジネスプロフィールの3か所をまとめて更新する運用にしておくと、情報の食い違いを防げます。

まとめ

  • LocalBusiness構造化データは、事業者の名前・住所・電話番号・営業時間などを検索エンジンに正確に伝えるためのもの。ローカルパックの表示はGoogleビジネスプロフィールが中心
  • Googleの必須プロパティは name と address。@type は業種に合った下位タイプを選ぶ
  • 自社サイトの自社レビューを aggregateRating に入れても星は表示されない。ページに見えない情報は書かない
  • WordPressではまずSEOプラグインの機能を確認し、自前で出す場合は wp_head と wp_json_encode() で出力する
  • リッチリザルトテストでエラーがないことを確認し、情報の変更時はサイト・構造化データ・ビジネスプロフィールをそろえて更新する

お気軽にご相談ください

お見積りへ お問い合わせへ
▲