Serviceの構造化データの書き方|サービス業の料金と対応エリアをAIに伝える【JSON-LDの例つき】
公開日: / カテゴリ: 構造化データ / 執筆: エラバレル

「うちは商品ではなくサービスを売っているけれど、構造化データは何を書けばいいの?」「料金や対応エリアを、AIに正しく伝える方法はある?」。外壁塗装、ハウスクリーニング、税理士事務所、出張修理など、サービス業のホームページの担当者から、こうした相談をよくいただきます。
先に結論をお伝えします。**サービスの内容・料金・対応エリアは、schema.orgの Service という型で書けます。** 会社やお店そのものは LocalBusiness、その会社が提供する一つひとつのサービスは Service、と分けて書くのが基本です。
選ばれるAI診断が22業種・2,296件の公式サイトを診断したところ、ページの内容を構造化データで伝えていないサイトが91%ありました。会社の情報は入っていても、「このページは何のサービスの説明か」までは伝わっていないサイトが大半です。
この記事では、Serviceの構造化データとは何かから、書く項目、業種別のコード例、LocalBusinessとのつなげ方、確認の方法までを順番に説明します。
この記事でわかること
- Serviceの構造化データとは何か、LocalBusinessとの違い
- 書く項目の一覧(name・serviceType・provider・areaServed・offers)
- 料金の書き方(決まった金額・〇〇円から・幅のある料金)
- 対応エリアの書き方
- 外壁塗装・ハウスクリーニング・士業のコード例
- よくある間違いと、確認の方法
Serviceの構造化データとは?
構造化データとは、ページの内容を、AIや検索エンジンが間違いなく読み取れる決まった書式で書いたものです。人が見る画面には表示されませんが、「この文字列はサービス名」「この数字は料金」と機械に伝えられます。書式にはいくつかありますが、Googleが勧めているのはJSON-LDという形式です。
Service は、schema.orgという構造化データの共通の辞書にある型の一つで、会社やお店が提供するサービス(役務)を表します。外壁の塗装、エアコンの清掃、税務の顧問、車の車検、学習塾の授業など、形のある商品ではないものを書くときに使います。
LocalBusiness・Product・Serviceの違い
構造化データでよく使う型と、Serviceの関係を整理します。
| 型 | 表すもの | 書く場所の例 | 例 |
|---|---|---|---|
| LocalBusiness(とその仲間) | 会社・お店そのもの | トップページ、会社概要 | 〇〇塗装店、〇〇税理士事務所 |
| Organization | 会社・団体そのもの(店舗を持たない場合も) | トップページ | 〇〇株式会社 |
| Service | 会社が提供するサービス | サービスの説明ページ、料金ページ | 外壁塗装、税務顧問、エアコン清掃 |
| Product | 形のある商品 | 商品ページ | 塗料、部品、物販の商品 |
つまり、「誰が」をLocalBusinessで、「何を・いくらで・どこで」をServiceで書くイメージです。会社の情報の書き方はLocalBusinessの構造化データの書き方の記事で説明しています。
Serviceは「リッチリザルト」の対象ではない
Googleの検索結果で星やよくある質問が表示される「リッチリザルト」は、Googleが対象として決めた型だけに出ます。Serviceはその対象には入っていません。ですから、Serviceを書いても検索結果の見た目は変わりません。それでも、ページの内容の種類や料金・対応エリアを、決まった書式で機械に伝えられる点に意味があります。
なぜサービス業にServiceの構造化データが役立つのか
AIに「〇〇市で、外壁塗装を頼める会社は?」「エアコンの掃除は、いくらくらい?」と聞く人が増えています。AIが答えるときに知りたいのは、次のような情報です。
- 何のサービスか(外壁塗装、屋根塗装、雨漏りの修理)
- どこで受けられるか(対応エリア、出張の範囲)
- いくらかかるか(料金の目安、最低料金)
- 誰が提供しているか(会社名、所在地、連絡先)
これらは、ページの文章に書いてあれば読み取れます。ただし、文章の書き方は会社ごとにばらばらで、「〇〇円〜」がどのサービスの料金なのか、対応エリアがどこまでなのかを、AIが取り違える可能性もあります。構造化データで書いておけば、サービス名・料金・対応エリアの組み合わせを、誤解なく伝えられるようになります。
22業種・2,296サイトの診断結果
- ページの内容を構造化データで伝えていない(または一部だけ)サイトは91%
- 構造化データそのものがないサイトは59%
- 運営者の情報が構造化データに十分入っていないサイトは97%
- 業種別では、自動車整備97%、美容室97%、中古車販売店97%、不動産会社94%、外壁塗装87%、行政書士86%が「ページの内容」で不足
サービス業の多くで、9割前後のサイトが「ページの内容」を構造化データで伝えられていませんでした。ここを埋めるのに、Serviceの構造化データが役立ちます。
Serviceの構造化データで書く項目
Serviceでよく使う項目を、大事な順にまとめました。すべてを書く必要はなく、ページに書いてある情報の範囲で埋めます。
| 項目 | 意味 | 書く内容の例 |
|---|---|---|
| name | サービスの名前 | 外壁塗装 |
| serviceType | サービスの種類 | 外壁塗装工事 |
| description | サービスの説明 | 戸建て住宅の外壁を、足場の設置から塗装・点検まで行います |
| provider | 提供している会社 | LocalBusinessの@idで指定 |
| areaServed | 対応エリア | 岐阜市、各務原市、大垣市 |
| offers | 料金 | Offerで、価格と通貨を書く |
| url | サービスのページのURL | https://example.com/service/gaiheki/ |
| image | サービスの写真 | 施工の写真のURL |
| hasOfferCatalog | 料金のメニュー(複数のプラン) | プランごとのOffer |
いちばん大事なのは provider でつなぐこと
Serviceだけを書いても、「どの会社のサービスか」が分からなければ、AIは誰に頼めばいいのか判断できません。トップページのLocalBusinessに @id を付けておき、Serviceの provider から同じ @id を指すと、会社とサービスがひとつながりの情報になります。
基本の書き方:外壁塗装の例
外壁塗装のサービスのページに入れる、基本のJSON-LDの例です。〇〇の部分を自社の情報に置き換えて使います。
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Service",
"name": "外壁塗装",
"serviceType": "外壁塗装工事",
"description": "戸建て住宅の外壁塗装です。現地調査と見積もりは無料。足場の設置、高圧洗浄、下地の補修、3回塗り、完了後の点検まで自社の職人が行います。",
"url": "https://example.com/service/gaiheki/",
"provider": {
"@type": "HomeAndConstructionBusiness",
"@id": "https://example.com/#business",
"name": "〇〇塗装",
"telephone": "+81-58-000-0000"
},
"areaServed": [
{"@type": "City", "name": "岐阜市"},
{"@type": "City", "name": "各務原市"},
{"@type": "City", "name": "大垣市"}
],
"offers": {
"@type": "Offer",
"priceCurrency": "JPY",
"price": "800000",
"description": "30坪の戸建て、シリコン塗料の場合の目安(税込)。足場代を含みます。"
}
}
</script>
@typeのHomeAndConstructionBusinessは、住宅の工事や修理をする会社を表す、LocalBusinessの仲間の型ですproviderの@idは、トップページのLocalBusinessに付けた@idと同じにしますpriceは数字だけを書き、カンマや「円」は付けません
WordPressの場合は、SEOプラグインの「ページごとのスキーマ」の機能か、テーマの「head内に挿入するコード」の欄などに貼ります。プラグインなしで入れる方法はWordPressに構造化データをプラグインなしで入れる方法の記事で説明しています。
料金の書き方3パターン
サービス業の料金は、「決まった金額」「〇〇円から」「〇〇円〜〇〇円」など、書き方がさまざまです。それぞれの書き方を紹介します。
パターン1:決まった金額
エアコン清掃1台11,000円のように、金額が決まっている場合です。
"offers": {
"@type": "Offer",
"price": "11000",
"priceCurrency": "JPY"
}
パターン2:〇〇円から(最低料金)
「5,500円〜」のように、最低の金額だけを示す場合は、PriceSpecification の minPrice を使います。
"offers": {
"@type": "Offer",
"priceSpecification": {
"@type": "PriceSpecification",
"minPrice": "5500",
"priceCurrency": "JPY"
}
}
パターン3:〇〇円〜〇〇円(幅のある料金)
「60万〜120万円」のように幅がある場合は、minPrice と maxPrice の両方を書きます。
"offers": {
"@type": "Offer",
"priceSpecification": {
"@type": "PriceSpecification",
"minPrice": "600000",
"maxPrice": "1200000",
"priceCurrency": "JPY"
}
}
複数のプランがある場合
プランが複数あるときは、hasOfferCatalog を使って、メニューの一覧として書けます。
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "エアコン清掃の料金",
"itemListElement": [
{"@type": "Offer", "name": "壁掛けエアコン(標準)", "price": "11000", "priceCurrency": "JPY"},
{"@type": "Offer", "name": "壁掛けエアコン(お掃除機能付き)", "price": "19800", "priceCurrency": "JPY"},
{"@type": "Offer", "name": "防カビ抗菌コート(追加)", "price": "2200", "priceCurrency": "JPY"}
]
}
構造化データの料金は、ページに書いてある料金と同じにする
Googleは、ページに表示されていない内容を構造化データに書かないよう求めています。料金を構造化データに書くなら、同じ料金をページの本文にも書いてください。「料金は見積もりで」としか書いていないページに、構造化データだけで金額を入れるのは避けましょう。
対応エリアの書き方
対応エリアは areaServed に書きます。書き方はいくつかあります。
| 書き方 | 例 | 向いている場合 |
|---|---|---|
| 市区町村を並べる | {"@type": "City", "name": "岐阜市"} を複数 | 出張の範囲が市区町村で決まっている |
| 都道府県で書く | {"@type": "State", "name": "岐阜県"} | 県内全域に対応している |
| 文字で書く | "areaServed": "岐阜県全域と愛知県の一部" | 細かい範囲を文章で伝えたい |
| 全国 | {"@type": "Country", "name": "日本"} | オンラインで全国に対応している |
対応エリアは、ページの本文にも「対応エリア:岐阜市・各務原市・大垣市(そのほかの地域はご相談ください)」のように書いておきます。AIに「〇〇市で頼める?」と聞かれたときの答えの材料になります。
業種別のコード例
ハウスクリーニング(出張型)
店舗を持たない出張型のサービスでも、Serviceで対応エリアと料金を書けます。
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Service",
"name": "エアコンクリーニング",
"serviceType": "ハウスクリーニング",
"description": "壁掛けエアコンの分解洗浄です。作業時間は1台あたり約1時間半。高圧洗浄機で内部のカビやほこりを落とします。",
"provider": {"@id": "https://example.com/#business"},
"areaServed": [
{"@type": "City", "name": "名古屋市"},
{"@type": "City", "name": "春日井市"}
],
"offers": {
"@type": "Offer",
"price": "11000",
"priceCurrency": "JPY"
}
}
</script>
provider に @id だけを書く形でも、同じページかトップページに、その @id を持つLocalBusinessがあれば、つながりが伝わります。
税理士事務所(士業)
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Service",
"name": "個人事業主の税務顧問",
"serviceType": "税務顧問",
"description": "記帳のチェック、月1回の面談、確定申告書の作成までを行う、個人事業主向けの顧問契約です。クラウド会計に対応しています。",
"provider": {
"@type": "AccountingService",
"@id": "https://example.com/#business",
"name": "〇〇税理士事務所"
},
"areaServed": {"@type": "State", "name": "岐阜県"},
"offers": {
"@type": "Offer",
"priceSpecification": {
"@type": "UnitPriceSpecification",
"minPrice": "11000",
"priceCurrency": "JPY",
"unitText": "月"
}
}
}
</script>
月額の料金は、UnitPriceSpecification を使い、unitText に「月」と書くと、期間ごとの料金であることを伝えられます。
〇〇自動車整備の車検ページ
ページの本文:「車検の基本料金は、軽自動車14,300円、小型車16,500円(税込、法定費用は別)。対応エリアは〇〇市と周辺の市町。代車を無料で用意しています。」
構造化データ:Serviceの name を「車検」、hasOfferCatalog に軽自動車と小型車の2つのOfferを入れ、provider を AutoRepair(自動車整備の型)の@idで指定する。
ポイント:「法定費用は別」のように、料金に含まれないものも本文と description に書いておく。
よくある間違いと、確認の方法
よくある間違い
- 会社の情報をServiceに書いてしまう:会社の住所や営業時間はLocalBusinessに書き、Serviceには書かない
- price に「円」や「〜」を入れる:price は数字だけ。「〜」を表したいときは minPrice を使う
- ページにない料金を書く:構造化データの料金は、本文の料金と同じにする
- すべてのページに同じServiceを入れる:Serviceは、そのサービスを説明しているページに入れる
- JSONの書き間違い:最後の項目の後ろにカンマを付ける、引用符を全角にする、などで全体が読まれなくなる
確認の方法
貼ったら、必ず確認してください。
- Schema Markup Validator(schema.orgの確認ツール)にURLかコードを入れ、Serviceが読み取れているか、エラーがないかを見る
- Googleのリッチリザルトテストでも、ページ全体のエラーがないかを確認する(Serviceはリッチリザルトの対象外なので、「検出なし」でも問題ありません)
- 選ばれるAI診断で、「ページの内容を構造化データで伝えているか」の判定を確かめる
確認の手順は構造化データの確認方法の記事で詳しく説明しています。
Serviceの構造化データのチェックリスト
- サービスごとに、name と description を書いている
- provider で、トップページのLocalBusinessの@idを指している
- 料金は、ページの本文と同じ金額で、数字だけを書いている
- 対応エリアを areaServed に書き、本文にも同じ範囲を書いている
- 確認ツールでエラーが出ていない
- 会社の住所・営業時間は、LocalBusinessのほうに書いている
入力欄に書き込むだけで、会社の情報(LocalBusiness)のコードを作れる無料ツールもあります。まずは会社の情報を整えてから、サービスのページにServiceを足していく順番がおすすめです。
構造化データ作成ツールを使う(無料)よくある質問
ServiceとLocalBusinessは、両方書く必要がありますか?
両方あるのが理想です。LocalBusinessは「どの会社か」、Serviceは「何を提供しているか」を伝えます。どちらか一つから始めるなら、まずトップページにLocalBusinessを入れ、次にサービスのページにServiceを足してください。
Serviceを書くと、検索結果の見た目は変わりますか?
変わりません。ServiceはGoogleのリッチリザルトの対象ではないため、検索結果に星や料金が表示されることはありません。ページの内容の種類や料金・対応エリアを、機械に正確に伝えるために書きます。
料金を公開していない場合は、どう書けばいいですか?
offers は書かずに、name・description・areaServed・provider だけを書きます。構造化データだけに料金を書くのは避けてください。料金をページに載せるかどうかの考え方は、ホームページに料金を載せるべきかの記事で説明しています。
サービスが10種類以上ある場合は、全部書くべきですか?
サービスごとに説明のページがあるなら、それぞれのページに、そのサービスのServiceを書きます。1ページにまとめて紹介している場合は、主なサービスから書き始め、hasOfferCatalog で一覧にする方法もあります。
serviceType には何を書けばいいですか?
決まった言葉の一覧はないので、お客さんが探すときに使う言葉で書きます。「外壁塗装工事」「ハウスクリーニング」「税務顧問」のように、業界でふつうに使われる言い方にしておくと伝わりやすくなります。
店舗を持たない出張型でも使えますか?
使えます。むしろ、店舗がない分、対応エリアを areaServed で伝えることが大事です。会社の情報は、住所を出さない場合でも、名前・電話番号・対応エリアを書いて伝えられます。
まとめ
Serviceの構造化データの書き方をまとめます。
この記事のまとめ
- Serviceは、会社が提供するサービスを表す型。会社そのものはLocalBusiness、サービスはServiceと分けて書く
- 書く項目は name・serviceType・description・provider・areaServed・offers が中心
- provider でトップページのLocalBusinessの@idを指し、会社とサービスをつなぐ
- 料金は数字だけで書き、「〜」は minPrice、幅は minPrice と maxPrice で表す。本文と同じ金額にする
- 22業種・2,296サイトのうち91%が、ページの内容を構造化データで伝えていなかった
- Serviceはリッチリザルトの対象ではないが、サービス名・料金・対応エリアを誤解なく伝えられる
まずは、自分のサイトの構造化データが今どうなっているかを確かめてください。選ばれるAI診断なら、URLを入れるだけで、22項目の判定と理由を無料で確認できます。
自分のサイトを、無料で診断する参考にした資料
- Service(schema.org)
- Offer(schema.org)
- PriceSpecification(schema.org)
- 構造化データに関する一般的なガイドライン(Google 検索セントラル)
調査の方法:2026年10月、選ばれるAI診断(2026年10月2日に見直した採点基準)で、工務店・税理士事務所・外壁塗装・自動車整備・行政書士事務所・不動産会社など22業種の公式サイト2,296件を診断した結果です。割合は、22項目のうち「不足」または「一部不足」と判定されたサイトの割合です。個別のサイト名と点数は公開していません。