最近,我将 WordPress 英文站从原来的:
https://www.shuijingwanwq.com/en/
迁移到了独立子域名:
https://en.shuijingwanwq.com/
中文站仍然使用:
https://www.shuijingwanwq.com/
网站采用 Polylang 的多域名模式,中英文站共用同一套 WordPress 程序、数据库和 Nginx 配置,但根据访问域名识别当前语言。
与此同时,我重新启用了 Yoast SEO。启用后,WordPress 原生站点地图:
https://www.shuijingwanwq.com/wp-sitemap.xml
逐渐被 Yoast SEO 生成的新站点地图取代:
https://www.shuijingwanwq.com/sitemap_index.xml
https://en.shuijingwanwq.com/sitemap_index.xml
这次调整不只是替换一个 Sitemap 地址,还涉及薄内容标签、缓存、多域名识别,以及 Google、Bing、360、百度和搜狗等搜索引擎平台中的资源更新。
本文记录完整的排查与处理过程。
一、当前网站环境
本次调整涉及的主要组件如下:
- WordPress
- Polylang 多域名模式
- Yoast SEO
- W3 Total Cache
- Redis Object Cache
- Cloudflare
- 腾讯云 EdgeOne
- WPCode
- OneinStack Nginx
- Google Search Console
- Bing Webmaster Tools
- 360 站长平台
- 百度搜索资源平台
- 搜狗资源平台
域名与 CDN 的分工为:
www.shuijingwanwq.com
↓
EdgeOne
↓
WordPress 中文站
en.shuijingwanwq.com
↓
Cloudflare
↓
WordPress 英文站
虽然两个域名走不同的 CDN,但源站使用的是同一套 WordPress 目录:
/data/wwwroot/www.shuijingwanwq.com/
因此,缓存和搜索引擎验证文件的处理方式,与两个完全独立的 WordPress 站点不同。
二、确认英文站 Yoast Sitemap 是否正常
英文站启用 Yoast SEO 后,新的 Sitemap 索引地址为:
https://en.shuijingwanwq.com/sitemap_index.xml
浏览器打开后,可以看到多个子 Sitemap,例如:
post-sitemap.xml
post-sitemap2.xml
page-sitemap.xml
category-sitemap.xml
post_tag-sitemap.xml
post_tag-sitemap2.xml
...
series-sitemap.xml
本次检查中,英文站 Sitemap Index 共包含 15 个子 Sitemap。
所有地址均使用:
https://en.shuijingwanwq.com/
没有混入:
https://www.shuijingwanwq.com/en/
也没有出现 canonical 指向中文域名的问题。

三、为薄内容标签设置 noindex,并从 Sitemap 排除
网站已有大量历史标签,其中许多英文标签仅关联一两篇文章。
如果这些标签页全部允许索引,容易产生大量内容价值较低的归档页面。因此,我最终将规则设置为:
标签关联文章数量少于 3 篇时,输出
noindex, follow,并从 Yoast XML Sitemap 中排除。
WPCode 中使用的完整代码如下:
/**
* 薄内容标签页 SEO 处理:
* 1. 标签文章数量少于 3 时,通过 Yoast SEO 输出 noindex。
* 2. 同时将这些标签从 Yoast XML Sitemap 中排除。
*/
$swq_thin_tag_threshold = 3;
/**
* 修改标签归档页的 Yoast robots 输出。
*/
add_filter(
'wpseo_robots',
function ( $robots ) use ( $swq_thin_tag_threshold ) {
if ( ! is_tag() ) {
return $robots;
}
$tag = get_queried_object();
if (
! $tag instanceof WP_Term ||
! isset( $tag->count )
) {
return $robots;
}
if ( (int) $tag->count < $swq_thin_tag_threshold ) {
return 'noindex, follow';
}
return $robots;
},
20
);
/**
* 将薄内容标签从 Yoast XML Sitemap 中排除。
*/
add_filter(
'wpseo_exclude_from_sitemap_by_term_ids',
function ( $excluded_term_ids ) use ( $swq_thin_tag_threshold ) {
global $wpdb;
$thin_tag_ids = $wpdb->get_col(
$wpdb->prepare(
"
SELECT term_id
FROM {$wpdb->term_taxonomy}
WHERE taxonomy = %s
AND count < %d
",
'post_tag',
$swq_thin_tag_threshold
)
);
if ( empty( $thin_tag_ids ) ) {
return $excluded_term_ids;
}
return array_values(
array_unique(
array_merge(
array_map( 'intval', (array) $excluded_term_ids ),
array_map( 'intval', $thin_tag_ids )
)
)
);
}
);
WPCode 设置为:
代码类型:PHP Snippet
插入方式:Auto Insert
Location:Frontend Only
状态:Active
这段代码的两部分作用不同:
wpseo_robots
负责控制标签归档页的 robots meta。
wpseo_exclude_from_sitemap_by_term_ids
负责将对应 term ID 从 Yoast Sitemap 中排除。
四、为什么修改代码后还要清理缓存
当前英文站同时存在多层缓存:
WordPress / Yoast 生成内容
↓
W3 Total Cache Object Cache
↓
W3 Total Cache Page Cache
↓
Cloudflare Cache
↓
浏览器或搜索引擎
只清理其中一层,可能仍然看到旧的 Sitemap 或旧 HTML。
1. 清理英文域名对象缓存
我使用之前整理的脚本:
/root/bin/w3tc-flush-host-object-cache en.shuijingwanwq.com
输出如下:
已按以下 Host 启动 WordPress,并调用 W3TC Object Cache 清理:
en.shuijingwanwq.com
这个脚本会按照指定 Host 启动 WordPress,避免在 Polylang 多域名环境中错误地按照中文域名加载配置。
2. 清理 Cloudflare 中的 XML 缓存
由于本次代码主要影响标签 Sitemap,因此在 Cloudflare 后台进入:
缓存
→ 配置
→ 自定义清除
→ URL
一次性清除了以下地址:
https://en.shuijingwanwq.com/sitemap_index.xml
https://en.shuijingwanwq.com/post_tag-sitemap.xml
https://en.shuijingwanwq.com/post_tag-sitemap2.xml
https://en.shuijingwanwq.com/post_tag-sitemap3.xml
https://en.shuijingwanwq.com/post_tag-sitemap4.xml
https://en.shuijingwanwq.com/post_tag-sitemap5.xml
https://en.shuijingwanwq.com/post_tag-sitemap6.xml
https://en.shuijingwanwq.com/post_tag-sitemap7.xml
https://en.shuijingwanwq.com/post_tag-sitemap8.xml
https://en.shuijingwanwq.com/post_tag-sitemap9.xml
Cloudflare 支持一次粘贴多条 URL,每行一个地址。

五、使用 curl 批量检查 9 个标签 Sitemap
浏览器截图只能看到 XML 中的一小部分内容,不适合检查近千个标签 URL。
因此,我使用下面的 Bash 脚本批量抓取英文站全部标签 Sitemap:
tmp="/tmp/en-tag-sitemap-check"
rm -rf "$tmp"
mkdir -p "$tmp"
curl -fsSL "https://en.shuijingwanwq.com/sitemap_index.xml" \
| grep -oE 'https://en\.shuijingwanwq\.com/post_tag-sitemap[0-9]*\.xml' \
| sort -V \
> "$tmp/maps.txt"
: > "$tmp/all-urls.txt"
while IFS= read -r map
do
file="$tmp/$(basename "$map")"
status="$(curl -sS -L \
-o "$file" \
-w '%{http_code}' \
"$map")"
grep -oE '<loc>[^<]+</loc>' "$file" \
| sed -E 's#</?loc>##g' \
> "$file.urls"
cat "$file.urls" >> "$tmp/all-urls.txt"
total="$(wc -l < "$file.urls")"
wrong_host="$(grep -Evc '^https://en\.shuijingwanwq\.com/' "$file.urls" || true)"
wrong_path="$(grep -Evc '^https://en\.shuijingwanwq\.com/tag/' "$file.urls" || true)"
printf '%-28s HTTP=%s URLs=%s 错误域名=%s 非标签路径=%s\n' \
"$(basename "$map")" \
"$status" \
"$total" \
"$wrong_host" \
"$wrong_path"
done < "$tmp/maps.txt"
map_count="$(wc -l < "$tmp/maps.txt")"
url_count="$(wc -l < "$tmp/all-urls.txt")"
echo
echo "站点地图文件数:$map_count"
echo "标签 URL 总数:$url_count"
echo
echo "异常网址:"
grep -Ev '^https://en\.shuijingwanwq\.com/tag/' \
"$tmp/all-urls.txt" \
| head -n 20
实际输出为:
post_tag-sitemap.xml HTTP=200 URLs=86 错误域名=0 非标签路径=0
post_tag-sitemap2.xml HTTP=200 URLs=123 错误域名=0 非标签路径=0
post_tag-sitemap3.xml HTTP=200 URLs=110 错误域名=0 非标签路径=0
post_tag-sitemap4.xml HTTP=200 URLs=113 错误域名=0 非标签路径=0
post_tag-sitemap5.xml HTTP=200 URLs=107 错误域名=0 非标签路径=0
post_tag-sitemap6.xml HTTP=200 URLs=107 错误域名=0 非标签路径=0
post_tag-sitemap7.xml HTTP=200 URLs=115 错误域名=0 非标签路径=0
post_tag-sitemap8.xml HTTP=200 URLs=92 错误域名=0 非标签路径=0
post_tag-sitemap9.xml HTTP=200 URLs=122 错误域名=0 非标签路径=0
检查结果表明:
- 9 个标签 Sitemap 全部返回
HTTP 200 - 没有错误域名
- 没有旧
/en/路径 - 所有地址均属于英文站
/tag/路径

六、重复标签导致的 Sitemap 误判
批量检查过程中,发现以下 URL 重复出现:
https://en.shuijingwanwq.com/tag/cdn-acceleration/
进一步检查 WordPress 后台后发现,数据库中存在两个名称和别名相同的标签。

另一个典型例子是:
https://en.shuijingwanwq.com/tag/wordpress-performance-optimization/
数据库中存在两个同别名标签:
一个标签关联 3 篇文章
另一个标签关联 2 篇文章
公开归档页实际展示 3 篇文章,robots 为:
<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1" />
canonical 为:
<link rel="canonical" href="https://en.shuijingwanwq.com/tag/wordpress-performance-optimization/" />
这个 URL 保留在 Sitemap 中是正确的。
这里需要注意:
Yoast 的排除过滤器按 term ID 工作,而搜索引擎最终看到的是 URL。
当多个 term ID 共用同一个 slug 时,只根据数据库中的某一个标签计数检查 URL,可能产生误报。
因此,验证薄标签时,应优先选择:
- slug 唯一
- 语言明确
- 文章数少于 3
- 不与其他标签共享公开 URL
的标签进行检查。
七、验证薄内容标签规则是否真正生效
我最终选取了 5 个没有重复 slug 的英文薄内容标签进行检查:
Microphone:1 篇
mouse:2 篇
(Failed) net:1 篇
-With map:1 篇
./yii file:1 篇
检查结果全部为:
HTTP 状态:200
Robots:<meta name='robots' content='noindex, follow' />
Sitemap:已排除
例如:
标签名称:Microphone
标签别名:microphone
数据库文章数:1
网址:https://en.shuijingwanwq.com/tag/microphone/
HTTP 状态:200
Robots:<meta name='robots' content='noindex, follow' />
Sitemap:已排除
这证明 WPCode 代码的两部分功能均已生效:
- 薄内容标签页面输出
noindex, follow - 薄内容标签 URL 不再出现在 Yoast XML Sitemap 中

八、Google Search Console 的调整
Google Search Console 中原来主要使用:
https://www.shuijingwanwq.com/
以及旧的 WordPress Sitemap:
https://www.shuijingwanwq.com/wp-sitemap.xml
本次调整后,在网域资源:
shuijingwanwq.com
中提交:
https://www.shuijingwanwq.com/sitemap_index.xml
https://en.shuijingwanwq.com/sitemap_index.xml
两份 Sitemap 最终均显示:
状态:成功
随后删除了 Google Search Console 中旧的提交记录:
https://www.shuijingwanwq.com/wp-sitemap.xml
这里删除的只是 Search Console 中的提交记录,不是删除服务器上的 WordPress 路由。
为英文站添加独立 URL 前缀资源
虽然网域资源已经覆盖所有子域名,但为了单独观察英文站数据,我又添加了:
https://en.shuijingwanwq.com/
作为 URL 前缀资源。
添加后,可以单独查看英文站的:
- 搜索点击
- 曝光量
- 查询关键词
- 网页索引状态
- HTTPS 状态
- Sitemap 抓取结果
- 从旧
/en/路径迁移到新子域的变化
英文资源中已经自动显示:
/sitemap_index.xml
状态:成功

九、Bing Webmaster Tools 的调整
Bing Webmaster Tools 中已经存在多个历史 Sitemap,包括:
https://www.shuijingwanwq.com/wp-sitemap.xml
https://www.shuijingwanwq.com/sitemap_index.xml
https://shuijingwanwq.com/sitemap.xml
随后手动提交:
https://en.shuijingwanwq.com/sitemap_index.xml
首次显示:
正在处理
刷新后即变为:
成功
英文 Sitemap 最初显示发现 15 个 URL,是因为 Bing 首先读取的是 Sitemap Index 中的 15 个子 Sitemap,后续还会继续处理子 Sitemap 中的页面 URL。
一个比较特别的地方是:Bing 当前界面没有提供明显的旧 Sitemap 删除入口。
无论在列表页还是详情页,右侧菜单中都只有:
重新提交
并没有 Google Search Console 中的“移除站点地图”。
因此,Bing 中保留历史 Sitemap 记录,不代表网站仍将旧 Sitemap 作为主要入口。当前正式使用的仍然是:
https://www.shuijingwanwq.com/sitemap_index.xml
https://en.shuijingwanwq.com/sitemap_index.xml

十、360 站长平台的调整
360 站长平台要求 Sitemap 与已验证站点绑定。
最开始站点列表中只有:
www.shuijingwanwq.com
不能直接在该站点下面提交:
https://en.shuijingwanwq.com/sitemap_index.xml
因此需要先进入:
站点管理
→ 添加二级站
添加:
en.shuijingwanwq.com
这里应选择“添加二级站”,而不是“添加网站”,因为 en 是已有主域名下面的子域名。
添加完成后:
- 为英文站启用 HTTPS
- 切换当前站点为
en.shuijingwanwq.com - 进入 Sitemap 提交
- 提交:
https://en.shuijingwanwq.com/sitemap_index.xml
提交成功后,360 显示了更新周期及“手动更新”入口。
最终,360 中中文站和英文站均使用 Yoast 的:
sitemap_index.xml

十一、百度添加英文站资源
百度搜索资源平台中,当前站点的 Sitemap 提交能力一直不可用,原来的 www 站点也是如此。
因此,百度本次只处理资源添加和验证,不再继续研究 Sitemap 提交。
进入:
用户中心
→ 站点管理
→ 添加网站
添加:
https://en.shuijingwanwq.com
站点属性选择:
信息技术
百度提供文件验证,下载得到类似:
baidu_verify_codeva-xxxxxxxx.html
由于 www 与 en 共用同一个 WordPress 根目录,只需要将文件上传到:
/data/wwwroot/www.shuijingwanwq.com/
确保可以通过英文域名访问:
https://en.shuijingwanwq.com/baidu_verify_codeva-xxxxxxxx.html
第一次验证失败,但再次验证后成功。
从现象看,更像是百度验证服务器访问 Cloudflare 英文站时出现了临时网络波动,而不是文件位置错误。

十二、搜狗验证遇到共享目录文件冲突
搜狗同样要求添加英文站资源,并提供文件验证。
但搜狗的文件名固定为:
sogousiteverification.txt
问题在于:
中文站之前的验证文件内容为一组旧验证码,而英文站新下载的同名文件内容是另一组验证码。
由于 www 与 en 共用同一个 WordPress 根目录:
/data/wwwroot/www.shuijingwanwq.com/
同一个目录下不可能同时保存两个不同内容的:
sogousiteverification.txt
如果直接覆盖,就可能影响中文站原有验证。
因此,我改用搜狗的 HTML 标签验证。
十三、WPCode 的 Site Wide Header 应该怎么使用
搜狗提供的验证标签格式类似:
<meta name="sogou_site_verification" content="YOUR_SOGOU_VERIFICATION_CODE" />
为了只在英文域名输出,我在 WPCode 中使用:
$host = strtolower(
preg_replace(
'/:\d+$/',
'',
$_SERVER['HTTP_HOST'] ?? ''
)
);
if ( 'en.shuijingwanwq.com' !== $host ) {
return;
}
echo '<meta name="sogou_site_verification" content="YOUR_SOGOU_VERIFICATION_CODE" />' . "\n";
WPCode 设置为:
代码类型:PHP Snippet
插入方式:Auto Insert
Location:Site Wide Header
这里不需要再写:
add_action( 'wp_head', ... );
因为 Site Wide Header 本身就表示 WPCode 会在 <head> 区域执行这段代码。
如果 Location 使用:
Frontend Only
才更适合在 PHP 代码中自行注册:
add_action( 'wp_head', ... );
这两个方案应选择其中一种,不要重复嵌套。
十四、为什么命令能看到验证标签,浏览器源代码却看不到
保存 WPCode 后,我先清理了英文域名对象缓存:
/root/bin/w3tc-flush-host-object-cache en.shuijingwanwq.com
随后用带随机查询参数的 curl 请求检查:
for host in en.shuijingwanwq.com www.shuijingwanwq.com
do
echo "================ $host ================"
curl -sS -L --compressed \
"https://$host/?_nocache=$(date +%s)" \
| grep -oiE '<meta[^>]+name=["'\'']sogou_site_verification["'\''][^>]*>' \
|| echo "未找到搜狗验证标签"
done
结果为:
================ en.shuijingwanwq.com ================
<meta name="sogou_site_verification" content="..." />
================ www.shuijingwanwq.com ================
未找到搜狗验证标签
这说明代码逻辑正确。
但通过:
view-source:https://en.shuijingwanwq.com/
查看普通首页源代码时,却仍然没有验证标签。
原因是英文首页的 W3 Total Cache Page Cache 仍然是旧版本。
对象缓存和页面缓存是两套不同缓存。清除 Object Cache,不会自动删除已经生成的静态 HTML Page Cache。
因此需要清除英文域名页面缓存目录:
rm -rf /data/wwwroot/www.shuijingwanwq.com/wp-content/cache/page_enhanced/en.shuijingwanwq.com
随后再次清除 Cloudflare 中:
https://en.shuijingwanwq.com/
这一条 URL 的缓存。
完成后,浏览器源代码中终于可以看到搜狗验证标签。
十五、为什么最终放弃搜狗英文站验证
即使页面源代码中已经存在正确的验证标签,搜狗仍然持续提示验证失败。
随后进入 Cloudflare:
安全性
→ 分析
→ 事件
筛选主机名:
en.shuijingwanwq.com
在搜狗验证失败的时间段,没有发现新的阻止、质询或 WAF 事件。
这说明:
- WPCode 代码已经生效
- W3TC 页面缓存已经更新
- Cloudflare 页面缓存已经更新
- Cloudflare 安全规则没有阻止验证请求
- 搜狗验证服务器可能没有成功访问英文站
可以临时将 Cloudflare 橙色云改为“仅 DNS”后再次验证,但考虑到:
- 搜狗给网站带来的流量一直很少
- 英文内容主要面向 Google 和 Bing 用户
- 即使验证成功,后续搜狗抓取英文子域仍可能不稳定
- 为搜狗单独调整 CDN 架构,收益很低
我最终决定放弃搜狗英文站资源。
WPCode 中的“搜狗英文站 HTML 验证标签”代码片段已经移入回收站。
缓存中暂时残留的验证 meta 不会影响 canonical、robots、Sitemap 或其他搜索引擎,因此没有再手动清理,等待缓存自然过期即可。


十六、最终的 Sitemap 结构
完成全部调整后,网站正式使用的 Sitemap 为:
中文站
https://www.shuijingwanwq.com/sitemap_index.xml
英文站
https://en.shuijingwanwq.com/sitemap_index.xml
搜索引擎平台的最终处理情况如下:
| 搜索引擎 | 中文站 | 英文站 | 最终状态 |
|---|---|---|---|
| 已提交 Yoast Sitemap | 已提交 Yoast Sitemap,并添加独立资源 | 成功 | |
| Bing | 已读取 Yoast Sitemap | 已提交 Yoast Sitemap | 成功 |
| 360 | 已切换至 Yoast Sitemap | 已添加二级站并提交 | 成功 |
| 百度 | 已有中文站资源 | 已添加并完成验证 | 当前无 Sitemap 提交入口 |
| 搜狗 | 保留原中文站 | 放弃添加英文站 | 不再处理 |
十七、这次排查得到的几个结论
1. 多域名模式下,缓存必须按 Host 清理
在 Polylang 多域名环境中,只在默认域名上下文中清理缓存,可能无法更新英文域名对应的配置和页面。
2. Object Cache 与 Page Cache 不能混为一谈
清理对象缓存不代表静态 HTML 页面已经更新。
当 PHP 代码已经生效,但普通页面源代码仍是旧内容时,应继续检查:
W3 Total Cache Page Cache
Cloudflare Cache
3. Yoast 的排除逻辑按 term ID 工作
如果数据库中存在多个同 slug 标签,单纯根据 URL 判断薄内容标签是否被排除,可能产生误判。
4. 搜索引擎后台的 Sitemap 管理能力差异很大
Google 可以明确删除提交记录。
Bing 可能长期显示自动发现或历史 Sitemap,且新版界面不一定提供删除功能。
360 要求先添加独立站点或二级站,才能提交对应 Host 的 Sitemap。
百度和搜狗的资源添加及验证方式,也与 Google、Bing 差异明显。
5. 不必为了低价值搜索引擎修改网站基础架构
如果一个搜索引擎流量极低,而验证、抓取和 CDN 访问又长期不稳定,继续投入时间未必值得。
SEO 配置也需要考虑投入产出,而不是追求每个平台都完全覆盖。
十八、总结
这次工作看似只是将站点地图从:
/wp-sitemap.xml
切换为:
/sitemap_index.xml
实际却涉及:
- 英文站从
/en/迁移到独立子域 - Polylang 多域名识别
- Yoast Sitemap 生成
- 薄内容标签 noindex
- 薄内容标签 Sitemap 排除
- 重复 term 与重复 slug
- W3TC Object Cache
- W3TC Page Cache
- Cloudflare XML 和 HTML 缓存
- Google、Bing、360、百度和搜狗资源调整
最终,中英文站已经形成两套清晰的 Yoast Sitemap:
https://www.shuijingwanwq.com/sitemap_index.xml
https://en.shuijingwanwq.com/sitemap_index.xml
薄内容标签的 robots 和 Sitemap 排除规则也已经通过实际 URL 验证。
至此,英文站启用独立 en 域名后,与 Sitemap 相关的主要调整已经完成。
WordPress 网站维护、性能优化与博客运营咨询
本站已持续运营超过 10 年,累计发布 1000+ 篇原创技术文章,长期实践 WordPress 网站建设、CDN / Cloudflare 配置、缓存优化、Google SEO、广告变现和多语言网站运营。
如果你的 WordPress 网站遇到访问慢、缓存异常、插件冲突、广告不显示、SEO 基础结构混乱、CDN 配置不确定等问题,可以联系我做一次远程技术排查。
适合以下用户:
✅ 个人博客站长
✅ WordPress 网站运营者
✅ 独立开发者与内容创作者
✅ SaaS 产品官网运营团队
✅ 希望优化网站速度与稳定性的站点
服务内容:
✅ WordPress 速度优化
✅ Cloudflare / CDN / 缓存配置排查
✅ 插件冲突与页面异常排查
✅ AdSense 广告显示问题排查
✅ SEO 基础结构检查
✅ 博客运营与商业化咨询
如需了解方案或交流相关问题,请直接联系我,并注明:WordPress 维护咨询。
联系方式:
Telegram:@shuijingwan
微信:13980074657
邮箱:shuijingwanwq@gmail.com

发表回复