侧边栏壁纸
  • 累计撰写 15 篇文章
  • 累计收到 0 条评论

EMLOG博客- 百度提交自动推送,判断文章是否收录

2025-7-4 / 0 评论 / 34 阅读 / 坐等收录

简介

主要实现了百度搜索收录状态检测与自动推送功能,可帮助网站管理员优化文章在百度搜索引擎中的收录效率

功能概述

  • 百度收录状态检测:通过百度站长平台 API,判断文章是否已被百度收录。
  • 自动推送未收录文章:当管理员访问文章页时,自动向百度提交未收录的文章链接。
  • 收录状态缓存机制:避免频繁请求 API,减少服务器资源消耗。
  • 前端交互提示:向用户显示文章收录状态(已收录 / 未收录),并提供手动提交入口

wechat_2025-07-04_140754_448.png

<?php
/* EMLOG百度搜索自动推送、主动收录JS优化
 * 文章地址:https://www.xjybk.cn/24.html
 * 转载请保留出处,谢谢合作!
 */
function bdPushData($id){
    $url = Url::log($id);
    if(baidu($url) === true){
        echo '<!--本文已收录,不输出推送代码-->';
    }else{
        echo "<script>
(function(){
    var bp = document.createElement('script');
    var curProtocol = window.location.protocol.split(':')[0];
    if (curProtocol === 'https') {
        bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';        
    } else {
        bp.src = 'http://push.zhanzhang.baidu.com/push.js';
    }
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(bp, s);
})();
</script>";
    }
}
?>
<?php
/*
 * 使用百度站长平台API判断内容页是否已收录
 * 并在管理员访问时自动提交未收录文章
 */
function baidu($url){
    // 缓存检测结果,避免频繁请求API
    $cacheKey = 'baidu_index_check_' . md5($url);
    $cacheTime = 3600; // 缓存1小时
    $cacheDir = dirname(__FILE__) . '/cache/';

    // 确保缓存目录存在
    if (!is_dir($cacheDir)) {
        mkdir($cacheDir, 0755, true);
    }

    $cacheFile = $cacheDir . $cacheKey;

    // 尝试从缓存获取结果
    if (file_exists($cacheFile) && (time() - filemtime($cacheFile)) < $cacheTime) {
        $cacheData = file_get_contents($cacheFile);
        if ($cacheData !== false) {
            $cacheData = json_decode($cacheData, true);
            if (isset($cacheData['data'])) {
                return $cacheData['data'];
            }
        }
    }

    // 使用百度站长平台API检测收录状态
    $apiUrl = 'https://api.baidu.com/sitemap/index';
    $postData = array(
        'site' => 'https://www.xjybk.cn', // 替换为你的网站域名
        'token' => 'WooJwDBvfvlUl9mz',   // 替换为你的百度站长平台token
        'url' => $url
    );

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $apiUrl);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/x-www-form-urlencoded',
        'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    ));
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    // 处理API响应
    $isIndexed = false;
    if ($httpCode == 200 && $response) {
        $result = json_decode($response, true);
        if (isset($result['status']) && $result['status'] == 0) {
            $isIndexed = $result['data']['indexed'] == 1;
        }
    }

    // 缓存检测结果
    $cacheData = array(
        'time' => time(),
        'data' => $isIndexed
    );

    file_put_contents($cacheFile, json_encode($cacheData));

    return $isIndexed;
}

function checkbaidu($id){
    $url = Url::log($id);
    if(baidu($url) === true){
        echo "百度已收录";
    } else {
        if (ROLE == 'admin' || ROLE == 'writer') {
            $urls = array($url);
            $api = 'http://data.zz.baidu.com/urls?site=https://www.xjybk.cn&token=WooJwDBvfvlUl9mz';

            $ch = curl_init();
            $options =  array(
                CURLOPT_URL => $api,
                CURLOPT_POST => true,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_POSTFIELDS => implode("\n", $urls),
                CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
                CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
            );
            curl_setopt_array($ch, $options);
            $result = curl_exec($ch);
            curl_close($ch);

            echo '已提交给度娘';
        }
        echo "<a style=\"color:red;\" rel=\"external nofollow\" title=\"点击提交收录\" target=\"_blank\" href=\"http://zhanzhang.baidu.com/sitesubmit/index?sitename=$url\">坐等收录</a>";
    }
}
?>

使用说明

如上PHP代码,添加到主题module.php即可。当页面未被百度收录,将会输出百度自动推送js代码,否则不会输出。

在模板的footer.php文件中</html>前调用<?php echo bdPushData($logid);?>即可。

在模板的echo_log.php文件中调用<?php echo checkbaidu($logid);?>即可。



评论一下?

OωO
取消