百度蜘蛛抓取耗费了大量的 Google Maps API 使用量

2018-05-24 11:57:25 +08:00
 Tonni

去年我们公司的手机站使用了 Angular 做的 SPA,SEO 说不行,搜索引擎不爬 JS 的,这样做百度🕷️抓不到数据,今年我们重写了老的 SPA 手机站,改为了 PHP 输出 HTML 来渲染页面,前几天上线后发现我们每天的 25k Google Maps 使用量会在大约两个小时的时间内消耗殆尽,但是从 GA 那里拿到的数据上看我们的 PV 是没有这么高的。

几番查证发现是百度🕷️在抓取我们的 Google Maps API,我们的 Google Maps API 是直接写在 HTML 的底部的:

<script src="http://maps.google.cn/maps/api/js?v=3.32&region=cn&language=zh-CN&key=KEY" type="text/javascript"></script>

和 SEO 讨论后把 HTML 的 script 转移到了 JS 里面,按照之前百度🕷️不执行 JS 的认知觉得这样就可以解决这个问题了:

const key = 'KEY';
const googleMaps = `http://maps.google.cn/maps/api/js?v=3.32&region=cn&language=zh-CN&key=${key}`;

$.getScript(googleMaps).done(() => {
	//...
});

部署到线上后发现 Google Maps API 的使用量还是居高不下,难道百度🕷️已经开始执行 JS 了吗?我在 Google Developer Console 里面看不到 API 请求细节,只好在 JS 下面又加了一段代码:

$.getScript('/will_baidu_spider_crawl_me');

部署到线上后在 access.log 里面发现了大量百度🕷️发起的 /will_baidu_spider_crawl_me 的请求

```10.1.21.42 - - [24/May/2018:11:55:12 +0800] "GET /will_baidu_spider_crawl_me?_=1527134112074 HTTP/1.0" 404 21 "http://m.juwai.com/property/36375240" "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)" "111.206.198.36, 223.202.197.10"```

百度果然已经开始执行 JS 了 🤯。

4123 次点击
所在节点    分享发现
17 条回复
input2output
2018-05-24 12:10:34 +08:00
Google 似乎也会执行, 我博客上的邮箱地址要用 JS 解密, 但是 Google 呈现出明文了
congeec
2018-05-24 12:12:21 +08:00
key 实在要放前端也要混淆拼接一下嘛

PHP 白写了....
morethansean
2018-05-24 12:16:54 +08:00
既然如此前端渲染的 SPA 他为什么不能抓取……
chinvo
2018-05-24 12:18:09 +08:00
Baiduspider-render/2.0

看来是更新了,大概是用了无头浏览器
oszlso
2018-05-24 12:19:16 +08:00
把这个 js 放到单独的目录 再在 robots 里面限制一下目录 不知道这样还会不会抓取(我没实验过)
just1
2018-05-24 12:19:24 +08:00
so 为什么不判断 ua
kookpua
2018-05-24 12:20:28 +08:00
只引用 js 也计算数量?
Tonni
2018-05-24 13:05:45 +08:00
@oszlso
@just1

根据 UA 屏蔽效果并不好:

1. 对搜索引擎输出不用的内容对 SEO 来说是一件有风险的事。
1. 不想维护一个 UA 列表,今天是百度,可能明天就是 Google 或者其它的了,到时候又要更新这个列表。

现在的解决方案是在后端新建了一个 endpoint:`/google-maps-api`,这个 endpoint 只返回一个 301 重定向,重定向至真正的 Google Maps API 地址,然后在 robot.txt 里面把这个 endpoint 禁用掉,这是最方便的解决方案。
Tonni
2018-05-24 13:07:55 +08:00
@congeec 不用担心,Developer Console 里面设置了认证的,这样使用并没有什么不妥。


@morethansean SEO 同事告诉我百度只是能抓取了,但是效果还不是很好。
Tonni
2018-05-24 13:08:28 +08:00
@kookpua 是的,百度请求了 Google Maps API 而且还执行了 JS。
m939594960
2018-05-24 13:10:22 +08:00
https://ziyuan.baidu.com/wiki/990 好像确实渲染 js 了
UnPace
2018-05-24 16:25:06 +08:00
robots 禁止抓取可以解决吧
Tonni
2018-05-24 18:00:53 +08:00
@UnPace 暂时没有,robots.txt 已更新,百度还在疯狂请求 `/google-maps-api`,地图请求又被耗尽了,明天观察变化。
sobigfish
2018-05-24 18:26:01 +08:00
@UnPace #12 说的好像百毒的会尊重 robots.txt 一样😂
Tonni
2018-05-25 15:12:03 +08:00
百度没有遵守 robots.txt 协议,早上依然在疯狂的爬我们的 API,已经用 UA 判断来屏蔽了。
DT27
2018-05-25 16:32:08 +08:00
百度就算抓也不应该这么短时间上前次的疯狂抓啊。。。
会不会是谁特意伪造 ua 来攻击?
Tonni
2018-05-25 22:15:47 +08:00
@DT27 不是,我们站点有几百万的房源,之前是 SPA 的页面,不好抓取,现在刚上线了使用传统的 HTML 重写了一遍,搜索引擎抓取更容易了,而且是个很大的变化,所以刚上线后百度会疯狂爬一段时间。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/457394

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX