2010-03-02 60 views
31

我想在不牺牲SEO的情况下构建ajax网站。我的问题是: 如果我有这样我的网页上链接:将hashtag附加到使用javascript的URL

<a href="http://example.com/cats" id="cats">Cats</a> 
    <a href="http://example.com/dogs" id="dogs">Dogs</a> 

...点击各个链接时,我想更新与相应的主题标签的地址栏中。所以,如果点击“猫”链接,当前位置将为http://example.com/#cats,我可以用它来显示我的ajax内容。如果javascript关闭或用户是搜索引擎,他们将直接进入/猫

+2

只是两个注意事项:1)这不叫“哈希标签”(这是Twitter行话的东西完全不相关);它被称为片段标识符或锚点标识符(请参阅HTML规范)。 2)你不应该在元素的id中包含#符号,即它应该是id =“cats”,它将对应于/ some-url#cats。 – 2010-03-02 20:36:53

回答

44

可以更改location.hash属性,它会改变当前的锚点标识符无须离开浏览构成的页面,例如,你可以:

<a href="http://mysite.com/cats" id="cats" class="ajaxLink">Cats</a> 
<a href="http://mysite.com/dogs" id="dogs" class="ajaxLink">Dogs</a> 

然后:

$('.ajaxLink').click(function (e) { 
    location.hash = this.id; // get the clicked link id 
    e.preventDefault(); // cancel navigation 

    // get content with Ajax... 
});​ 
+1

哇!我不知道这很容易。现在我可以在ajax中创建所有未来的网站,并且仍然可以抓取我的网站并将其编入索引! :D – alooficha 2010-03-02 20:49:58

+0

但是,只有一件事,如果用户书签此URL或从另一个网站点击它,id不会返回当前散列。它返回空。有针对这个的解决方法吗?我如何检查散列加载以及onclick? – alooficha 2010-03-02 20:54:20

+1

你只需在页面加载时检查'location.hash'属性的值,它将包含标识符,包括'#'符号,例如:if(location.hash =='#dogs'){ /*...*/}' – CMS 2010-03-02 21:00:42

0

由于安全原因,您无法在javascript中重新加载页面而无法设置window.location.href。

从我看到的一些人所说的谷歌将索引#urls,但他们将不被视为单独的网页,我认为这不是你想要的。我也很少有SEO经验。

-1

BenMills,没有人提到location.href,它是关于的location.hash不需要重新加载页面。

0

虽然简单是最好的,但如果你只是想这个过程自动化或作出那么它genericise你可以使用这个插件精简版jquery.hashTag.js

$('a').hashTag({ 
    source: function() { 
     return $(this).attr('id'); 
    } 
    }); 

只是把这个片断里面的$(document)。就绪。

它会完成其余的工作本身。 就像自动点击其ID为散列的链接一样。

相关问题