在我的网站上,我有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中“拨号”这个网址,但仍然有机器人忽略了这一点。你会推荐什么? 欢迎任何想法。感谢
答案 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)
您的问题包含两个不同的问题:
第二个问题难以解决,请阅读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";
}