【问题标题】:dynamic node.js content动态 node.js 内容
【发布时间】:2011-11-14 14:56:23
【问题描述】:

我目前正在构建一个运行 node.js 0.4.12 和 express 框架的小型音乐测验

目前我的快速设置非常基础,只提供基本网址

app.get('/', function(req, res){
res.render('index.jade');
});

我已经实现了一个小型导航,它使用一个非常大的 div 隐藏溢出和一个内部 div,其内容根据您单击的导航标题调整其左值。

我还有一个新闻部分,只要你点击它就会运行一个 mongodb 查询(内容通过 socket.io 传递)

当然,这根本不是搜索引擎友好的,我的新闻永远不会被找到,并且每次都运行查询来获取新闻只是不需要的。 所以我需要某种方式来存储新闻信息,并且只在发布新的 cmets 或添加新新闻时更新它......

创建工作链接也很繁琐,目前我通过javascript使用document.location.href.replace...

另一个问题是,如果我继续将我拥有的所有内容放在一个页面上,我担心网站会变得太大并且加载时间太长......

那么,我如何才能保持页面当前的感觉(一个无所不在的播放器,除非您离开页面,否则永远不会停止),同时还为搜索引擎提供正确的服务并保持页面加载时间较短?

【问题讨论】:

  • 如果内容不断添加到您的“单页”中,那么这对 SEO 也有好处。我不确定是否有额外的链接会有很大的不同。

标签: mongodb node.js seo express socket.io


【解决方案1】:

如果我走在正确的轨道上,请告诉我,因为我不完全理解你的问题,但这是我将如何完成你想要做的事情:

如果您正在寻找 SEO 的好处,有两种方法可以做到这一点。

要么在单个页面上从服务器加载所有内容,然后在加载后使用 CSS 和 Javascript 来操作内容...

以传统方式设置您的页面(每个导航选项卡都链接到一个新的完整页面),然后根据需要使用 Javascript 通过 AJAX 加载您的内容。

在这两种情况下,Google 都可以抓取您的页面/网站结构并获取所需的一切,并且您仍然可以使用 JS 为您的用户进行交互分层。无论您最终做什么,SEO 规则通常都是“像我不需要 JS 来加载您的所有内容一样对待它”。

听起来您已经涵盖了第一个场景,尽管我不会在链接中使用 JS,而是使用 ids 将它们设为标准 HTML 锚链接。

如果您对第二种情况感兴趣,我建议您这样做:

首先,将您的导航视为不需要 javascript 即可正常工作。这意味着每个导航元素都链接到一个单独的页面(每个页面都需要一个单独的快速路由)。

如果您使用 Jade 来呈现您的模板,我会使用它的继承功能来管理您的标记。基本上,您会将所有 html 放入 layout.jade,并在用于页面内容的大 div 中,创建一个带有默认内容的 block。然后,您为每个导航元素设置的路由将调用扩展 index.jade 的不同模板,并将特定于页面的内容写入您创建的 block

这是一个例子:

app.get('/', function(req, res){
  res.render('index.jade');
});

app.get('/section1', function(req, res){
  res.render('section1.jade');
});

app.get('/section2', function(req, res){
  res.render('section2.jade');
});

这可确保您每次访问 http://yoursite.com/section1 时都会呈现整个页面(页眉、页脚等),但您不必在每个模板中复制页眉和页脚代码。它只存在于index.jade 中,并由其他特定于部分的模板扩展。

在设置您的新闻提要时,除非它向客户端推送实时新闻更新,否则我会放弃 socket.io 设置,而是在页面加载时从您的数据库中加载它。抓取页面加载时从数据库返回的任何内容,并通过局部变量将其传递给您的玉模板。例如:

app.get('/news', function(req, res){
  res.render('news', {
    newsArticles: newsArticles
  });
});

最后,当您像标准网站一样工作时(传统的 http 页面加载与 javascript 加载),然后在您的 javascript 上分层以将页面转换为通过 AJAX 加载内容的页面。我使用 jQuery 来做到这一点,它工作得很好。编写一些 jQuery 代码,将点击事件附加到每个导航项。此单击事件将从链接中的href 获取 URL,然后将其传递给 jQuery 'load' 方法,然后该方法将使用刚刚通过 ajax 加载的页面中的标记替换主内容区域中的内容。

【讨论】:

  • 感谢您的精彩评论!我能够完成第二个场景并且运行顺利=]
猜你喜欢
  • 2015-08-17
  • 1970-01-01
  • 2011-11-06
  • 1970-01-01
  • 1970-01-01
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多