
本文介绍一种稳定、无需远程请求的方案,为 wordpress 子目录多站点(如 example.com/uk/、example.com/au/)自动注入符合 seo 规范的 hreflang 标签,支持排除特定自定义文章类型,并兼容访客缓存环境。
本文介绍一种稳定、无需远程请求的方案,为 wordpress 子目录多站点(如 example.com/uk/、example.com/au/)自动注入符合 seo 规范的 hreflang 标签,支持排除特定自定义文章类型,并兼容访客缓存环境。
在 WordPress 子目录型多站点(Subdirectory Multisite)架构中,为不同地区站点(如 /uk/、/au/)正确部署 hreflang 标签是实现国际化 SEO 的关键一环。原始方案依赖 get_headers() 进行 URL 可达性检测,虽逻辑直观,但在生产环境中极易因缓存、权限或响应延迟导致漏发标签(例如 UK 站首页在无登录态下缺失 en-gb 标签),且性能开销大、不可靠。
以下为优化后的推荐实现,已通过真实多站点环境验证:
生产级WordPress REST API集成,用于管理文章、页面、媒体、WooCommerce产品、Elementor内容、SEO元数据、ACF及JetEngine字段
✅ 推荐方案:静态路径映射 + 无网络请求
将语言站点与 hreflang 值硬编码为可信映射关系,彻底规避 HTTP 请求依赖,确保所有用户(含访客、CDN 缓存用户)均能获得完整、一致的 标签。
function mm_add_hreflang_attribute() {
// 排除 locations 自定义文章类型(单页 & 归档页)
if (is_singular('locations') || is_post_type_archive('locations')) {
return;
}
// 定义站点路径前缀与 hreflang 值的映射:[子目录路径, hreflang 值]
$sites = array(
array('', 'x-default'), // 主站(example.com/)→ x-default(默认主语言版本)
array('uk/', 'en-gb'), // UK 站(example.com/uk/)→ en-gb
array('au/', 'en-au'), // AU 站(example.com/au/)→ en-au
);
// 获取当前页面路径(去除 home_url 基础路径,保留相对路径如 /features/ 或 /about/)
$page_path = substr(get_permalink(), strlen(home_url('/')));
// 遍历所有语言站点,生成对应 hreflang 标签
foreach ($sites as $site) {
$geo_subdir = $site[0]; // 如 'uk/'
$hreflang = $site[1]; // 如 'en-gb'
$url = network_site_url() . $geo_subdir . ltrim($page_path, '/');
echo '<link rel="alternate" href="'%20.%20esc_url(%24url)%20.%20'" hreflang="' . esc_attr($hreflang) . '">' . PHP_EOL;
}
}
add_action('wp_head', 'mm_add_hreflang_attribute', 1);
? 关键改进说明
- 零网络请求:不再调用 get_headers(),避免因缓存策略(如 WP Engine、Cloudflare)、服务器限制或超时导致标签丢失;
- 全用户覆盖:无论是否登录、是否启用对象缓存或页面缓存,输出完全一致;
- 安全转义:使用 esc_url() 和 esc_attr() 防止 XSS 风险;
- 路径健壮性:ltrim($page_path, '/') 确保拼接时不会出现双斜杠(如 example.com/uk//features/);
- 归档页兼容:原答案中额外处理了 is_post_type_archive('locations'),本方案已统一在开头拦截,更简洁清晰;
- 执行优先级:add_action('wp_head', ..., 1) 确保标签位于 最前端,便于搜索引擎解析。
⚠️ 注意事项
- 请将代码添加至主站点的子主题 functions.php 中(非各子站点单独添加),因为多站点网络的 wp_head 钩子由主站点统一触发;
- 若未来新增语言站点(如 /ca/),只需在 $sites 数组中追加一行 array('ca/', 'en-ca') 即可;
- 确保各子站点实际存在且可通过对应路径访问(WordPress 多站点后台已启用相应站点);
- 建议配合 Google Search Console 的「国际化」报告定期验证 hreflang 实施效果。
此方案兼顾准确性、性能与可维护性,是 WordPress 子目录多站点 hreflang 自动化部署的生产就绪实践。










