如何调试仅在(谷歌)机器人请求页面时发生的问题


How to debug an issue happening only when a (google) bot requests a page?

我的应用程序在从 googlebot 调用时抛出Zend_Locale_Exception,其中 ZF 发送以下错误消息:

区域设置的自动检测失败!

问题可能是因为未设置默认区域设置,但是我该如何调试呢?

由于谷歌机器人不是实时的,我需要实际伪造机器人发出的HTTP请求,但是我如何知道这个请求是如何发出的?

尝试发送带有 curl 的接受语言标头不会重现错误:

   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, 'http://www.mysite.com.br/');
   curl_setopt($ch, CURLOPT_HEADER, true);
   curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept-Language'));
   echo $data = curl_exec($ch);
   curl_close($ch);

编辑:

进一步澄清:

  • 我知道问题可能是缺少默认语言环境,但我需要调试这个
  • 更改
  • 浏览器的用户代理不起作用,它只会更改 UA 字符串,语言环境仍然从我的浏览器发送

Google 网站管理员工具中有一个"Fetch as Googlebot"功能。您可以使用它来触发机器人访问您的网站。您甚至可以临时将phpinfo()页面添加到您的网站并使用该功能点击该页面,这将在它显示给您的响应中列出所有标题。

我的建议是:

  • 始终设置默认区域设置,因此如果自动检测失败,默认情况下仍将使用区域设置。

为此,您可以在应用程序中添加.ini:

resources.locale.default = "en_US"

此外,请确保不要在引导程序中使用检测到的区域设置,如果必须这样做,请始终确保使用Zend_Locale的方法/插件中的$this->bootstrap('locale');"提升"区域设置资源。

您可以使用终端和浏览器(如 Lynx)模拟相同的行为,然后您可能需要取消设置一些环境变量(如 LANG、LANGUAGE)。

wget --user-agent "googlebot(at)googlebot.com User-Agent: Mozilla/5.0 (兼容;谷歌机器人/2.1;+http://www.google.com/bot.html)" "http://www.mysite.com.br/"

您看到异常的原因可能有很多,因此您不能只是"测试"它。当您需要针对 googlebot 请求进行测试时,您必须存储该请求,以便以后可以针对您的网络服务器重播该请求。

但是,如前所述,触发此原因可能有很多,您可以在Locale.php中找到自动检测。