社交网络在索引时可以运行JavaScript吗?

社交网络在索引时可以运行JavaScript吗?,javascript,angularjs,web-crawler,single-page-application,Javascript,Angularjs,Web Crawler,Single Page Application,几年来,谷歌爬虫可以在SPA网站上运行JavaScript,以便为网站内容编制索引。但社交网络(如Twitter、Facebook等)则不然 顺便提一下,我看到了一个网站,它使用了AngularJS(版本1.x,所以没有AngularUniversal)。它使用路由,所有元标记如下(您可以在页面源代码中看到其他标记): {{$meta.title} 但社交网络也能做到这一点(在推特和电报信使上进行了测试) 你知道这怎么可能吗?社交网络是否运行JavaScript?不幸的是,社交网络仍然没有在S

几年来,谷歌爬虫可以在
SPA
网站上运行JavaScript,以便为网站内容编制索引。但社交网络(如Twitter、Facebook等)则不然

顺便提一下,我看到了一个网站,它使用了
AngularJS
(版本1.x,所以没有AngularUniversal)。它使用路由,所有元标记如下(您可以在页面源代码中看到其他标记):

{{$meta.title}
但社交网络也能做到这一点(在推特和电报信使上进行了测试)


你知道这怎么可能吗?社交网络是否运行JavaScript?

不幸的是,社交网络仍然没有在SPA页面中运行JavaScript

你可以做一个简单的测试来模拟Facebook的爬虫程序,并检查你链接的站点在引擎盖下做了什么。当
用户代理
连接到其中一个社交爬虫(例如Facebook的
facebookexternalhit/1.1
)时,页面似乎会返回另一个响应

您可以通过在终端中运行以下命令自行检查:

curl -A "facebookexternalhit/1.1" <page address>
curl-A“facebookexternalhit/1.1”
您链接的页面返回的结果看起来像是在服务器端呈现的:

对Chrome用户代理的响应:

[...]
<meta name="description" content="{{$meta.description}}">
[...]
[...]
<meta name="description" content="Login4 is a beautiful Login component for your Ionic app. This template contains Intro, Walkthrough, Login and Sign up screens.">
[...]
[…]
[...]
对Facebook爬虫用户代理的响应:

[...]
<meta name="description" content="{{$meta.description}}">
[...]
[...]
<meta name="description" content="Login4 is a beautiful Login component for your Ionic app. This template contains Intro, Walkthrough, Login and Sign up screens.">
[...]
[…]
[...]

即使Angular 1.x不支持服务器端呈现,也有另一种方法-使用真实浏览器呈现页面,保存HTML输出并为爬虫创建“缓存”版本。如果HTTP服务器识别爬虫的用户代理,它将从另一个目录发送一个文件作为响应。

您的观察是正确的。您需要做的是识别社交网络用户代理,并确保向其显示页面的呈现版本,或任何带有开放图形标记的简化结构(但仅适用于社交网络爬虫而非谷歌机器人)@AlonEitan我如何实现这一点?非常好的描述。谢谢我用卷曲测试。对于facebook爬虫,它呈现并显示结果。有做这个的教程吗?或者你在回答的最后提到了什么?@vahidnajafi我以前也做过类似的事情,所以我可以提供一些文档,并写一些关于配置服务器和使其自动运行的内容:)如果可能的话,我将不胜感激。我能做什么?@vahidnajafi今天在空闲时间我会给你发送所有需要的信息:)这是我的电子邮件地址:vahid[dot]vdn[at]gmail.com