相关疑难解决方法(0)

"单页"JS网站和SEO

现在有许多很酷的工具可用于制作功能强大的"单页"JavaScript网站.在我看来,这是通过让服务器充当API(而不是更多)并让客户端处理所有HTML生成的东西来完成的.这种"模式"的问题是缺乏搜索引擎支持.我可以想到两个解决方案:

  1. 当用户进入网站时,让服务器完全按照客户端导航时的方式呈现页面.因此,如果我http://example.com/my_path直接访问服务器将呈现与客户端/my_path通过pushState时相同的事情.
  2. 让服务器只为搜索引擎机器人提供一个特殊的网站.如果普通用户访问http://example.com/my_path服务器应该给他一个JavaScript重型版本的网站.但是,如果谷歌机器人访问,服务器应该给它一些最小的HTML与我希望谷歌索引的内容.

这里将进一步讨论第一种解决方案.我一直在网站上做这个,这不是一个非常好的经历.这不是DRY,在我的情况下,我必须为客户端和服务器使用两个不同的模板引擎.

我想我已经看到了一些优秀的Flash网站的第二个解决方案.我比第一个更喜欢这种方法,并且在服务器上使用正确的工具,它可以非常轻松地完成.

所以我真正想知道的是:

  • 你能想到更好的解决方案吗?
  • 第二种解决方案有哪些缺点?如果谷歌以某种方式发现我没有像普通用户那样为谷歌机器人提供完全相同的内容,那么我会在搜索结果中受到惩罚吗?

javascript seo singlepage backbone.js pushstate

128
推荐指数
4
解决办法
3万
查看次数

$ window.location.origin在使用IE时给出了错误的值

$window.location.origin 在IE上返回错误的值.

origin属性返回URL的协议,主机名和端口号.

url:http:// localhost:8080/products/search

Chrome: $window.location.origin返回http:// localhost:8080

IE: $window.location.origin返回http:// localhost:8080/products/search

我怎样才能在IE上获得正确的价值?

javascript internet-explorer

42
推荐指数
2
解决办法
3万
查看次数

防止Backbone pushState上的整页重新加载

我正在尝试使用Backbone的pushState阻止整页重新加载.当我从视图的事件中调用navigate()时,我看到下面标记为// 1但不是// 2的消息.此外,当我尝试打开相同的选项卡时,页面会再次重新加载.

我必须自己停止活动吗?我尝试使用jQuery的preventDefault(),它确实阻止了页面重新加载,但我没有在任何地方看到过这种情况.

以下是我目前的代码:

App.Router = Backbone.Router.extend({
  routes:{
      "analytics":"analytics"
    , "realtime":"realtime"
  }

  , analytics:function(page) {
    console.log("analytics route hit: %o", page); // 2
  }

  , realtime:function(page) {
    console.log("realtime route hit: %o", page); // 2
  }
});

App.TabSetView = Backbone.View.extend({
  initialize:function() {
    this.collection.bind("reset", this.render, this);
    this.collection.bind("add", this.render, this);
    this.collection.bind("change", this.render, this);
    this.collection.bind("remove", this.render, this);
  }

  , events:{
      'click li.realtime a':  "onRealtime"
    , 'click li.analytics a': "onAnalytics"
  }

  , render:function() {
    // omitted for brevity
  }

  , onAnalytics:function() {
    console.log("onAnalytics"); // 1 …
Run Code Online (Sandbox Code Playgroud)

backbone.js

12
推荐指数
3
解决办法
2万
查看次数