为什么其他网站/服务看不到我的哈希网址?

时间:2013-10-24 11:04:38

标签: javascript jquery hash

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

我编写了一些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);
        }

这适用于历史记录或直接跳转到网站上的网址 - 但是,其他网站无法遵循此规则。例如,如果我将www.mysite.com/#1056输入Facebook状态,FB只会搜索www.mysite.com索引页面。它没有贯穿JS的末尾。这是因为JS正在寻找'窗口'属​​性吗?

Google抓取也是如此。我设置了包含所有哈希网址的站点地图,但Google只会抓取索引页面。

所以问题是:我如何利用我在这里的内容并正确格式化Facebook和谷歌等其他服务可以“看到”的网址?

任何提示都会非常感激。

2 个答案:

答案 0 :(得分:5)

#表示片段标识符的开头。这是你链接到页面的一部分。

JavaScript经常被滥用来通过Ajax加载不同的内容,但这只有在客户端运行JS时才有效。

谷歌和Facebook使用的刮刀不运行JS。

  1. 停止使用片段标识符加载内容
  2. 使用真实网址
  3. 让服务器提供这些网址的完整页面
  4. 使用the history API应用您的Ajax更改来更新URI以匹配将直接加载您使用JS创建的页面的URI

答案 1 :(得分:-1)

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

对于抓取,有'hashbang',如google网页中所述。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