【问题标题】:Disable session when site crawled by Googlebot当 Googlebot 抓取网站时禁用会话
【发布时间】:2014-02-12 04:37:11
【问题描述】:

我的 PHP 5.3 服务器使用 use_only_cookies 处理会话,但没有 use_trans_id,会话文件保存在专用目录中。

当 Googlebot 或 Google Search Appliance bot 或任何其他不支持 cookie 的浏览器抓取网站时,会为每个请求的页面创建不同的会话文件。恐怕这些文件会白白占用大量磁盘空间。

是否可以为某些用户代理或不使用 cookie 的浏览器禁用会话文件?我不想用 trans_id 功能替换会话,因为它可能有 SEO 缺点。

是否有 Apache/PHP 指令、设置或任何其他技巧具有以下行为:

  • 如果浏览器不支持 cookie(通过用户代理黑名单或其他方法),那么我们始终使用相同的会话文件,或者我们根本不使用会话文件
  • 对于任何其他浏览器,请使用标准会话文件处理程序。

【问题讨论】:

    标签: php session googlebot google-search-appliance


    【解决方案1】:

    当然,您可以检查$_SERVER['HTTP_USER_AGENT'] 的内容并检查已知机器人。如果它是一个机器人,那么就不要调用session_start()(尽管如果你的逻辑依赖于代码后面的$_SESSION vars,这可能会产生不良影响)。

    【讨论】:

    • ...而且我从不担心会话数据会填满服务器。 PHP 非常擅长在幕后进行管理。
    • 大多数网站可能都是这样。但是当您的网站有几十万页时,Google bot 每天可能会抓取 20k,创建 20k 新会话文件。如果您将会话保存一周,您将仅从 Google bot 获得大约 140k 会话,以及来自其他机器人的更多会话。另一方面,我们每天只有几百个独立的人类用户。所以我们 99% 的会话文件来自机器人!
    • 我明白你的意思,它非常有效。但是,自从最初回答这个问题以来,我突然想到页面抓取变得越来越复杂。最近的例子是谷歌的移动可用性分析,它直接影响你在移动设备上的搜索排名。如果 Googlebot 被拒绝会话并且没有该会话会使您的页面不那么可用/执行速度变慢等,那么这可能对您的页面排名非常不利。
    • @ButtleButkus 还有另一种可能性:您可以检测到什么用户代理正在访问该站点并为爬虫分配较短的会话生存期。 (我假设 ini_set 允许访问会话生命周期)。然后,您将拥有两全其美的优势 - googlebot 会获取您网站的正确版本,但您的服务器不会被过多的会话文件阻塞。
    • 我不认为您可以在同一个文件夹中拥有不同的会话生命周期,但如果您将机器人和常规会话保存在不同的文件夹中,这可能是可能的。尽管如此,据我了解,这样做毫无意义,因为网络爬虫无论如何都不接受 cookie。如果您的网站可用性取决于 cookie,那么您的网站将根本无法用于网络爬虫!我们希望阻止网络爬虫的会话,正是因为它们不接受我们发送给它们的 cookie,因此它们在每次页面访问时都会启动一个新会话(= 每天数千次)。
    【解决方案2】:
    if(strstr(strtolower($_SERVER['HTTP_USER_AGENT']), "googlebot")){
        $sid = md5("mygooglebotsessionid");
        session_id($sid);
    }
    

    在 session_start() 之前添加这个;

    您可以为机器人设置一个唯一的 SessionID,而不是禁用机器人的会话。每次 bot 使用相同的 SessionID,因此不会浪费您的会话存储空间。

    PS:不确定 SEO 的缺点。

    【讨论】:

      【解决方案3】:

      if (strpos($_SERVER[‘HTTP_USER_AGENT’],"Googlebot") === false) { session_start(); }

      但我不确定这是否值得。 Session GC 非常高效,如果有人将用户代理覆盖到 googlebot,他将没有会话

      【讨论】:

      • "如果有人将用户代理覆盖到 googlebot" - 他们可以被塞满
      猜你喜欢
      • 2011-12-19
      • 2018-02-03
      • 2019-09-27
      • 2011-04-22
      • 1970-01-01
      • 2014-08-04
      • 2016-09-24
      • 2014-12-30
      • 1970-01-01
      相关资源
      最近更新 更多