【发布时间】:2018-07-05 17:42:45
【问题描述】:
我的目标是拥有动态的og: 标签,Facebook 爬虫可以看到这些标签。通过做一些研究,我认为最好的(可能也是唯一的)方法是在服务器上预渲染我的应用程序。但是我在这样做时遇到了问题。
我已经有一个现有的 Node.js 服务器,它看起来与大多数在线指南中的服务器略有不同。
const express = require('express');
const bodyParser = require('body-parser');
const path = require('path');
const http = require('http');
const app = express();
// Api for retrieving data from DB
const api = require('./server/api');
// Parsers
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
// Angular DIST folder
app.use(express.static(path.join(__dirname, 'dist')));
// Api location
app.use('/api', api);
// Send all other requests to the Angular app
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname, 'dist/index.html'))
})
// Set Port
const port = process.env.PORT || '3040';
app.set('port', port);
const server = http.createServer(app)
server.listen(port, () => console.log('Magic happens on localhost:' + port));
我尝试过使用 prerender.io。我得到了一个 API 密钥,安装了 prerender-node 并在将请求重定向到 index.html 之前把它放好:
app.use(require('prerender-node').set('prerenderToken', 'my-token'));
// Send all other requests to the Angular app
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname, 'dist/index.html'))
})
我还将它添加到我的 index.html 中:
<meta name="fragment" content="!">
什么都没有改变。也许我还需要做其他事情才能让它工作?同样,我的目标是拥有动态的og: 标签,Facebook 爬虫可以看到这些标签。
附加信息:现在,如果重要的话,我正在使用 Angular 4 附带的 Meta 服务设置元标记。
编辑: 如果有人想测试,演示链接:http://aramet.demo.cdots.bg/news-preview/1
【问题讨论】:
-
您有我们的测试网址吗?我想仔细看看这个问题。
-
@luschn 是的,我已将其添加到编辑中
-
和我想的一样,那里没有 og 标签。
-
确保你明白为什么会发生这种情况:facebook 不解析 javascript。一点也不。显然,一些角度元插件不会解决问题(因为,再一次,没有javascript)。 prerender.io 仅适用于它在没有任何 javascript 的情况下呈现 og 标记。也许这会对你有所帮助:github.com/romelgomez/single-page-application-seo
标签: javascript node.js angular facebook prerender