0

我的网站有所有动态加载的内容。

我编写了一些 JS 函数,它们根据收到的 URL 更改内容。如果有人访问 www.mysite.com/#1056,则会加载该内容。

function getLocationHash() {
    //check if there is a location hash in the address bar, get that URL
    if (window.location.hash != '') {
        processURL()
    }
}

然后它调用 processURL 函数

function processURL() {
    if (window.location.hash != '') {
        urlHash = window.location.hash;

        //if it's a catalog item, it has a number above #1000
        if (urlHash > 10000) {
            getDetail(urlHash);
        }

这适用于历史记录或直接跳转到站点上的 URL - 但是,其他站点不能遵循这一点。例如,如果我在 Facebook 状态中输入 www.mysite.com/#1056,FB 只会抓取 www.mysite.com 索引页面。它不会一直持续到 JS 的末尾。这是因为 JS 正在寻找“窗口”属性吗?

谷歌抓取也是如此。我设置了一个包含所有散列 URL 的站点地图,但 Google 只抓取索引页面。

所以问题是:我如何获取我在这里的内容并正确格式化 Facebook 和 Google 等其他服务可以“看到”的 URL?

任何提示将不胜感激。

4

2 回答 2

5

指示片段标识符的#开始。这是您链接到页面的一部分的方式。

它经常被 JavaScript 读取以通过 Ajax 加载不同的内容,但这仅在客户端运行 JS 时才有效。

Google 和 Facebook 使用的爬虫不运行 JS。

  1. 停止使用片段标识符加载内容
  2. 改用真实的 URL
  3. 让服务器为这些 URL 提供完整的页面
  4. 使用历史 API应用您的 Ajax 更改以更新 URI 以匹配将直接加载您使用 JS 创建的页面的URI
于 2013-10-24T11:08:11.590 回答
-1

这些是我在研究时发现的解决方案。

如谷歌页面中所述,对于抓取有 'hashbang' 。https://developers.google.com/webmasters/ajax-crawling/docs/learn-more?hl=nl

例如,对于 facebook 上的链接,您可以使用 html5 pushstate。 http://badassjs.com/post/840846392/location-hash-is-dead-long-live-html5-pushstate

于 2013-10-24T11:09:17.160 回答