如何获取来自百度搜索访问量对应的关键词,以便于根据关键词更准确的给访问者推送内容?
网上误传:此方法不可行
以下是网上流传的代码:
2222 :<div id="huanw"></div>
<script type="text/javascript">
function queryString(parm,parm2){
var url1 = parm2;
//indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。
//如果要检索的字符串值没有出现,则该方法返回 -1。
var begin = url1.indexOf("&"+parm+"=")+parm.length+2;
if(begin == -1) return '';url2 = url1.slice(begin);
var end = url2.indexOf("&");
if(end == -1){
return url2.slice(0);
}else{
return url2.slice(0,end);
}
}$line='<span>测试</span>';
if(document.referrer){
// 获取上级页面
var url = document.referrer;
// 判断是不是百度的域名
if(url.match("www.baidu.com")) {
// 第一个参数是百度的get参数wd拼接的关键词
var mywords = queryString("wd",url);
if(mywords != '') $line='<span>'+decodeURI(mywords)+'</span>';
// 判断是不是百度手机端
}else if(url.match("m.baidu.com")){
var mywords = queryString("word",url);
if(mywords != '') $line='<span>'+decodeURI(mywords)+'</span>';
}
}$('#huanw').html(document.referrer);
</script>
问题探究:为什么不可行
而事实上,百度已在PC、移动端搜索中取消referer中关于关键词的显示,保护站点流量关键词数据信息,第三方将不再可以轻易地窃取到流量关键词,令站点数据更加私密化。
具体的技术实现如下:
例如搜索关键词“延誉宝”,浏览器中的网址为:
https://www.baidu.com/s?wd=%E5%BB%B6%E8%AA%89%E5%AE%9D&rsv_spt=1&rsv_iqid=0x884ac1b10000176e&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=&tn=baiduhome_pg&ch=&rsv_enter=1&rsv_dl=ib&rsv_btype=i&inputT=1707
当你点击搜索结果中的某一下,正常情况下是直接进入网站的,但是仔细看,你会发现网站的网址是类似这样的:
https://www.baidu.com/link?url=I1rkjxAua42TLC00OaSZTc4HpI6I6-miKB9oYmRWIba&wd=&eqid=aad9f36800007b8f00000004603221c4
毫无疑问,百度做了加密,根据document.referrer取到的,也是这个网址。
解决方案:付费使用百度云
百度智能云为了满足站长获取网站流量关键词的数据分析需求提供了精细化的搜索Referer API服务,在百度智能云网络环境内提供实时和批量获取API,站长通过提供其网站Referer关键词的eqid可以获取对应的Referer关键词。
对应的接口网址为:https://cloud.baidu.com/doc/RefererAPI/s/hjwvycn07
主要原理,是将eqid这个参数传给API接口,接口返回这个eqid对应的真实的关键词。
HTTP / 1.1 200 OK
Cache - Control: no - cache
Server: nginx / 1.2 .4
Date: Fri, 14 Aug 2015 07: 16: 09 GMT
Content - Length: 21
Content - Type: application / json;
charset = utf - 8
{
"wd": "%E7%AB%99%E9%95%BF",
"eqid": "dd2fcaa200000b440000000255bb2d70"
}
技术开发比较简单,门槛不高。费用大约是1000次/1元。