看到 wordpress 博客上有自动检测并展示是否被百度/谷歌收录的功能,在想 Typecho 是不是也可以实现呢?答案是肯定的!
一、效果
1、文章《【杂记】流水线小计》设置了密码访问,搜索引擎访问均返回 403,故百度和谷歌均未收录:
2、文章《【杂记】2/28 起国内 iCloud 将由云上贵州运营》已被谷歌收录,但百度未收录:
3、文章《【教程】给网页标题增加特效》已被百度和谷歌收录:
4、被百度收录,但谷歌未收录:
二、实现
主要修改主题模板中的 function.php 和 post.php,可以在后台主题中直接编辑这两个文件,也可以下载下来通过代码编辑器(如 Editplus、Notepad++ 等)编辑后再覆盖上传。
① function.php
文件路径:网站根目录/usr/themes/模板名/function.php,建议修改前先做个备份。
直接在最尾巴或者合适的位置添加以下代码:
//百度收录查询
function baidu_record() {
$url='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$url2='https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
if(checkBaidu($url)==1)
{echo "已收录";
}
else
{echo "<a style=\"color:red;\" rel=\"external nofollow\" title=\"点击提交收录!\" target=\"_blank\" href=\"https://ziyuan.baidu.com/linksubmit/url?sitename=$url2\">未收录</a>";}
}
function checkBaidu($url) {
$url = 'http://www.baidu.com/s?wd=' . urlencode($url);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$rs = curl_exec($curl);
curl_close($curl);
if (!strpos($rs, '没有找到')) { //没有找到说明已被百度收录
return 1;
} else {
return -1;
}
}
//谷歌收录查询
function google_record() {
$url='https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
if(checkGoogle($url)==1)
{echo "已收录";
}
else
{echo "<span style=\"color:red;\">未收录</span>";}
}
function checkGoogle($url) {
$url = 'http://www.google.com/search?q="' . urlencode($url).'"';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$rs = curl_exec($curl);
curl_close($curl);
if (!strpos($rs, 'No results') && !strpos($rs, 'Your search')) { //没有结果说明已被谷歌收录
return 1;
} else {
return -1;
}
}
注:关于判断百度谷歌是否收录的代码,网上有好多版本,有的准确有的准确度差些,如果有更好的代码,欢迎交流!
② post.php
文件路径:网站根目录/usr/themes/模板名/post.php,同样建议修改前先做个备份。
可以在最尾巴(如本站)或者你要展示的位置添加以下代码:
<i class="fa fa-search"></i>
<span>百度收录:<?php echo baidu_record() ?></span>
<i class="fa fa-google"></i>
<span>谷歌收录:<?php echo google_record() ?></span>
可以根据需要自己调整下样式。
保存后或者上传后,清理浏览器缓存,即可看到效果。
2018/01/26 更新:
谷歌收录判断似乎有间歇性出错的情况,间歇意思就是有时候可以正确判断,有时候会返回错误值,可能谷歌有做 curl 限制。
参考文章:
1、《typecho文章页面显示是否已被百度收录的方法》
Windows 10Chrome 71.0.3554.0来自 广东 的大神
这个代码太好了,我拿走了,之前也看过类似的,不过没有谷歌的
短期用是可以比较准确判断,久了貌似谷歌会限制
Windows 10Chrome 63.0.3239.132来自 河南 的大神
这个挺好的,请问我可以转载一下么,会标注来源的
可以的,保留原文链接即可。
Windows 10Chrome 74.0.3724.8来自 山东 的大神
可以授权转载嘛?
标注来源
可以,使用评论时的 IP 访问文章授权地址:https://vircloud.net/action/share/664.md。
Windows 10Chrome 80.0.3987.132来自 河南 的大神
站长您好,可以授权让我复制一下码子不
可以,使用评论时的 IP 访问文章授权地址:https://vircloud.net/action/share/664.md