hexo相关笔记

一些配置规则

路径生成规则

pwd"E:/tenyding/blog/source/_posts" 文章根目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# eg:
# E:/tenyding/blog/source/_posts/study/js/base.md
# 假设当前文章开头(Front-matter)如下
---
title: test
tags: [Mongodb,bash]
categories: [技术,小玩意]
categories_path: [技术]
---

# 文章路径
http://tenyding.cn/_posts/[folder_1]/[folder_2]/.../[folder_*]/aaa/
-> http://tenyding.cn/study/js/base/

# 分类路径
http://tenyding.cn/categories/[...categories]/
-> http://tenyding.cn/categories/技术/小玩意/

# 标签路径
http://tenyding.cn/tags/[tags]/
-> http://tenyding.cn/tags/Mongodb/
-> http://tenyding.cn/tags/bash/

文章排序相关

1
2
3
4
5
6
index_generator:
path: '' # Root path for your blogs index page
per_page: 10 # 每页文章数量
order_by: # 主页文章排序:posts属性 Object.keys(locals.posts.data[0]) [1:倒序,-1:顺序]
updated: 1 # 优先根据更新日期
date: 1 # 其次根据发表日期

locals.posts.data[0] 的一些属性,自己可以在文章开头(Front-matter)添加字段

1
2
3
4
5
6
7
__post, _content, _id, 
aside, asset_dir, categories, comments, content, cover,
date, description, excerpt, full_source, highlight_shrink,
layout, link, more, next,
path, permalink, photos, prev, published,
raw, site, slug, source,
tags, title, updated

对应的执行文件:/node_modules/hexo-generator-index/lib/generator.js

在权重之前修改为如下:

1
2
3
4
5
6
7
8
const posts = locals.posts;
const order_bys = config.index_generator.order_by
const orderKeys = Object.keys(order_bys).reverse()

orderKeys.forEach(item => {
let keyValue = order_bys[item]
sort(posts.data, (a, b) => (b[item] - a[item]) * keyValue);
})

后来发现好像不太合理,有时会批量的对旧文章进行格式修改从而适配现在的格式,导致更新时间可能比后来写的文章还新

但单纯根据首发时间来排序,也会有问题,比如我更新/续写以前的某篇文章时,它的排序不能提前

于是改了一下,采用 发表日期 + 更新日期 来比较

1
2
3
4
5
6
7
8
9
// 发表日期 + 更新日期
if(orderKeys.includes("date_update")){
sort(posts.data, (a, b) => {
return ((b.date + b.updated) - (a.date + a.updated)) * order_bys["date_update"];

// 也可以改为
// return ( (b.date - a.date)*【发表日期权重】 + (b.updated - a.updated)*【更新日期权重】 ) * order_bys["date_update"]
});
}

当然还需要在 _config.yml 加上 index_generator.order_by.date_update 这个字段

sitamap

hexo-generator-sitemap

hexo官方自带

github: hexo-generator-sitemap 查看详情以及使用说明

1
2
3
4
5
6
7
# 目标位置: /node_modules/hexo-generator-sitemap/lib/template.js

# 修改如下部分,使其能处理文章标题中出现的 '&' 符号
env.addFilter('uriencode', str => {
return encodeURL(str).replaceAll("&","%26"); //
});

hexo-generator-baidu-sitemap

专门是针对百度 SEO 的

1
2
3
4
5
6
# 目标位置:/node_modules/hexo-generator-baidu-sitemap/lib/generator.js

# 把 baidusitemap.ejs 文件中的如下部分,使其能处理文章标题中出现的 '&' 符号
encodeURI(post.path)
改为:encodeURI(url)+encodeURIComponent(post.path)

提交SEO

登录 百度搜索资源平台 | 站长工具 | SEO

  1. 站点验证: 站点验证图文详解

  2. 找到 普通收录

    • API

      1
      2
      # 这里可以用 hexo-generator-sitemap 生成的.txt文件,但里面有标签页以及一些资源页面,可以去掉
      curl -H 'Content-Type:text/plain' --data-binary @sitemap.txt "http://data.zz.baidu.com/urls?site=https://tenyding.cn&token=xxx"
    • sitemap

      1
      https://tenyding.cn/baidusitemap.xml
    • 手动提交

      但需要注意的是,手动提交和API提交,一次都限制20条记录,所以还需要切割就很麻烦

针对站点当前配额:sitemap额度为 0,api额度为10以下的情况
配额申请

这个你也可以找客服,机器人会给你弹的,申请完说是要等约15天


插件开发

文档:https://hexo.io/zh-cn/docs/plugins

一些规则

  1. 需要以 hexo-* 来命名,不然会被忽视

  2. 编写好插件

至少需要两个主文件

1
2
3
.
├── index.js
└── package.json

package.json

1
2
3
4
5
{
"name": "hexo-my-plugin",
"version": "0.0.1",
"main": "index"
}
  1. 添加插件

在 source/_data/plugins/ 中创建一个新的 yaml 文件,使用您的插件名称作为文件名。

source/_data/plugins/<your-plugin-name>.yml

编辑 source/_data/plugins/<your-plugin-name>.yml 并添加您的插件。 例如:

1
2
3
4
5
6
description: Server module for Hexo.
link: https://github.com/hexojs/hexo-server
tags:
- official
- server
- console
  1. 将插件添加到 hexo 项目实例根目录下的 package.json 文件中的依赖项(dependencies)中,以便 Hexo 检测并加载它。