检测Node Express中的社交机器人

时间:2015-03-25 16:51:42

标签: javascript node.js express seo bots

我试图检测以下两个选项之一:

  • 特定的机器人列表(FacebookExternalHit | LinkedInBot | TwitterBot | Baiduspider)
  • 任何不支持Crawable Ajax规范的机器人

我已经看过类似的问题(How to recognize Facebook User-Agent),但没有解释如何在Node和Express中执行此操作。

我需要以这样的格式执行此操作:

app.get("*", function(req, res){ 
  if (is one of the bots) //serve snapshot
  if (is not one of the bots) res.sendFile(__dirname + "/public/index.html");
});

3 个答案:

答案 0 :(得分:10)

您可以检查请求对象中的标头User-Agent并测试其不同机器人的值,

截至目前,Facebook表示他们有三种类型的User-Agent标头值(检查The Facebook Crawler),twitter也有一个带有版本的User-Agent(检查Twitter URL Crawling & Caching),下面的例子应该是覆盖两个机器人。

<强>节点

var http = require('http');
var server = http.createServer(function(req, res){

    var userAgent = req.headers['user-agent'];
    if (userAgent.startsWith('facebookexternalhit/1.1') ||
       userAgent === 'Facebot' ||
       userAgent.startsWith('Twitterbot') {

        /* Do something for the bot */
    }
});

server.listen(8080);

<强>快速

var http = require('http');
var express = require('express');
var app = express();

app.get('/', function(req, res){

    var userAgent = req.headers['user-agent'];
    if (userAgent.startsWith('facebookexternalhit/1.1') ||
       userAgent === 'Facebot' ||
       userAgent.startsWith('Twitterbot') {

        /* Do something for the bot */
    }
});

app.listen(8080);

答案 1 :(得分:6)

您可以使用request.headers对象检查传入请求是否包含特定于该机器人的任何UA信息。一个简单的例子。

<强>节点

var http = require('http');

var server = http.createServer(function(req, res){

    if(req.headers['user-agent'] === 'facebookexternalhit/1.1') /* do something for the Facebook bot */


});

server.listen(8080);

<强>快速

var http = require('http');
var express = require('express');
var app = express();

app.get('/', function(req, res){

    if(req.headers['user-agent'] === 'facebookexternalhit/1.1') /* do something for the Facebook bot */


});

app.listen(8080);

答案 2 :(得分:2)

这个节点表达中间件将分析一堆不同的用户代理字符串,并给你一个“bot == true”或“desktop == true”的方式来确定。我没有使用它,自述文件听起来像只是一个试验项目,所以我不知道它将如何保持未来,但它将检测各种机器人。

https://github.com/rguerreiro/express-device