让你的博客能更加知名,申请百度收录

引言

  相信大家辛辛苦苦建好一个博客应该不会仅仅只是给自己看的吧,总会想着能不能让更多的人看见。不仅仅是满足自己的一点点虚荣心,更是想让自己写的一些优质内容被更多人看见。打破现在大多数博客热衷于抄袭抑或是从国外论坛上扒下来然后机翻的低质量博文潮(这里点名批评C**N)。如何让更多人看见就是第一件也是最重要的一件事。

准备

  • 百度账号
  • nodejs

注册百度站长

  1. 首先我们需要上百度资源中心申请成为我们博客的站主,官方网址点这里。进入界面后点击添加网站,根据提示填写相关的信息

  2. 第三步验证网站时有三种验证方式。

    • 第一种文件验证是比较简单的验证方法,对于使用hexo建站的博客只需要下载文件然后将文件放进博客根文件夹中public文件夹里,然后使用hexo d将博客部署上去等待博客更新后点击验证即可

      image-20220715173543887
    • 第二种html标签验证,不需要下载文件,但是这个方法根据hexo使用的不同主题实现方法可能有变化。以我使用的Sakura主题为例,我们需要将它给出的meta标签的代码放到head.ejs的head标签以下的合适位置,文件位置如图2所示(其中myblog是博客的根目录)

      image-20220715173901349
      图1
      image-20220715174159268
      图2
    • 第三种方法不知道如何使用QAQ,这里暂时略过

  3. 完成认证之后我们需要提交博客里每篇博文的链接更快让百度收录,首先先点击侧边栏—资源提交—普通收录

    image-20220715174854628

    在这个位置可以看见自己API提交的具体接口,记下这个地址接下来我们需要自动生成博文的链接并通过和这个接口提交

扫描生成博文链接

  1. 首先我们现在博客根文件夹创建一个新文件夹用于存放自动生成链接文件的脚本

    image-20220715182205329

    然后创建一个用于查找所有博文的脚本命名为readFileList.js,代码如下:

    /**
     *  读取所有md文件数据
     */
    const fs = require('fs'); // 文件模块
    const path = require('path'); // 路径模块
    
    //注意这个文件路径hexo的博文都存在_post文件夹中
    const docsRoot = path.join(__dirname, '..', 'source', '_posts'); 
    
    function readFileList(dir = docsRoot, filesList = []) {
      const files = fs.readdirSync(dir);
      files.forEach((item, index) => {
        let filePath = path.join(dir, item);
        const stat = fs.statSync(filePath);
        if (stat.isDirectory() && item !== 'robots.txt') {
          readFileList(path.join(dir, item), filesList);  //递归读取文件
        } else {
          if (path.basename(dir) !== 'source') { // 过滤docs目录级下的文件
            const filename = path.basename(filePath);
            const fileNameArr = filename.split('.');
            const firstDotIndex = filename.indexOf('.');
            const lastDotIndex = filename.lastIndexOf('.');
    
            let name = null, type = null;
            if (fileNameArr.length === 2) { // 没有序号的文件
              name = fileNameArr[0]
              type = fileNameArr[1]
            } else if (fileNameArr.length >= 3) { // 有序号的文件(或文件名中间有'.')
              name = filename.substring(firstDotIndex + 1, lastDotIndex)
              type = filename.substring(lastDotIndex + 1)
            }
    
            if (type === 'md') { // 过滤非md文件
              filesList.push({
                name,
                filePath
              });
            }
          }
        }
      });
      return filesList;
    }
    
    module.exports = readFileList;
    
  2. 然后再创建一个脚本用于生成链接文本,链接文本生成的方式根据不同的搭建方式自行更改,此处使用Hexo框架搭建的博客作为示例,在与readFileList.js同一文件夹下创建一个脚本名叫baiduPush.js,代码如下:

    // baiduPush.js
    /**
     * 生成百度链接推送文件
     */
    const fs = require('fs');
    const path = require('path');
    const chalk = require('chalk')
    const matter = require('gray-matter'); // FrontMatter解析器
    const readFileList = require('./readFileList');
    const urlsRoot = path.join(__dirname, '..', 'urls.txt'); // 百度链接推送文件
    const DOMAIN = process.argv.splice(2)[0]; // 获取命令行传入的参数
    
    if (!DOMAIN) {
      console.log(chalk.red('请在运行此文件时指定一个你要进行百度推送的域名参数,例:node utils/baiduPush.js https://bitterlemon.github.io'))
      return
    }
    
    main();
    
    function dateFormat(fmt, date) {
        let ret;
        const opt = {
            "Y+": date.getFullYear().toString(),        // 年
            "m+": (date.getMonth() + 1).toString(),     // 月
            "d+": date.getDate().toString(),            // 日
            "H+": date.getHours().toString(),           // 时
            "M+": date.getMinutes().toString(),         // 分
            "S+": date.getSeconds().toString()          // 秒
            // 有其他格式化字符需求可以继续添加,必须转化成字符串
        };
        for (let k in opt) {
            ret = new RegExp("(" + k + ")").exec(fmt);
            if (ret) {
                fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
            };
        };
        return fmt;
    }
    
    /**
     * 主体函数
     */
    function main() {
      fs.writeFileSync(urlsRoot, DOMAIN)
      const files = readFileList(); // 读取所有md文件数据
    
      files.forEach( file => {
        const { data } = matter(fs.readFileSync(file.filePath, 'utf8')); 
        if (data.date) {
          const date = dateFormat("YYYY-mm-dd", data.date);
          const strDate = date.split('-');
          /**
           * 这里是用于生成链接的方法 hexo搭建的博客链接语法:
           * {域名}/{博文创建年份}/{博文创建月份}/{博文创建日期}/{博文标题}
           */
          const link = `\r\n${DOMAIN}/${strDate[0]}/${strDate[1]}/${strDate[2]}/${file.name}`;
          console.log(link)
          fs.appendFileSync(urlsRoot, link);
        }
      })
    }
    

    代码中需要用到一个Frontmatter可以在Git Bash中使用指令npm install --save gray-matter进行安装

    Frontmatter官方链接

  3. 创建完脚本后,我们可以使用命令node baiduPush.js https://bitterlemon.github.io(此处填写自己博客的域名)便可以生成一个包含所有博文链接的文本文件urls.txt,但是这个指令还需要手打,并且手动上传至百度的接口,这远远还不够。接下来要实现自动推送至百度接口中。

自动调用接口上传

  1. 我们先回到博客的根目录然后创建一个shell脚本用于调用百度的上传接口,文件名叫baiduPush.sh,代码如下:

    #!/usr/bin/env sh
    
    # 确保脚本抛出遇到的错误
    set -e
    
    # 百度链接推送
    curl -H 'Content-Type:text/plain' --data-binary @urls.txt "http://data.zz.baidu.com/urls?site=https://bitterlemonn.github.io&token=xxxxxxxxxxxx"
    # 这里填写百度站长中给出的接口链接
    
    rm -rf urls.txt # 删除文件
    
  2. 然后编辑根目录中的package.json,在dependencies外加一个scripts元素,完整代码示例如下:

    {
      "name": "hexo-site",
      "version": "0.0.0",
      "private": true,
      "hexo": {
        "version": "3.9.0"
      },
      "dependencies": {
        "gray-matter": "^4.0.3",
        "hexo": "^3.7.0",
        "hexo-deployer-git": "^0.2.0",
        "hexo-generator-archive": "^0.1.5",
        "hexo-generator-baidu-sitemap": "^0.1.9",
        "hexo-generator-category": "^0.1.3",
        "hexo-generator-feed": "^1.2.2",
        "hexo-generator-index": "^0.2.1",
        "hexo-generator-json-content": "^2.2.0",
        "hexo-generator-sitemap": "^2.1.0",
        "hexo-generator-tag": "^0.2.0",
        "hexo-git-backup": "^0.1.2",
        "hexo-helper-live2d": "^3.1.1",
        "hexo-renderer-ejs": "^0.3.1",
        "hexo-renderer-marked": "^0.3.2",
        "hexo-renderer-stylus": "^0.3.3",
        "hexo-server": "^0.3.1",
        "hexo-tag-bili": "^1.0.0",
        "hexo-tag-fancybox_img": "^1.0.1"
      },
      "scripts":{
        "baiduPush": "node util/baiduPush.js https://bitterlemonn.github.io && bash baiduPush.sh",
        "push" : "hexo g && hexo d && npm run baiduPush"
      }
    }
    

    只需要添加scripts部分即可,baiduPush中的链接需要改为自己的博客域名

  3. 以后利用hexo生成文件,部署到github等也可以通过输入指令npm run push实现,该指令可以一步完成生成文件,部署至github,并将新的博文链接上传至百度接口。上传成功的返回如下:

    image-20220715185312593

    看到返回的数据中有success条目且没有别的链接表明全部博文链接上传成功!!

后记

  听说因为Github在国内的特殊原因,百度可能没有办法成功收录基于GithubPage的博客,这一点我还没有去验证。百度收录的时间是要一个月,一个月后如果在百度中搜索site:bitterlemonn.github.io显示没有内容的话应该是收录失败了。所以为了保险起见最好使用国内的代码托管平台的page服务,收录成功率会高上更多。如果有资金支持可以考虑购买域名。


初めて会ったの日から 僕の心の全てを奪った