为抓取工具跳过javascript代码段

时间:2013-11-13 11:35:21

标签: javascript php html web-crawler skip

我在php中有一个网站,它将某些php变量传递给javascript变量,google抓住我,这会产生错误和重复内容。有没有办法让google抓取工具忽略javascript中这些变量的声明?

    echo '<script language="javascript">var '.$item['Nombre'].'="'.$descripcion.'";</script>';

抱歉我的英文,

4 个答案:

答案 0 :(得分:1)

谷歌抓取javascript代码并认为它​​重复?我以前从未听说过这个问题。我的一些网页内嵌了javascript(如果内容很小),这意味着每页都有相同的<script>...</script>

在某些情况下,我会以与您相同的方式输出或多或少的javascript变量。 Google从未将其标记为“重复内容”。

来自here的说明:

  

重复内容通常是指实质性内容块   在域内或跨域完全匹配其他内容或   非常相似。大多数情况下,这不是起源欺骗性的。   非恶意重复内容的示例可包括:

     
      
  • 可以生成针对移动设备的常规页面和精简页面的论坛
  •   
  • 存储通过多个不同网址显示或链接的项目
  •   
  • 仅适用于打印机的网页版本
  •   

如果您在多个网页上拥有相同的内容,则会出现此类错误,但Google不会将javascript解析为内容。 (虽然你永远不知道谷歌做了什么或不做什么)。与谷歌不会将您的<head>标记标记为重复的方式相同,或者在每个页面上使用相同的布局(菜单,页脚等)不会受到惩罚。

您可以将<script>标记放在<aside>标记中以确定。

  

HTML元素表示包含的页面的一部分   与其周围内容相切的内容,   可以认为它与该内容是分开的。这样的部分   通常表示为侧边栏或插入。他们经常包含   侧面解释,如词汇表定义;更松散的相关   东西,比如广告;作者的传记;或者在   网络应用程序,个人资料信息或相关的博客链接。

这意味着谷歌在索引页面时会或多或少地忽略内容。它不会将其标记为重复,因为它可能是一种纪念。

同时从脚本标记中删除language="javascript"属性。我怀疑它会以任何方式混淆谷歌,因为that attribute is deprecated(改为使用type)并且现在没有任何考虑因素。但是如果谷歌机器人确实如此,那么正确的值将是text/javascript,而不仅仅是javascript。谷歌可能无法识别值javascript并将其解析为未知类型的文本内容。

脚本的默认类型为text/javascript,因此省略安全


最重要的是我怀疑问题不在于JS变量的存在,而在于你的URL中的GET参数。可以通过在网站站长工具中正确配置网址参数来处理GET参数。

答案 1 :(得分:0)

重要提示:在大多数情况下,这是不好的做法。如果谷歌注意到你向它的机器人提供不同的内容并认为它是相关的,那么你的网站可能会受到无法衡量的惩罚。

我推荐这个php解决方案

PHP中的

使用此代码:

if (!strpos($_SERVER[‘HTTP_USER_AGENT’],"Googlebot")) {
  //echo the script
}
else{ //dont echo, does nothing. }

但如果这不起作用,您可以尝试将此javascript代码添加到您的脚本代码中:

    if (!navigator.userAgent.contains('Googlebot')) {
    //do the script
    } else {
    //does nothing
    }

Ps:以下是用户代理http://www.useragentstring.com/pages/Crawlerlist/

的列表

答案 2 :(得分:0)

另一种(未经测试的,推测性的)方法,要求您可以编写自己的robots.txt文件:

  1. 将您生成的所有javascript代码移至另一个网址,并将其作为javascript脚本添加到您的网页中:<script type="text/javascript" src="/path/to/my/php/that/generates/js/variables.php"></script>

  2. 将该网址添加到您的robots.txt文件中(参见Google answer

  3.   

    User-Agent:Googlebot

         

    Disallow:/path/to/my/php/that/generates/js/variables.php

答案 3 :(得分:0)

您可以使用以下PHP代码:

$crawlers = array(
'Google'=>'Google',
'MSN' => 'msnbot',
'Rambler'=>'Rambler',
'Yahoo'=> 'Yahoo',
'AbachoBOT'=> 'AbachoBOT',
'accoona'=> 'Accoona',
'AcoiRobot'=> 'AcoiRobot',
'ASPSeek'=> 'ASPSeek',
'CrocCrawler'=> 'CrocCrawler',
'Dumbot'=> 'Dumbot',
'FAST-WebCrawler'=> 'FAST-WebCrawler',
'GeonaBot'=> 'GeonaBot',
'Gigabot'=> 'Gigabot',
'Lycos spider'=> 'Lycos',
'MSRBOT'=> 'MSRBOT',
'Altavista robot'=> 'Scooter',
'AltaVista robot'=> 'Altavista',
'ID-Search Bot'=> 'IDBot',
'eStyle Bot'=> 'eStyle',
'Scrubby robot'=> 'Scrubby',
);

function crawlerDetect($USER_AGENT)
{
// to get crawlers string used in function uncomment it
// it is better to save it in string than use implode every time
// global $crawlers
// $crawlers_agents = implode('|',$crawlers);
$crawlers_agents = 'Google|msnbot|Rambler|Yahoo|AbachoBOT|accoona|AcioRobot|ASPSeek|CocoCrawler|Dumbot|FAST-WebCrawler|GeonaBot|Gigabot|Lycos|MSRBOT|Scooter|AltaVista|IDBot|eStyle|Scrubby';

if ( strpos($crawlers_agents , $USER_AGENT) === false )
   return false;
// crawler detected
// you can use it to return its name
/*
else {
                                                                                                                                                        1,1           Top
 return array_search($USER_AGENT, $crawlers);
}
*/
}

使用上述方法,您可以检查请求是否来自抓取工具。