3

我设计了一个网站,其中整个网站都包含在一个页面中(index.php)。在页面内,<section>标签定义了网站的不同部分(主页、联系人、博客等)

导航是通过始终可见的按钮实现的,单击时使用 javascript 更改部分的可见性,以便在任何时候只显示一个。

更具体地说,这是通过使用 url 中的哈希并处理hashchange事件来完成的。这会产生诸如 www.site.com/#home (如果不存在其他哈希则为默认值)和 www.site.com/#contact 之类的 URL。

我想知道这是否是一个好的设计。它有效,但我觉得必须有更好的方法来实现同样的目标?澄清一下,我的目标是加载一次所有主要内容的网站,这样在初始加载后就不会再加载页面,并且在部分之间移动会更顺畅。

除此之外,还引入了另一个关于 SEO 的问题。该网站显示在 google 中,但例如,如果搜索查询包含特定部分中的术语,单击时它仍会加载默认的#home 页面,而不是找到该术语的特定部分。我该如何纠正这个问题?

最后,其中一个部分是博客部分,它是唯一不会一次全部加载的部分,因为默认情况下它会从数据库加载最新帖子。当用户从列表中选择不同的帖子(它本身是使用 AJAX 加载的)时,AJAX 用于获取和显示新帖子,并且 pushState 更改历史记录。同样,为了给每个帖子一个可以在外部引用的唯一 url,菜单会更改由 javascript 处理的 url,从而产生诸如www.site.com/?blogPost=2#blog和之类的 url www.site.com/?blogPost=1#blog

谷歌根本看不到这些帖子。使用 Googlebot 工具显示爬虫将博客部分视为始终为空,因此没有任何博客文章被编入索引。

我能改变什么?

(我不知道这是否应该在网站管理员的stackexchange上,如果它在错误的地方很抱歉)

4

1 回答 1

5

建立一个正常的网站。给每个页面一个正常的 URL。让 Google 将这些 URL 编入索引。如果您没有可供 Google 索引的页面,则它无法索引您的内容。

使用 JS/Ajax 逐步增强网站。

当一个链接被点击(或其他没有 JS 的会加载新页面的操作被执行)时,使用 JavaScript 将当前页面转换为目标页面。

用于pushState将 URL 更改为未使用 JavaScript 时已加载的 URL。(这样做而不是使用片段标识符 ( #) hack)。

确保监听历史事件,以便在单击后退按钮时将页面转换回来。

这会导致以下情况:

  1. /foo用户从谷歌到达
  2. /foo包含/foo页面的所有内容
  3. 用户点击链接到/bar
  4. JavaScript 更改页面的内容以匹配用户/bar直接访问的内容并将 URL 设置/barpushState

请注意,还有一种(不推荐的)hashbang 技术,它可以将单页网站破解为 Google 可以索引的形式,但这种技术并不可靠,不适用于任何其他非 JS 客户端,而且几乎可以做很多工作作为正确地做事。

于 2014-04-16T12:32:35.893 回答