如果您使用hashbang网址,la /#!/path/to/content
,Facebook刮刀(以及Googlebot)将自动转发到/?_escaped_fragment_=/path/to/content
,您可以在其中呈现内容服务器端以供刮刀使用
对于Google,如果您添加了片段元标记(<meta name="fragment" content="!">
),则可以使用HTML5历史记录样式网址(例如,只需/path/to/content
),并且仍然可以知道重定向到转义的片段网址
og:url
元标记的任何内容,但我不确定这是否正确使用了og:url标记。
答案 0 :(得分:1)
这是未经测试的,但我相信你可以嗅出Facebook僵尸的用户代理并将其转发到基于此的/?_escaped_fragment_
网址。
答案 1 :(得分:0)
所以今天在Twitter上与你交谈并做我自己的研究之后,我找到的唯一适合我的解决方案如下:
我正在使用node + express。我首先检查查询字符串是否为google crawler,但如果用户代理是facebook,我会使用它代替我的片段变量。然后我解析url并使用grunt-htmlSnapshot插件匹配我创建的一个快照。
app.use(function(req, res, next) {
var userAgent = req.headers['user-agent'];
var fragment = req.query._escaped_fragment_;
if (userAgent.indexOf('facebookexternalhit') >= 0) {
fragment = req.url;
}
// If there is no fragment in the query params
// then we're not serving a crawler
if (!fragment) return next();
// If the fragment is empty, serve the
// index page
if (fragment === "" || fragment === "/")
fragment = "/.html";
// If fragment does not start with '/'
// prepend it to our fragment
if (fragment.charAt(0) !== "/")
fragment = '/' + fragment;
// If fragment does not end with '.html'
// append it to the fragment
if (fragment.indexOf('.html') == -1)
fragment += ".html";
fragment = fragment.replace(/\//g, '_');
// Serve the static html snapshot
try {
var file = "./snapshots/snapshot_" + fragment;
res.sendfile(file);
} catch (err) {
res.send(404);
}
});
我的所有快照都存储在./snapshots中,而“/ contact /”页面的快照示例为:./ snapshot_snapshot__contact.html
这一切都经过测试,效果很好!