ajax抓取网页内容(越来越多的网站采用Ajax技术解决方法放弃井号结构)

优采云 发布时间: 2021-09-18 02:22

  ajax抓取网页内容(越来越多的网站采用Ajax技术解决方法放弃井号结构)

  越来越多的网站,开始采用“单页应用”

  网站只有一个网页,它使用Ajax技术根据用户的输入加载不同的内容

  这种方法的优点是良好的用户体验和节省流量。缺点是搜索引擎无法捕获Ajax内容。例如,您有一个网站

  用户可以通过英镑符号结构的URL看到不同的内容

  #一,

  #二,

  #三,

  然而,搜索引擎只抓取并忽略了磅号,所以它不能索引内容

  为了解决这个问题,谷歌提出了“井号+感叹号”的结构

  #!!一,

  当Google找到上述URL时,它将自动获取另一个URL:

  只要你把Ajax内容放在这个网站上,谷歌就会收录. 但问题是,“磅号+感叹号”非常难看和麻烦。推特过去采用这种结构

  改为

  #!/鲁安夫

  结果,用户一再抱怨,仅在半年内就取消了

  那么,有没有办法让搜索引擎在保持更直观的URL的同时抓取Ajax内容呢

  直到两天前我看到了话语权创始人之一的解决方案,我一直认为我做不到这一点

  Distance是一个严重依赖Ajax的论坛程序,但它必须如此Google收录Content。解决方案是放弃井号结构,采用历史API

  所谓的历史API是指在不刷新页面的情况下更改浏览器地址栏中显示的URL(确切地说,更改网页的当前状态)。这里有一个例子。单击上面的按钮开始播放音乐。然后,单击下面的链接,地址栏中的URL将更改,但音乐播放不会中断

  历史API的详细介绍超出了本文的范围文章. 简单地说,它的功能是在浏览器的历史对象中添加一条记录

  window.history.pushState(状态对象、标题、url)

  上面的命令可以在地址栏中显示新的URL。历史对象的pushstate方法接受三个参数。新URL是第三个参数。前两个参数可以为null

  window.history.pushState(null,null,newURL)

  目前,主要浏览器都支持这种方法:chrome(26.0+,Firefox(20.0+,即(10.0+,Safari(5.1+),歌剧(12.1+

  这是罗宾·沃德的方法

  首先,用history API替换磅号结构,使每个磅号成为正常路径的URL,这样搜索引擎将抓取每个网页

  /一,

  /二,

  /三,

  然后,定义一个JavaScript函数来处理Ajax部分,并根据web地址获取内容(假设jQuery)

  功能锚定点击(链接){

  var linkSplit=link.split('/').pop()

  $.get('api/'+linkSplit,函数(数据){

  $('#content').html(数据)

  }))

  }

  然后定义鼠标的单击事件

  $('#container')。在('click','a',函数(e)上{

  window.history.pushState(null,null,$(this.attr('href'))

  anchorClick($(this.attr('href'))

  e、 预防默认值()

  }))

  还考虑用户点击浏览器的“向前/向后”按钮。将触发历史对象的pop状态事件

  window.addEventListener('popstate',函数(e){

  anchorClick(location.pathname)

  }))

  在定义了上述三部分代码之后,您可以在不刷新页面的情况下显示普通路径URL和Ajax内容

  最后,设置服务器端

  因为没有使用磅符号结构,所以每个URL都是不同的请求。因此,服务器需要为所有这些请求返回以下网页,以防止404错误

  如果仔细查看上面的代码,您会发现有一个noscript标记,这是一个秘密

  我们将希望搜索引擎收录使用的所有内容放在noscript标记中。这样,用户仍然可以在不刷新页面的情况下执行Ajax操作,但搜索引擎将收录每个网页的主要内容

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线