如何隐藏机器人/蜘蛛的页面网址?

时间:2011-03-25 11:38:54

标签: php

在我的网站上,我有1000个产品,他们都有自己的网页,可以通过product.php?id = PRODUCT_ID访问。

在所有这些网页上,我都有一个包含网址action.php?id=PRODUCT_ID&referer=CURRNT_PAGE_URL的链接..所以如果我访问product.php?id = 100这个网址变为action.php?prod_id=100&referer=/product.php?id=1000点击此网址会返回用户返回referer

现在,我面临的问题是我不断遭到蜘蛛的虚假命中。有什么方法可以避免这些错误的命中吗?我知道我可以在robots.txt中“拨号”这个网址,但仍然有机器人忽略了这一点。你会推荐什么? 欢迎任何想法。感谢

5 个答案:

答案 0 :(得分:2)

目前,99%的机器人(即使是那些选择忽略robots.txt的机器人)无法访问链接的最简单方法是使用Javascript。添加一些不引人注目的jQuery:

<script type="text/javascript">
$(document).ready(function() {
    $('a[data-href]').attr('href', $(this).attr('data-href'));
  });
});
</script>

以下列方式构建您的链接。

<a href="" rel="nofollow" data-href="action.php?id=PRODUCT_ID&referrer=REFERRER">Click me!</a>

因为href属性只在DOM准备就绪后写入,所以机器人将找不到任何要遵循的内容。

答案 1 :(得分:2)

您的问题包含两个不同的问题:

  1. 多个网址引导相同的资源
  2. 抓取工具不尊重robots.txt
  3. 第二个问题难以解决,请阅读Detecting 'stealth' web-crawlers

    第一个更容易。 您似乎需要一个选项让用户返回上一页。

    我不确定为什么你不让浏览器的历史记录处理这个(通过使用后退按钮和javascript的history.back();),但有足够的正当理由。

    为什么不使用refferer标题?
    几乎所有常见浏览器都会针对每个请求发送有关引用页面的信息。它可能是欺骗性的,但对于游客来说,这应该是一个有效的解决方案。

    为什么不使用Cookie?
    如果将CURRNT_PAGE_URL存储在cookie中,您仍然可以为每个页面使用一个唯一的URL,并且仍然可以根据cookie中设置的refferer动态创建面包屑和反向链接,而不依赖于HTTP-推荐人价值。

答案 2 :(得分:1)

您可以使用robots.txt文件来阻止机器人遵守。

您可以做的下一件事,一旦配置了robots.txt,就会检查您的服务器日志。找出任何看似可疑的使用者。

假设你发现evil_webspider_crawling_everywhere作为一个使用者,你可以在请求的标题中检查它(对不起,没有例子,长时间没有使用过php)并拒绝访问webspider。

答案 3 :(得分:0)

我不相信您可以阻止不遵守您的建议的用户代理。

在走这条路之前,我真的想确定机器人/蜘蛛是一个问题 - 做任何妨碍你网站自然导航的事情应该被视为最后的手段。

如果您真的想要停止蜘蛛,您可能需要考虑的是在链接中使用javascript,以便仅在点击链接后才能进行导航。这应该会阻止蜘蛛。

我个人并不喜欢蜘蛛或机器人。

答案 4 :(得分:0)

另一种选择是使用PHP来检测访问您网页的漫游器。

您可以使用此PHP函数来检测机器人(这可以获得大部分功能):

function bot_detected() {
  return (
    isset($_SERVER['HTTP_USER_AGENT'])
    && preg_match('/bot|crawl|slurp|spider|mediapartners/i', $_SERVER['HTTP_USER_AGENT'])
  );
}

然后当你发现用户不是机器人时,回显href链接到页面:

if (bot_detected()===false)) {
echo "http://example.com/yourpage";
}
相关问题