- 状态
- 已解决
- 报告针对
- WPML Multilingual CMS 3.3.6
- 解决于
- 3.3.6
问题概述
页面头部可能缺少 hreflang meta 标签。自 WPML 3.3.6 起,在与过早加载 WPML 的主题或插件结合使用时,就会出现此问题。
WPML 应在您站点的头部区域包含 <link hreflang=”lang”> 标签。在使用 WPML 3.3.6 并结合某些插件或主题的一些站点中,缺少此标签。出现此问题的原因是,WPML 试图在头部尽早输出这些标签,但其他插件导致了竞争条件,从而过早触发了 WPML。您可能会收到来自 Google Webmaster tool 的电子邮件,提示“Incorrect hreflang implementation”。
有关此功能的完整说明,请参阅 Google 的语言和区域 URL 内容指南。
临时解决方法
要在 WPML 3.3.6 中修复此问题:
- 打开文件
sitepress-multilingual-cms/sitepress.class.php - 向下滚动到此文件的底部,您将看到以下内容:

- 替换此行:
add_action( 'wp_head', array( $this, 'head_langs' ), 1 ); - 替换为:
add_action( 'wp_head', array( $this, 'head_langs' ) ); - 此代码的最终版本必须如下所示:

- 保存文件
在下一个 WPML 版本中,将应用相同的修复。
第 3 步中的代码旨在尽可能早地输出 hreflang 元标记,但这会导致某些主题和插件出现问题。
如果您仍想尽可能早地输出 hreflang 元标记,可以应用更复杂的解决方案。将此代码添加到您主题的 functions.php 文件中:
function my_handle_head_hreflang() {
global $sitepress;
$settings = $sitepress->get_settings();
if ( $settings[ 'seo' ][ 'head_langs' ] ) {
remove_action( 'wp_head', array( $sitepress, 'head_langs' ) );
add_action( 'wp_head', array( $this, 'head_langs' ), 1 );
}
}
add_action('wpml_loaded', 'my_handle_head_hreflang');