多门店与多地区 SEO
单个本地 SEO 页面是起点——真正的挑战是在几十个城市/地区都做到第一页。
多地区 SEO 架构
graph TD
BRAND[品牌官网] --> NATIONAL[全国落地页]
NATIONAL --> PROVINCE[省级页面]
PROVINCE --> CITY[城市页面]
CITY --> STORE[门店详情页]
BRAND --> GBP[Google商家主页集合]
GBP --> GBP1[门店A GBP]
GBP --> GBP2[门店B GBP]
CITY --> SCHEMA[本地Schema标记]
CITY --> REVIEWS[评价系统]
CITY --> CITATION[本地引用]
style CITY fill:#c8e6c9,stroke:#388e3c,stroke-width:2px
style STORE fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
多门店页面生成器
"""
多门店 SEO 落地页框架
"""
from dataclasses import dataclass, field
@dataclass
class StoreLocation:
store_id: str
city: str
district: str
address: str
phone: str
hours: dict[str, str]
services: list[str]
manager_name: str
review_count: int
avg_rating: float
nearby_landmarks: list[str]
lat: float
lng: float
class LocalPageGenerator:
"""本地 SEO 落地页内容生成"""
@staticmethod
def generate_title(store: StoreLocation, brand: str, service: str) -> str:
"""H1 标题 — 城市 + 服务 + 品牌"""
return f"{store.city}{store.district}{service} — {brand}官方门店"
@staticmethod
def generate_meta(store: StoreLocation, brand: str, service: str) -> str:
"""Meta Description — 含城市、服务、评分"""
return (
f"{store.city}{service}首选,{brand}{store.district}门店。"
f"{store.review_count}条真实评价,均分{store.avg_rating}星。"
f"地址:{store.address},电话:{store.phone}。"
)[:160]
@staticmethod
def generate_schema(store: StoreLocation, brand: str) -> dict:
"""LocalBusiness JSON-LD Schema"""
return {
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": f"{brand} — {store.city}{store.district}店",
"address": {
"@type": "PostalAddress",
"streetAddress": store.address,
"addressLocality": store.city,
"addressRegion": store.district,
"addressCountry": "CN",
},
"telephone": store.phone,
"geo": {
"@type": "GeoCoordinates",
"latitude": store.lat,
"longitude": store.lng,
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": day,
"opens": hours.split("-")[0],
"closes": hours.split("-")[1],
}
for day, hours in store.hours.items()
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": store.avg_rating,
"reviewCount": store.review_count,
},
}
@staticmethod
def generate_unique_content(store: StoreLocation, brand: str) -> str:
"""生成差异化本地内容(避免复制粘贴惩罚)"""
landmarks = "、".join(store.nearby_landmarks[:2])
services = "、".join(store.services[:3])
return f"""
## {store.city}{store.district}门店介绍
位于{store.address},紧邻{landmarks},
{brand} {store.city}门店提供{services}等专业服务。
由{store.manager_name}团队运营,累计服务客户 {store.review_count * 3} 人次,
Google Maps 评分 {store.avg_rating}/5.0({store.review_count} 条评价)。
### 营业时间
{chr(10).join(f"- {day}: {hours}" for day, hours in store.hours.items())}
### 联系方式
- 电话:{store.phone}
- 地址:{store.address}
""".strip()
@classmethod
def audit_uniqueness(cls, stores: list[StoreLocation]) -> dict:
"""检测多门店页面差异度"""
issues = []
for s in stores:
score = 0
if s.nearby_landmarks:
score += 20
if s.review_count > 20:
score += 20
if len(s.services) >= 3:
score += 20
if s.manager_name:
score += 20
if s.avg_rating > 0:
score += 20
if score < 60:
issues.append(f"⚠️ {s.city}{s.district}店 差异化不足(得分 {score}/100)")
return {
"总门店数": len(stores),
"高质量门店页": sum(1 for s in stores if s.review_count > 20 and s.nearby_landmarks),
"需改进": issues,
}
# 演示
brand = "快修星"
stores = [
StoreLocation(
"SH001", "上海", "浦东新区",
"张杨路1600号", "021-88888001",
{"周一至周五": "09:00-20:00", "周末": "10:00-18:00"},
["手机维修", "电脑维修", "上门服务"],
"李明", 245, 4.7,
["正大广场", "陆家嘴地铁站"], 31.2304, 121.5434,
),
StoreLocation(
"BJ001", "北京", "朝阳区",
"三里屯太古里南区", "010-66666001",
{"每日": "10:00-21:00"},
["手机维修", "配件零售", "数据恢复"],
"张华", 312, 4.8,
["三里屯酒吧街", "工体"], 39.9277, 116.4563,
),
]
gen = LocalPageGenerator()
print("=== 多门店 SEO 落地页生成 ===\n")
for store in stores:
print(f"--- {store.city}{store.district}门店 ---")
print(f"H1: {gen.generate_title(store, brand, '手机维修')}")
print(f"Meta: {gen.generate_meta(store, brand, '手机维修')}")
print(f"Schema类型: LocalBusiness + AggregateRating")
print(f"本地内容预览:\n{gen.generate_unique_content(store, brand)[:200]}...\n")
audit = gen.audit_uniqueness(stores)
print(f"=== 门店页质量审计 ===")
print(f" 总门店: {audit['总门店数']} 高质量: {audit['高质量门店页']}")
for issue in audit["需改进"]:
print(f" {issue}")
多地区 URL 结构策略
| 结构 | 示例 | 优势 | 劣势 |
|---|---|---|---|
| 子目录(推荐) | /locations/shanghai/ | 权重集中,管理方便 | 需要父域名权威支撑 |
| 子域名 | shanghai.brand.com | 独立运营灵活 | 权重分散 |
| 独立域名 | brand-shanghai.com | 完全独立 | 成本高,权重不共享 |
| 参数型(不推荐) | /store?city=sh | 易被合并,不利爬取 | Googlebot 可能忽略 |
行动清单
- [ ] 为每个城市/门店建立独立 URL 子目录(
/locations/城市/),避免重复内容 - [ ] 每个门店页加入独特内容:门店照片、店长介绍、周边地标、用户真实评价
- [ ] 批量在 Google Business Profile 管理后台创建和验证所有门店,保持 NAP 一致
- [ ] 实现 LocalBusiness Schema 的批量生成(参考上方代码模板),每店独立结构化数据
- [ ] 门店页内互链:同城相邻门店互相推荐("附近还有X门店"),城市页 → 门店详情页
- [ ] 监控每个城市关键词排名(用 BrightLocal / Semrush 本地排名追踪),月报汇总
下一节:03-本地Schema与结构化数据 — 结构化数据是赢得本地知识卡片和 Map Pack 的关键。