ajax,SEO,谁言鱼和熊掌不可兼得
2016-03-09 15:04
459 查看
搜索引擎只能获取
www.demo.com/index.html这个页面的内容,
但是无法获取
www..demo.com/index.html#user
www..demo.com/index.html#detail
等页面的内容,因为搜索引擎是不会管#后面的内容,这样就造成了数据丢失,不利于网站排名,
那么有没有一个方法可以更改url地址,同时兼顾ajax获取页面呢?
借助html5新的API pushState可以很好的解决这个问题
我们看一个代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <ul id="nav"> <li><a href="#user">user</a></li> <li><a href="#detail">detail</a></li> </ul> <div id="container"> </div> </body> <script> var ul = document.querySelector('#nav'), container = document.querySelector('#container');
//设置页面内容方法 var setContainer = function (url) { //ajax请求页面template container.innerHTML = 'ajax返回的页面' + url; }; ul.addEventListener('click', function (e) { var target = e.target; if (target.nodeName !== 'A') { return; } var url = target.hash.replace('#', ''); history.pushState(url, null, url); // 当A标签触发点击时,改变浏览器url setContainer(url); e.preventDefault(); e.stopPropagation(); });
//当用户使用前进/后退按钮时候 window.addEventListener('popstate', function (e) { setContainer(e.state); }); </script> </html>
通过pushState方法,我们可以在不刷新页面的情况改变地址栏url,在改变的同时,我们在ajax获取数据,填充到面板上,这样,每一个页面都会有一个url地址,这样就可以被搜索引擎所搜索到了。
因为不适用#结构,所以每一个url都是一个请求,那么,在服务端我们需要设置这些请求返回的都是这样的页面才行
<html> <body> <ul id="nav"> <li><a href="#user">user</a></li> <li><a href="#detail">detail</a></li> </ul> <div id="container"> </div> </body>
相关文章推荐
- onAttachedToWindow () 和 onDetachedFromWindow ()
- 监听未接来电,自动回复短信
- python 功能代码安全高效写法
- 《Linux内核分析》第三周:Linux系统启动过程
- leetcode 202 Happy Number
- [转]express 路由控制--next
- MongoDB configuration
- iOS Socket深入剖析
- php的学习笔记之面向对象(二)
- IOS 30多个iOS常用动画,带详细注释
- storm 文档(2)----基本原理
- Android上替代SQLite的选择:Realm
- 通过C++程序示例理解设计模式中的外观模式
- 岗位-<iOS开发工程师>-总结
- 2. Add Two Numbers
- storm 文档(1)----文档主页
- Samtools说明文档网址变更
- Learn Some Framework-5 ActivityManagerService[Initialize]
- Leetcode ☞ 143. Reorder List
- Object-c block块