大多数关于 LocalBusiness 模式标记的指南涵盖明显的字段:「name」、「address」、「telephone」、「openingHours」。大多数实现在那里就停止了。实现仅这些字段的大多数企业对 AI 引擎仍然是不可见的,不是因为他们的模式错误,而是因为它在对 AI 引用具体重要的方式上是不完整的。
AI 引擎对本地查询解析权重最大的字段是位置特定的字段:「geo」、「hasMap」、「areaServed」和「sameAs」。这些字段允许 AI 引擎将你的业务解析为明确的地理实体,使其与位置特定的查询相匹配,并确认其在多个权威源中的存在。本指南为你提供完整、可复制粘贴的 JSON-LD 实现,包括每个位置字段,并解释每个字段对你的 AI 可见性的作用。
位置字段为什么对 AI 独特重要
传统 SEO 模式指南将「geo」坐标视为可选。对于 Google 富搜索结果,坐标确实是可选的,Google 可以地理编码你的地址。对于 AI 引擎,坐标服务于根本不同的功能:实体歧义消除。
考虑一个名为「The Blue Door Café」的企业。整个欧洲可能有几十家具有这个名称或类似名称的企业。当 AI 引擎收到查询「café near me with good coffee」时,它需要解析正确的实体。地址字符串有所帮助,但它们容易出现格式不一致,「123 High St」对比「123 High Street」对比「123 High St, 1st floor」技术上是不同的字符串,即使它们描述相同的位置。
地理坐标是明确的。「"latitude": 52.3676, "longitude": 4.9041」不能与地球上的任何其他点混淆。当你的模式包含与你的 Google 商家资料图钉和 Apple 地图位置匹配的精确坐标时,AI 引擎可以确定地解析你的实体,引用置信度相应增加。
这个实体解析过程在我们的 关于 Gemini 如何推荐本地企业的指南 和 AEO 对本地企业意味着什么 的更广泛背景中进行了详细说明。
完整的 LocalBusiness JSON-LD 实现
以下是「LocalBusiness」的完整、生产就绪的 JSON-LD 块。将「@type」调整为你的特定业务类型(见下面关于选择正确类型的部分)。每个字段都标注了其目的。
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Maison Durand",
"alternateName": "Maison Durand Brasserie",
"description": "Traditional French brasserie in central Lyon serving seasonal Lyonnais cuisine since 1984. Reservations available for groups.",
"url": "https://www.maisondurand.fr",
"telephone": "+33-4-72-00-00-00",
"email": "contact@maisondurand.fr",
"address": {
"@type": "PostalAddress",
"streetAddress": "14 Rue Mercière",
"addressLocality": "Lyon",
"addressRegion": "Auvergne-Rhône-Alpes",
"postalCode": "69002",
"addressCountry": "FR"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 45.7640,
"longitude": 4.8357
},
"hasMap": "https://maps.google.com/?q=45.7640,4.8357",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday"],
"opens": "12:00",
"closes": "14:30"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday"],
"opens": "19:00",
"closes": "22:30"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Friday", "Saturday"],
"opens": "12:00",
"closes": "23:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Sunday"],
"opens": "12:00",
"closes": "15:00"
}
],
"servesCuisine": ["French", "Lyonnais"],
"priceRange": "€€",
"menu": "https://www.maisondurand.fr/menu",
"acceptsReservations": true,
"areaServed": {
"@type": "City",
"name": "Lyon"
},
"image": [
"https://www.maisondurand.fr/images/exterior.jpg",
"https://www.maisondurand.fr/images/interior.jpg",
"https://www.maisondurand.fr/images/menu-dish.jpg"
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "284",
"bestRating": "5",
"worstRating": "1"
},
"sameAs": [
"https://www.google.com/maps/place/Maison+Durand+Lyon",
"https://www.facebook.com/MaisonDurandLyon",
"https://www.tripadvisor.com/Restaurant_Review-maisondurand",
"https://www.yelp.com/biz/maison-durand-lyon"
],
"founder": {
"@type": "Person",
"name": "Pierre Durand"
},
"foundingDate": "1984",
"currenciesAccepted": "EUR",
"paymentAccepted": "Cash, Credit Card, Visa, Mastercard",
"amenityFeature": [
{
"@type": "LocationFeatureSpecification",
"name": "Outdoor seating",
"value": true
},
{
"@type": "LocationFeatureSpecification",
"name": "Wheelchair accessible",
"value": true
},
{
"@type": "LocationFeatureSpecification",
"name": "Wi-Fi",
"value": true
}
]
}
</script>
[Image: Browser developer tools showing the Elements panel with the HTML head section open, and the LocalBusiness JSON-LD script tag visible and expanded, showing the geo, sameAs, and openingHoursSpecification fields highlighted]
Field-by-Field Breakdown: The Location Fields That Matter
geo, Geocoordinates
"geo": {
"@type": "GeoCoordinates",
"latitude": 45.7640,
"longitude": 4.8357
}
What it does: Provides the precise geographic location of your business as a machine-readable coordinate pair. AI engines use this for entity disambiguation and for resolving location-specific queries.
How to find your coordinates: Open Google Maps, right-click your business location, and select "What's here?" The coordinates appear at the bottom of the screen. Alternatively, your Google Business Profile pin location has coordinates accessible via the GBP dashboard.
Common mistake: Using approximate coordinates (e.g., city centre coordinates) rather than your actual building location. AI engines cross-reference coordinates across sources, an imprecise match reduces confidence.
hasMap, Map Link
"hasMap": "https://maps.google.com/?q=45.7640,4.8357"
What it does: Provides a direct link to your location on a mapping platform. This serves as a verification signal, AI engines and crawlers can follow this link to confirm your geographic location.
Best practice: Use a coordinate-based Google Maps URL rather than a place-name URL, as coordinates are unambiguous. You can also add a second hasMap value pointing to your MapAtlas or OpenStreetMap location for additional corroboration.
areaServed, Service Area
"areaServed": {
"@type": "City",
"name": "Lyon"
}
For businesses with a delivery or service radius, use GeoCircle:
"areaServed": {
"@type": "GeoCircle",
"geoMidpoint": {
"@type": "GeoCoordinates",
"latitude": 45.7640,
"longitude": 4.8357
},
"geoRadius": "15000"
}
What it does: Tells AI engines the geographic area your business serves. This is essential for service businesses (plumbers, cleaners, delivery services) that cover an area beyond their physical address, and for "near me" query matching. A restaurant might use City. A delivery service covering a 15km radius would use GeoCircle with a radius in metres.
Common mistake: Omitting areaServed entirely. Without it, AI engines can only associate your business with queries containing your exact address or locality, not with the broader area you actually serve.
sameAs, Authoritative Profile Links
"sameAs": [
"https://www.google.com/maps/place/YOUR_PLACE_ID",
"https://www.facebook.com/yourbusiness",
"https://www.tripadvisor.com/Restaurant_Review-yourbusiness",
"https://www.yelp.com/biz/your-business"
]
What it does: Creates a corroboration network, links from your schema to the same entity appearing on authoritative external platforms. AI engines follow these links to verify that the entity on your website is the same as the entity on Google Maps, Facebook, and TripAdvisor. Each corroborating source increases citation confidence.
Minimum recommended sameAs links: Google Business Profile, Facebook, one industry-relevant directory (TripAdvisor for hospitality, Zocdoc for healthcare, Houzz for home services).
Common mistake: Including sameAs links that go to pages where your NAP information does not match your website. A mismatch in a sameAs target actively reduces confidence rather than increasing it.
The full NAP consistency picture is covered in our NAP consistency guide for AI search.
Choosing the Right @type
LocalBusiness is the base type. Using a more specific subtype gives AI engines better category signals. The most commonly used subtypes:
| Business Type | @type Value |
|---|---|
| Restaurant, café, bar | Restaurant, CafeOrCoffeeShop, BarOrPub |
| Hotel, B&B, hostel | Hotel, BedAndBreakfast, Hostel |
| Doctor, clinic | MedicalClinic, Physician |
| Dentist | Dentist |
| Gym, fitness studio | SportsActivityLocation, HealthClub |
| Lawyer | LegalService |
| Accountant | AccountingService |
| Retail shop | Store, or more specific: ClothingStore, ElectronicsStore |
| Museum, gallery | Museum |
| Tourist attraction | TouristAttraction |
| Real estate agency | RealEstateAgent |
If your specific type is not listed here, check the full Schema.org type hierarchy at schema.org/LocalBusiness.
How to Add JSON-LD to Your Website
Place the <script type="application/ld+json"> block inside the <head> element of every page that represents your business, at minimum your homepage and your contact/location page.
Static HTML sites: Paste the script tag directly into the <head> of your HTML file.
WordPress: Use the Yoast SEO or RankMath plugins (both have LocalBusiness schema fields in their settings), or add the raw JSON-LD via a header injection plugin.
Next.js / React: Add the script tag inside the <head> using next/head or the App Router's metadata API with a <script> element:
export default function Page() {
const schema = {
"@context": "https://schema.org",
"@type": "LocalBusiness",
// ... all fields
};
return (
<>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
/>
{/* page content */}
</>
);
}
Shopify: Add via the theme.liquid file's <head> section, or use a schema markup app from the Shopify App Store.
[Image: Screenshot of search.google.com/test/rich-results showing a LocalBusiness schema validation result with a green "Valid items detected" message and the detected fields listed: name, address, geo, openingHoursSpecification, aggregateRating]
验证你的实现
添加 JSON-LD 后,用两个工具验证它:
1. Google 富结果测试,「search.google.com/test/rich-results」 输入你的页面 URL 或直接粘贴你的 JSON-LD。该工具显示检测到的模式类型、验证所有字段并标记错误。有效的 LocalBusiness 结果意味着 Google 可以正确读取你的标记。
2. Schema.org 验证器,「validator.schema.org」 比 Google 工具更严格。将标记 Rich Results Test 有时遗漏的已弃用属性和类型不匹配。
3. MapAtlas AEO 检查器,「/aeo-checker」 具体审计 AI 引用信号,包括位置字段、外部源之间的 NAP 一致性以及 Rich Results Test 未覆盖的评论新鲜度。在 Google 验证后使用它来检查 AI 特定的图层。
Common Mistakes That Undermine AI Visibility
Using prose opening hours instead of openingHoursSpecification: "Mon–Fri 9am–6pm, Sat 10am–4pm, closed Sunday" is human-readable but not machine-readable. AI engines cannot reliably parse it for temporal query filtering.
Omitting geo because your address is complete: The address is for human comprehension. Geocoordinates are for machine resolution. You need both.
Mismatching sameAs targets: If your Facebook page has a different phone number than your website, the sameAs link creates a contradiction rather than corroboration. Fix the source before linking to it.
Stale aggregateRating values: Some implementations hardcode the rating count. A static "reviewCount": "47" that was accurate in 2023 but is now incorrect creates a data quality signal that reduces AI confidence. Either use a dynamic value or omit the field if you cannot keep it current.
Multiple JSON-LD blocks per page: If you have multiple schema scripts on one page, make sure they do not contradict each other. A page with one block saying "telephone": "+33-4-72-00-00-00" and another block saying "telephone": "+33 4 72 00 00 01" creates a conflict.
The Long-Term Compounding Effect
JSON-LD schema is not a one-time tactic. Each time an AI engine crawls your website and finds a complete, consistent, accurate schema block, the confidence score for your entity increases incrementally. Over time, this compounding builds a citation presence that becomes self-reinforcing: more citations generate more visits, more reviews, more mentions, which in turn generate more structured signal for AI engines to find.
The complete AEO guide for local businesses walks through how to build this compounding system across all the channels that feed AI citation engines, not just your website schema.
Start with the free MapAtlas AEO Checker to see your current schema completeness score, then use the AI Search Visibility solution to implement and monitor the full structured data stack. The JSON-LD above is the foundation, build on it consistently and your AI citation presence will grow with every engine update.

