【问题标题】:Exists a way to let crawlers ignore parts of a document?是否存在让爬虫忽略文档部分的方法?
【发布时间】:2013-05-02 18:50:58
【问题描述】:

我知道您可以通过 robots.txt、元标记、链接属性等来控制爬虫/蜘蛛可以访问哪些文档。

但在我的特殊情况下,我只想忽略文档的一部分。该部分不能存在于 IFrame 中,而且是“正常”内容。像<noscript> 块这样的东西会很棒,它将部分内容标记为“请不要索引这个。”

  • 首先,我考虑使用document.write() 来写出这些部分,但我了解到我的假设“蜘蛛通常不执行 JavaScript”似乎是错误的。
  • 当我检测到爬虫时,我正在考虑提供不同版本的页面,但这不是很准确,对吧?
  • 另外,我不能将该内容放在图像上。

是否有任何技巧可以避免将文档的特定部分(不是散布在文档中的某些特定单词)编入索引?

[edit] 我知道我可以做一些“如果用户代理在机器人列表中”,但我不喜欢这个想法。可能有一种更不可知论的方法。要抑制的部分包含动态内容,无论我在做什么,它都必须与 IE6 等“旧”浏览器一起使用:\

【问题讨论】:

  • 使用来自外部 js 文件的 innerHTML
  • 听起来它可以工作,我不得不摆弄它:) 我不喜欢所涉及的复杂性,因为要抑制的部分包含动态内容:\

标签: javascript html seo web-crawler


【解决方案1】:

静态内容和动态内容的唯一区别是您包含的文件的扩展名:

var extension = "js"; // change to "php" for example to load dynamic content
function loadJS(filename){
  var js=document.createElement('script')
  js.setAttribute("type","text/javascript")
  js.setAttribute("src", filename)
  document.getElementsByTagName("head")[0].appendChild(js);
}
window.onload=function() {
  loadJS("somecontenttoload."+extension); // hard for crawlers to read 
}

在 somecontenttoload.js 中:

document.getElementById("content").innerHTML="This is static";

在 somecontenttoload.php 中

<?PHP 
  header("content-type:text/javascript");
  // load data from database
  $bla = .....;
  ?>
  document.getElementById("content").innerHTML="<? echo $bla; ?>";

【讨论】:

  • 这很酷,我所说的动态内容只是增加了动态代码的复杂性。但看起来这确实是要走的路。当用户代理明确是机器人时,我什至可以包装已经被省略的第一个输出块......
猜你喜欢
  • 1970-01-01
  • 2016-10-08
  • 2012-01-13
  • 1970-01-01
  • 2011-10-17
  • 2016-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多