5

我只使用带有 JS 脚本的 index.html 来生成整个网站。

JS 基于通过服务器端 API 接收的 JSON 数据创建 HTML 内容。这在客户端工作得很好,使网站加载速度和交互非常快,但是有一个障碍......当爬虫来索引页面时,它会看到一个空白页面。

显而易见的解决方案是提供一个包含所有页面的静态版本的 XML 站点地图。问题是......当它们仅在客户端生成并且所有逻辑和模板都是客户端时如何生成每个页面的静态版本?

这不是一个新问题......我确信任何在客户端动态生成页面的人都遇到了这个问题并解决了这个问题,但我想我会在深入研究并尝试解决这个问题之前询问开发社区。

4

1 回答 1

2

2019 更新

科技取得了显着进展。我鼓励任何希望在同构代码库中创建 SSR(服务器端渲染)客户端 Web 应用程序的人来看看优秀的 Next.js。

Next.js 使用 Node.js 中构建的服务器端路由和渲染系统包装了 React,定义了一个标准接口来获取服务器和客户端上的页面数据,并带有一些开箱即用的功能,使其成为最好的之一SSR 和 CSR Web 应用程序的选择(恕我直言)。

哦……他们也有很棒的教程!

2013年答案

我已经设法通过使用 PhantomJS 从客户端输出生成静态页面,并在页面和所有 JS 完成加载/执行后捕获 HTML 输出。这种方法比我想要的要慢,而且不太可能很好地扩展,但这是迄今为止我能想到的唯一选择。

该网站每天已经收到超过 10,000 次页面浏览量和超过 8,000 名独立访问者,因此页面会随着新评论/帖子的创建而定期更新,然后这些更改会添加到队列中,该队列在单独的服务器中进行处理以使用 Phantom 生成静态页面。

我能想到的唯一另一种方法是创建一个 Node.js 进程,该进程使用相同的 jsRender 库并根据一些数据从模板文件构建 HTML 输出,但这会很耗时并且不会生成与动态站点创建的完全相同的输出。谷歌可能不赞成我为它提供静态页面,这些页面并不能真正代表“普通”访问者可以看到的动态版本。

这似乎是一个无法解决的问题。要么我完全在服务器端生成页面,要么爬虫无法索引页面。:(

于 2013-05-09T22:12:16.597 回答