本文约 4,705 字,预计阅读 12 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:客户搜”附近开锁”,你的店名在地图上找不到
做家政、维修、开锁、牙科、律所这类本地服务,站点的价值不在于内容多,而在于能不能被”附近的人”找到。很多老板花了钱做官网,结果客户在地图上搜”附近 24 小时开锁”,出现的全是竞品——因为你的站点没有给搜索引擎提供结构化的门店信息:地址格式混乱、营业时间写成了”早八点到晚八点”、电话是手机号还是座机没标清、更没有 LocalBusiness 结构化数据。
本地 SEO 的核心不是关键词密度,而是NAP 一致性(Name、Address、Phone)和地理信号。你的站点、Google Business Profile、各类目录站上的这三项必须逐字符一致,否则搜索引擎会认为这是几家不同的店,权重被稀释,本地包(Local Pack)里自然排不进去。
原理分析:本地站点需要提供的四类信号
| 信号类型 | 具体表现 | 实现方式 | 权重 |
|---|---|---|---|
| NAP 一致性 | 名称、地址、电话全渠道一致 | 统一字段,集中管理 | 高 |
| 地理信号 | 经纬度、服务区域、地图嵌入 | GeoCoordinates + 地图 | 高 |
| 时间信号 | 营业时间、节假日特殊时段 | openingHoursSpecification | 中 |
| 信任信号 | 评价评分、资质、实景 | 评价聚合 + 图片 | 高 |
其中营业时间必须用结构化字段而不是自然语言。”9:00-18:00 周一至周五”这种写法机器不好解析,应写成 openingHoursSpecification 数组,每个条目含 dayOfWeek、opens、closes。节假日闭店也要单独标注,否则客户大年初一跑过去吃闭门羹,直接给差评。
保姆级实操
步骤 1:门店信息集中到一个 CPT
如果有多个门店,注册 location 文章类型,字段包含:门店名、地址、电话、经纬度、营业时间、服务区域。单店也建议这么做,因为字段化后 schema 输出可以直接读这些值,而不是从正文里硬编码。
步骤 2:把 NAP 写成可复用的片段
在主题里定义一个输出 NAP 的函数,全站所有位置(头部、页脚、联系页、schema)都调用它,从根上保证一致:
function mf_nap( $post_id = 0 ) {
$post_id = $post_id ?: get_the_ID();
return array(
'name' => get_post_meta( $post_id, '_loc_name', true ) ?: get_bloginfo( 'name' ),
'street' => get_post_meta( $post_id, '_loc_street', true ),
'city' => get_post_meta( $post_id, '_loc_city', true ),
'region' => get_post_meta( $post_id, '_loc_region', true ),
'postal' => get_post_meta( $post_id, '_loc_postal', true ),
'phone' => get_post_meta( $post_id, '_loc_phone', true ),
'lat' => (float) get_post_meta( $post_id, '_loc_lat', true ),
'lng' => (float) get_post_meta( $post_id, '_loc_lng', true ),
);
}
步骤 3:输出 LocalBusiness 结构化数据
这是本地站最关键的一步。用 wp_head 为门店页输出 JSON-LD:
add_action( 'wp_head', function () {
if ( ! is_singular( 'location' ) ) {
return;
}
$nap = mf_nap();
$schema = array(
'@context' => 'https://schema.org',
'@type' => 'LocalBusiness',
'name' => $nap['name'],
'telephone' => $nap['phone'],
'address' => array(
'@type' => 'PostalAddress',
'streetAddress' => $nap['street'],
'addressLocality' => $nap['city'],
'addressRegion' => $nap['region'],
'postalCode' => $nap['postal'],
'addressCountry' => 'CN',
),
'geo' => array(
'@type' => 'GeoCoordinates',
'latitude' => $nap['lat'],
'longitude' => $nap['lng'],
),
'openingHoursSpecification' => array(
array(
'@type' => 'OpeningHoursSpecification',
'dayOfWeek' => array( 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday' ),
'opens' => '09:00',
'closes' => '18:00',
),
array(
'@type' => 'OpeningHoursSpecification',
'dayOfWeek' => 'Saturday',
'opens' => '10:00',
'closes' => '16:00',
),
),
'priceRange' => '$$',
);
echo '<script type="application/ld+json">' .
wp_json_encode( $schema, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES ) .
'</script>';
} );
上线后用 Google 的富媒体结果测试工具验证,确认没有必填字段缺失的警告。
步骤 4:地图嵌入要兼顾加载速度
直接内嵌 Google Maps iframe 会拖慢页面。推荐做法是首屏放一张静态地图缩略图(或截图),点击后再加载真正的 iframe——即”点击加载”模式。若用 Leaflet 这类轻量库,配合 OpenStreetMap 瓦片国内访问更稳。插件可选 WP Store Locator(自带门店搜索与地图)或 Leaflet Map。
步骤 5:评价展示要真实且可验证
不要手写几条”张先生:服务很好”。要么接入 Google 评价(Smash Balloon 的 Reviews Feed 类插件或 Trustindex 的 Google Reviews 插件,走官方 API 拉取),要么在站内做真实评价收集并在展示时带上时间与服务项目。聚合评分可以加到 schema 的 aggregateRating 字段,但必须是真实数据的平均值,虚构评分属于违规,被识别后会失去富媒体展示资格。
步骤 6:绑定 Google Business Profile
站点之外必须去认领 Google Business Profile(原 Google My Business),填写的 NAP 与站点逐字符一致,上传实景照片,并在站点上链回你的商家主页。这一步对本地包排名的贡献往往大于站内优化。
步骤 7:每家门店一个独立页面
多门店不要挤在一个页面里。每家门店一个 URL,含独立 NAP、地图、营业时间、该店的实景照片和该店的评价。这样每家店都能参与本地搜索。
常见踩坑
- NAP 在不同页面写法不一致:有的写”北京市朝阳区XX大厦A座”,有的写”朝阳区XX大厦 A 座”,搜索引擎会当成两条记录。
- 营业时间只写自然语言:机器无法解析成结构化时段,本地搜索结果里不会显示”营业中”。
- schema 里写了假的
aggregateRating:Google 明确禁止自评式评分,被检测到会移除富媒体结果甚至手动处罚。 - 地图 iframe 直接全站加载:每页多 300KB 和数个第三方请求,移动端首屏明显变慢。
- 多门店共用一个页面:每家店都失去了独立排名的机会。
- 案例:某连锁家政的”权重稀释”:8 家门店共用一张联系页,且大众点评、官网、Google 上的电话分别是座机、400、手机号三种,Google 认为存在 5 个不同实体,本地包里长期排不到前三。统一 NAP 并拆成 8 个独立门店页 + 各自 schema 后,半年内 6 家门店进入本地包。
- 节假日营业时间不更新:春节照常显示”营业中”,客户白跑一趟,差评直接影响后续排名。
总结
本地服务站点是否做对,三个标准:NAP 在所有渠道是否逐字符一致、每家门店是否有独立的 URL 和结构化数据、评价是否真实可验证且能体现在 schema 中。行动清单:先把门店信息字段化并统一 NAP 输出函数,再为每个门店页输出 LocalBusiness JSON-LD,然后把地图改成点击加载模式,最后认领 Google Business Profile 并保持信息同步。本地站不需要海量内容,把这几件事做扎实,排名就会稳定。如果你的门店还涉及菜单与特殊营业时段,见 餐饮门店站菜单与营业时间;页面加载速度的要求可参考 落地页高性能制作。
