Javascript 机器人是否在React';它的组成部分是什么?
我想知道机器人(例如谷歌搜索引擎爬虫)是否运行客户端JavaScript,从而可以触发Javascript 机器人是否在React';它的组成部分是什么?,javascript,reactjs,google-analytics,google-search,Javascript,Reactjs,Google Analytics,Google Search,我想知道机器人(例如谷歌搜索引擎爬虫)是否运行客户端JavaScript,从而可以触发ComponentDidMount 我的应用程序有许多配置文件,正在通过在配置文件组件的ComponentDidMount e、 g 但我注意到,我记录的浏览量比谷歌分析中的页面浏览量高出约30% 我的应用程序是服务器端呈现的,没有谷歌爬虫现在可以读取javascript,所以你的前端框架和库工作得非常好。但是,事情并不是那么简单 谷歌机器人会解析你的动态内容,但是如果你从javascript机器人中调用任何A
ComponentDidMount
我的应用程序有许多配置文件,正在通过在配置文件组件的ComponentDidMount
e、 g
但我注意到,我记录的浏览量比谷歌分析中的页面浏览量高出约30%
我的应用程序是服务器端呈现的,没有
谷歌爬虫现在可以读取javascript,所以你的前端框架和库工作得非常好。但是,事情并不是那么简单
谷歌机器人会解析你的动态内容,但是如果你从javascript机器人中调用任何API(get/post),一般都不会等待它们,因此如果你的大部分内容都是通过API调用来的,机器人不会读取文本
现在来看google analytics,是的componentDidMount()由google爬虫读取。我建议在API调用开始之前,在componentDidMount()
中首先触发一个事件 搜索机器人不运行javascript——虽然我已经多年没有研究过javascript了,但从00年代开始情况可能已经发生了变化:DGoogle机器人现在可以运行JS了,我对此有所了解,将在15-20分钟内回答,远离laptop@HarkiratSaluja你愿意分享你对这个问题的看法吗?谷歌爬虫似乎不运行componentDidMount()
。您能看看我的编辑并告诉我您对问题原因的看法吗?您能在componentDidMount()
中添加一个普通的打印语句吗?bot不能很好地与ajax调用配合使用我认为我无法通过将console.log放入componentDidMount()
进行调试,因为当bot运行该console.log时,我无法知道是否发生了这种情况。我只是在后端添加了一个guard子句,防止在用户代理
看起来是bot时增加视图。
class Profile extends React.Component {
componentDidMount() {
const { params: { id } } = this.props;
client.post(`/profile/${id}/views`)
.catch(err => console.log('Error while incrementing view', err));
}
....
}
app.use((req, res, next) => {
const ua = req.headers['user-agent'];
if (isBot(ua)) {
console.log('BOT DETECTED', req.url, ua);
} else {
console.log('not a bot', req.url, ua);
}
next();
});
BOT DETECTED /profile/1111 Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
not a bot /profile/1111 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
not a bot /profile/1111/views/views Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36