我一直在构建一个基于 jquery 导航的网站,无需重新加载(使用 PHP 和 AJAX),最近遇到了页面“后退”、“前进”和“重新加载”功能以及 SEO 友好性的问题。
--跳过本节直接提问--
我的网站目前(不使用 AJAX,但是)加载一个 index.php,它有几个“内容”div,其中一个是可见的(class="active"),而其他的不显示。当用户点击导航链接时,一个漂亮的动画在内容 div 之间切换。
我有 apache 重写以映射诸如
http://mysite.com/about
至
http://mysite.com/index.php?page=about
其中“关于”部分将是默认显示的部分(而其他“内容”div 被隐藏)。基于此参数,我为页面包含正确的元标记。我的站点地图有 mysite.com/about、mysite.com/blog 以便它们被索引为很好的单独页面。
但是,我最近决定制作这个基于 ajax 的内容,因为我计划合并更多内容,并且将所有内容加载到一个页面上是愚蠢的。
注意:我现在也在实现 Smarty 模板。
我决定实现哈希标签,但看到了固有的 SEO 问题,然后我发现了 hashbangs(wth?!),然后找到了带有history.pushState()和History.js的新 HTML5 内容,并决定使用它。
所以这是主要问题
如果我只有一个页面使用 ajax 在内容 div 中加载页面模板,使用 history.pushState() 修改 URL 并使用 mod_rewrite 和 PHP 后端可以在直接请求的情况下提供默认内容模板,例如“mysite.com/about”(mysite.com/index.php?page=about)(用于基本可用性和 SEO),除非我有两个模板 - 一个内容模板 - 和一个元,否则我也无法为直接请求设置元内容模板?还有其他方法吗?
标签是否足够重要<title>
,<meta name="description">
足以保证有一个专门为他们设计的模板?
总之,我希望我漂亮的 mod_rewrite URLS 能够在谷歌上为特定的 ajax 加载页面内容模板提供正确的标题和元描述。
编辑
我的目标与他们在hypem.com上所做的几乎相同。他们有一个事件监听器,可以在<title>
列出新内容时更改标签。他们还提供正确的<meta name="description">
标签,但前提是它是对主要页面之一的直接请求,如博客 - 其他页面,如http://hypem.com/blog/indie+today/10332,返回元标签主博客页面,并且仅在直接请求时