前言
某外贸 WordPress 网站上线 TranslatePress
多语言插件后,服务器日志中持续出现大量:
/wp-content/plugins/translatepress-multilingual/includes/trp-ajax.php
请求。
虽然网站能够正常访问,但:
- Ajax 请求数量巨大
- 搜索引擎蜘蛛不断触发动态翻译
- PHP 持续处理 Ajax
- CPU 与 MySQL 负载升高
本文以 example.com 为示例,记录完整排查过程。
问题现象
日志中可以看到大量 POST:
POST /wp-content/plugins/translatepress-multilingual/includes/trp-ajax.php
同时还能发现:
- Baiduspider
- Baiduspider-render
- Bytespider
不断访问各种语言页面。
TranslatePress 在前端需要通过 Ajax
获取动态字符串翻译,因此蜘蛛也会触发该接口。
第一步:分析日志
实时查看:
tail -f /www/wwwlogs/example.com.log
过滤蜘蛛:
tail -f /www/wwwlogs/example.com.log | grep -Ei "Baiduspider|Bytespider"
过滤 Ajax:
tail -f /www/wwwlogs/example.com.log | grep trp-ajax.php
同时查看状态码:
grep "trp-ajax.php" access.log | awk '{print $9}' | sort | uniq -c
这些命令能够快速判断是否存在异常访问。
第二步:尝试 Nginx 拦截
最开始考虑直接在 Nginx 拦截:
location = /wp-content/plugins/translatepress-multilingual/includes/trp-ajax.php {
if ($http_user_agent ~* "Baiduspider") {
return 403;
}
}
过程中遇到了:
- include 路径问题
- fastcgi 配置问题
- php upstream 配置问题
虽然最终能够正常运行,但后续维护复杂,而且插件升级后仍可能发生变化。
因此没有作为最终方案。
第三步:阅读插件源码
阅读 TRP_Ajax 可以发现:
构造函数一开始便直接验证:
- action
- originals
- language
随后立即:
- 读取 wp-config.php
- 建立 MySQL 连接
- 查询翻译表
- 输出 JSON
整个文件完全绕过 WordPress Hook。
因此:
- 没有 action
- 没有 filter
- 没有 do_action
意味着:
几乎没有可以利用的扩展点。
第四步:WordPress 层拦截蜘蛛
既然插件无法扩展,那么就在 WordPress 最前面终止请求。
add_action('init', function () {
if (empty($_SERVER['HTTP_USER_AGENT'])) {
return;
}
$ua = $_SERVER['HTTP_USER_AGENT'];
foreach ([
'Baiduspider',
'Baiduspider-render',
'Bytespider'
] as $bot) {
if (stripos($ua, $bot) !== false) {
status_header(403);
exit('403 Forbidden');
}
}
});
这样蜘蛛进入 WordPress 后立即结束,不再执行后续逻辑。
第五步:robots.txt
对于纯外贸网站,如果不需要百度收录,可直接禁止:
User-agent: Baiduspider
Disallow: /
User-agent: Baiduspider-render
Disallow: /
User-agent: Bytespider
Disallow: /
robots 属于礼貌协议,真正的拦截仍建议配合 403。
验证结果
再次观察日志:
GET ... 403
POST admin-ajax.php 403
POST trp-ajax.php 403
说明:
- 百度蜘蛛已无法抓取页面
- Render Spider 无法执行 JS
- Ajax 请求被终止
- TranslatePress 不再为百度执行动态翻译
普通用户浏览网站完全不受影响。
为什么选择这种方案
对于面向 Google、Bing 等国际搜索引擎的外贸网站而言:
- 百度几乎不会带来有效询盘
- Render Spider 会增加服务器压力
- TranslatePress Ajax 属于动态计算
- 阻止百度收益明显大于成本
因此:
robots.txt + functions.php
的组合,是成本最低、维护最简单、效果稳定的方案。
最佳实践
建议按优先级:
- robots.txt 告知蜘蛛不要抓取
- functions.php 返回 403
- 定期查看访问日志
- 监控 Ajax 请求数量
- 保持 TranslatePress 更新
FAQ
为什么 robots.txt 不够?
因为蜘蛛可能忽略 robots,403 才是真正阻止访问。
为什么不用 Nginx?
可以使用,但配置复杂、迁移成本高。对于多数 WordPress 项目,PHP
层维护更方便。
会影响 Google 吗?
不会,只拦截指定 User-Agent。
总结
本次优化最大的收获不是写出几行配置,而是建立了完整的排查思路:
- 先分析日志
- 再定位来源
- 阅读插件源码
- 验证是否存在 Hook
- 对比 Nginx 与 WordPress 两种实现
- 选择维护成本最低的方案
很多性能问题并不需要复杂架构,只要理解请求链路,往往就能找到简单而稳定的解决方式。
本文由 好主题 原创整理,致力于分享实用的 WordPress 建站知识与主题开发经验。 我们专注于提供高质量的 WordPress企业主题 资源,帮助中小企业轻松构建专业网站。 转载请注明来源,并保留原文链接,感谢您的支持与理解。