防止漫游器抓取页面的特定部分


28

作为负责一个拥有论坛的小型网站的网站站长,我经常收到用户的抱怨,即内部搜索引擎和外部搜索(例如使用Google时)都完全被用户的签名污染了(他们使用了很长时间)签名,这是论坛经验的一部分,因为签名在我的论坛中非常有意义)。

因此,基本上,到目前为止,我看到两个选择:

  1. 将签名呈现为图片,并在用户单击“签名图片”时将其带到包含真实签名(带有签名中的链接等)的页面,并且该页面被设置为不可检索引擎蜘蛛)。这会消耗一些带宽并需要做一些工作(因为我需要一个HTML渲染器来生成图片等),但是显然这可以解决问题(存在一些小问题,因为签名不尊重字体的字体/颜色方案。用户,但我的用户无论如何都非常有创造力,他们的签名使用自定义字体/颜色/大小等,因此问题不大。

  2. 将网页中包含签名的每个部分标记为不可抓取。

但是我不确定稍后的内容:这可以做到吗?您可以仅将网页的特定部分标记为不可抓取吗?

Answers:


8

这是我在Stack Overflow上为Google提供的noindex标记的答案:

您可以将Google网页的某些部分放到被robots.txt阻止的iframe中,从而阻止Google查看该页面的一部分。

robots.txt

Disallow: /iframes/

index.html

This text is crawlable, but now you'll see 
text that search engines can't see:
<iframe src="/iframes/hidden.html" width="100%" height=300 scrolling=no>

/iframes/hidden.html

Search engines cannot see this text.

您可以使用AJAX加载隐藏文件的内容,而不必使用iframe。这是一个使用jquery ajax执行此操作的示例:

his text is crawlable, but now you'll see 
text that search engines can't see:
<div id="hidden"></div>
<script>
    $.get(
        "/iframes/hidden.html",
        function(data){$('#hidden').html(data)},
    );
</script>

使用AJAX添加/注入控件是否有助于禁止并阻止其爬行?
普拉纳夫·毕鲁卡尔

只要要从中获取AJAX的位置都被robots.txt阻止。
斯蒂芬·奥斯特米勒

您能否请检查此webmasters.stackexchange.com/questions/108169/…并提出建议。
Pranav Bilurkar

只要robots.txt阻止了要从中获取AJAX的位置-请对此进行详细说明。
Pranav Bilurkar

2
Google会对那些隐藏自己的javascript以防止其被抓取的行为进行处罚,以防止滥用。iframe也一样吗?
乔纳森

7

另一种解决方案是将sig打包为样式设置为的span或div,display:none然后使用Javascript将其删除,以便为启用Javascript的浏览器显示文本。搜索引擎知道它不会被显示,因此不应该对其进行索引。

这一点HTML,CSS和javascript应该可以做到:

HTML:

<span class="sig">signature goes here</span>

CSS:

.sig {
display:none;
}

javascript:

<script type="text/javascript"> 
$(document).ready(function()
  {
      $(".sig").show();
  }
</script>

您需要包括一个jQuery库。


4
+1,我想了想,但难道不是各种蜘蛛都将它视为“隐身”的一种形式吗?
WebbyTheWebbor


1
我认为这很整洁:-)
paulmorriss 2011年

在最严格的定义中,这可以被认为是伪装。但是,他可以使用document.write(“”);使用javascript打印所有签名。Google不会在javascript中建立任何索引。support.google.com/customsearch/bin/…–
Athoxx

我相信Google可以为此类段落建立索引,即使使用CSS隐藏了这些段落也是如此。最安全的选择是根本不在HTML中包含文本。(我们可以使用JavaScript在运行时注入文本。)
wrygiel 2013年

3

我有一个类似的问题,我用CSS解决了,但也可以用javascript和jquery完成。

1-我创建了一个名为“ disallowed-for-crawlers” 的类,并将该类放置在我不希望Google漫游器看到的所有内容中,或将其放置在该类的范围内。

2-在页面的主CSS中,我会看到类似

.disallowed-for-crawlers {
    display:none;
}

3-创建一个名为disallow.css的CSS文件,并将其添加到robots.txt中,以防止其被抓取,因此抓取工具不会访问该文件,而是将其添加为对主css之后的页面的引用。

4-在disallow.css我放置代码:

.disallowed-for-crawlers {
    display:block !important;
}

您可以玩javascript或CSS。我只是利用了disallow和CSS类。:)希望它能帮助某人。


我不确定这是由于抓取工具不访问.css文件(这是问题吗?因为抓取工具何时访问和抓取特定的css文件?),而不仅仅是由于display:none和抓取工具了解它不会被显示,所以他们没有索引它。即使是这种情况,您如何实际向人类用户显示内容?
ΣπύροςΓούλας

在为人类用户加载步骤4时显示内容,因为允许他们查看该文件(disallow.css)。如今,机器人加载CSS就是受人尊敬的搜索引擎所采用的方式,这就是它们确定网站是否适合移动设备的方式,不尊重它的爬虫不值得担心,主要的搜索引擎会读取CSS和javascript进行爬虫页,他们已经干了大约...现在快6年了?也许更多。
罗兰多·雷塔纳

您可以提供支持该主张的资源吗?请参阅webmasters.stackexchange.com/questions/71546/…yoast.com/dont-block-css-and-js-files,最重要的是在这里webmasters.googleblog.com/2014/10/…描述您所描述的内容作为坏习惯。
ΣπύροςΓούλας

如果我希望Google正常查看我的网站并阻止所有CSS,这是一种不好的做法,并且是不好的做法,因为它们会解释CSS,但是在这种情况下,我阻止了一个特定的文件,而不是所有的CSS,OP问关于防止谷歌阅读页面的一部分。但是我不希望Google抓取这些部分,所以我只阻止了一个CSS(不是全部,而是一个)。并支持您所说的说法?爬虫阅读JS和CSS的那个?只需访问您的Google网站站长工具并查看“以机器人抓取”的方式,您将在这里看到他们如何阅读CSS和JS。
罗兰多·雷塔纳

另外要补充一点,在我的特定情况下,并不是我不想对Google Crawler做任何事,我只是不想让谷歌阅读一段看起来在所有页面中都重复的信息。如电话号码,地址,相关产品或与Google无关的信息。
罗兰多·雷塔纳

2

一种方法是使用文本图像而不是纯文本。

Google最终可能会足够聪明,可以从图像中读取文本,因此它可能不是完全面向未来的,但是从现在开始至少应该可以工作一段时间。

这种方法有很多缺点。如果一个人有视力障碍,那就很糟糕。如果您希望内容适合于移动设备而不是台式机,那就不好了。(等等)

但这是目前(某种程度上)可行的一种方法。


如果您正确使用alt和title tage,此功能效果如何?
Jayen 2015年

尚未尝试,但Google似乎会抓取这些内容。这是此方法的主要限制。
James Foster 2016年

1

这很容易。

在提供您的页面之前,您需要知道它是机器人,计算机还是电话。然后,您需要相应地设置内容。这是当今的标准做法,也是某些CMS的核心功能。

SE上有很多解决方案,可以根据您的htaccess中的用户代理进行重定向。如果这适合您的论坛软件,那么您可以在同一个数据库上运行不同的代码,以提供Google所需的内容,而无需花很多力气。

或者,您可以在您的PHP代码中添加一行,以进行“如果USER AGENT == Googlebot,则不显示签名”。

如果您真的不能做到这一点,那么您可以让mod_proxy服务于机器人,并使用它去除您的php代码所生成的,机器人不需要看到的任何内容。

从技术上讲,Google不赞成将其搜索引擎的页面显示为与普通网站访问者所看到的页面不同的页面,但是,迄今为止,他们还没有取消BBC以及其他从其搜索引擎结果中提供浏览器/ IP /访问者特定内容的网站。他们也只能通过有限的方式查看自己的机器人是否被“骗”了。

使用CSS隐藏内容以使其可以通过脚本重新启用的替代解决方案也有些灰色区域。根据他们自己的网站管理员工具指南(2011年6月6日),这不是一个好主意:

http://www.google.com/support/webmasters/bin/answer.py?answer=66353

那可能不是一块石板铸成的,但它是Google的最新作品。

隐藏内容技巧对没有javascript的少数人不起作用,这可能不是一个大问题,但是,等待文档加载然后显示签名不会像您那样令人满意。认为页面已加载,那么它将随着隐藏签名的出现而跳来跳去,然后将内容推入页面。如果您的网络低端,这种页面加载会很烦人,但是如果您在快速的Internet连接上拥有一台快速的开发人员计算机,则这种页面加载可能不会很明显。


6
@ʍǝɥʇɐɯ:根据访问者访问页面的方式提供不同的内容有点让人讨厌,据我所知,它可能会在搜索引擎中对您造成不利影响。我非常喜欢paulmorris的JavaScript解决方案。
WebbyTheWebbor 2011年

@ʍǝɥʇɐɯ:erf,如果提供个性化内容是游戏的名称,那么JavaScript也是如此。最后,我检查了没有安装JavaScript(GMail,FaceBook,Google Docs,堆栈溢出,Google + -是的,我已经知道了;等等)的情况,整个Web真的不能正常工作。我认为没有必要基于错误的前提(即JavaScript不可用)来批评paulmorris的解决方案。
WebbyTheWebbor

@ʍǝɥʇɐɯ:您可能会喜欢Matt Cutts(负责Google SEO)关于这个主题的问题:theseonewsblog.com/3383/google-hidden-text 这是paulmorris在其出色回答中发表的出色评论。抱歉,在这样的论坛上称JavaScript为“愚蠢”已接近拖延。
WebbyTheWebbor

...然后我们得到一个问题:webmasters.stackexchange.com/questions/16398/…- “关键字填充”很愚蠢。对于那个很抱歉。
2011年

我认为这属于“伪装”,因此不是一个好习惯。
ΣπύροςΓούλας

0

不,没有办法防止机器人抓取页面的一部分。整个页面还是什么都没有。

Google搜索结果中的摘录通常取自页面上的元描述。因此,您可以将其放在meta description标记中,以使Google在页面的特定部分显示。使用用户生成的内容很难获得良好的摘要,但是采取线程的第一篇文章可能会起作用。

我能想到的唯一其他方法是使用Javascript。诸如paulmorriss的建议可能有用,但我认为如果内容在HTML中,搜索引擎仍会对其进行索引。您可以将其从HTML中删除,将其存储在Javascript字符串中,然后在页面加载时重新添加。但是,这有点复杂。

最后,要记住的一件事是:如果Google在其摘要中显示用户的签名,则它决定了这是与用户查询最相关的部分。


1
问题不是Google在其摘要中显示用户的sig,而是这些特定页面首先在Google中排名很高。此处的问题恰恰是Google可能会认为信号实际上无关紧要:我的意思是,这正是我所要解决的问题。
WebbyTheWebbor 2011年

@Webby,我不明白,您为什么不希望页面排名很高?您是否有示例页面和查询示例,以便我们了解您在说什么?而如果谷歌被显示在搜索结果中的签名,那么它有关针对搜索查询,即使它不相关的页面本身。
DisgruntledGoat

1
我无法举一些例子,但是我确实希望我的网站/论坛排名很高,而且做得很好。问题是,跻身搜索结果(这些都是多为我的网站/论坛,反正,因为它基本上是关于这个问题的网站),应该是什么真正进入网页充斥之中签名。我的意思是,我真的想要做什么,我问的问题。还有图片或JavaScript。
WebbyTheWebbor

@Webby,您的回答有些混乱,但是您似乎暗示您的用户签名都是单独的页面(URL),因此在SERP中显示为单独的结果。在这种情况下,您可以通过robots.txt阻止这些页面。否则,请尝试我上面发布的元描述解决方案,因为这几乎肯定可以缓解问题。
DisgruntledGoat

0

您可以将页面放入PHP if中,并带有导致其他验证码的“ else”,该验证码为if部分提供密钥。

我不在乎,因为如果用户凭据在我的页面上不匹配,他们会得到空白页面或发送到登录页面。

<?php
session_start();

if(empty($_SESSION['captcha']) or $_SESSION['captcha'] != $key){
    header("Location: captcha.php");
}

if(!empty($_SESSION['captcha']) and $_SESSION['captcha'] == $key){

"the page"

}
?>

$key 应该是当天的哈希值或发生变化的值,因此不足以将值添加到会话中。

如果您要我添加示例验证码,因为我现在没有人,请在评论中写。


该答案假设网站使用或开发人员知道PHP,但事实并非如此。而且,这使用户难以获得内容,这不是一件好事。
约翰·康德

我可以买到不是每个人都知道PHP,但是验证码可以是“草的颜色”,甚至盲人也知道。
AlfonsMarklén'17

-3

4
不可以。只有Google Search Appliance支持Googleoff和Googleon。Googlebot会忽略它们进行网络搜索。参考:您可以使用googleon和googleoff注释来阻止Googlebot将部分网页编入索引吗? 您已链接到Google Search Appliance文档,并且对链接到的文章的评论也表明它不适用于Googlebot。
Stephen Ostermiller

@StephenOstermiller哦,对了!达恩(Darn)
卢克·马唐加
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.