我一直在构建基于jquery导航的站点而没有重新加载(使用PHP和AJAX),并且最近遇到了页面“返回”,“转发”和“重新加载”功能以及SEO友好性的问题。
- 跳过此部分直接提问 -
my site目前(不使用AJAX但是)加载一个index.php,它有几个“内容”div,其中一个是可见的(class =“active”)而其他的不显示。当用户单击导航链接时,一个漂亮的动画在内容div之间切换。
我有apache重写来映射像
这样的东西 http://mysite.com/about
至
http://mysite.com/index.php?page=about
其中“about”部分是默认显示的部分(而隐藏其他“内容”div)。基于此参数,我包含页面的正确元标记。我的站点地图有mysite.com/about,mysite.com/blog,这样它们就可以被编入索引作为不错的单独页面。
然而,我最近决定将此基于ajax,因为我计划合并更多内容和愚蠢的内容以在一个页面上加载所有内容。
注意:我现在也在实施Smarty模板。
我决定实现哈希标签,但是看到了固有的SEO问题,然后我发现了hashbangs(wth ?!)然后用 history.pushState()和找到了新的HTML5内容History.js 并决定使用它。
所以主要问题是
如果我只有一个页面用ajax加载内容div中的页面模板,使用history.pushState()修改URL并使用mod_rewrite和一个PHP后端,可以在一个情况下提供默认内容模板直接请求如“mysite.com/about”(mysite.com/index.php?page=about)(对于基本用法和搜索引擎优化),我不能为直接请求设置元内容,除非我有两个模板 - 内容模板 - 和一个元模板?还有另一种解决方法吗?
像<title>
和<meta name="description">
这样的标签是否重要,足以保证特别为他们设置模板?
总之,我希望我的mod_rewrite URL能够在google上显示特定的ajax加载页面内容模板的正确标题和元描述。
修改
我要跟他们在hypem.com发生的事情完全一样。他们有一个事件监听器,可在列出新内容时更改<title>
标记。它们也提供正确的<meta name="description">
标记,但只有当它是对其中一个主要页面的直接请求时,如博客 - 其他页面,如http://hypem.com/blog/indie+today/10332,才会返回主要博客页面的元标记,并且仅在直接请求时
答案 0 :(得分:-1)
我首先构建网站以使用所有直接链接而不使用ajax,然后添加ajax。但是,如果浏览器请求页面,则仅包括添加ajax / history功能的代码。如果网络抓取工具访问您的网站,请不要包含ajax /历史记录功能。