前言
- 欢迎在文末留言,共同进步。
- 本文采用署名-非商业性使用-相同方式共享 4.0 国际(CC BY-NC-SA 4.0) 许可协议,转载请注明出处!
博客搭建
准备环境
- 关于基础组件的安装,这里不做详细介绍了,可以查看官网
- Git
- Node.js
- Hexo
在 Shell 中(Windows 下可能需要使用 Git Bash)执行初始化命令:
1
2hexo init hexo-blog
cd hexo-blog我这里使用的是
yarn
代替npm
,关于yarn
的安装,参考这里
我用的Hexo
版本是 3.8.0,不需要执行yarn install
命令了,init 的时候就做完了,因此只需要 cd 到目录下即可- 修改站点配置文件
_config.yml
:
配置 | 原值(默认值) | 修改值 |
---|---|---|
title | Hexo | Wdmcheng |
subtitle | Java Coder | |
description | 手握日月摘星晨,世间无我这般人……嗯……吹大了 | |
author | John Doe | 雾都迷城 |
language | zh-CN | |
timezone | Asia/Shanghai | |
url | http://yoursite.com | https://www.wdmcheng.cn |
permalink | :year/:month/:day/:title/ | :title |
new_post_name | :title.md | :year/:month/:day/:title.md |
post_asset_folder | false | true |
index_generator > per_page | 10 | 20 |
per_page | 10 | 20 |
- 启动服务器就可以预览看到效果:
hexo server
- 默认地址:
http://localhost:4000
- 能正常访问,就说明环境基本搭建成功了,可以进行下一步了,先根据提示按
Ctrl+C
终止服务运行
实施方案
这里采用的是遇见西门教程教程的实施方案三,采用 GithubPages + CodingPages 的方式,不过有些变化。我是部署到 GitLabPages
上,然后使用 GitLab
的镜像仓库功能推送到 GitHub
与 Coding
至于 Pages 服务的配置及这些镜像配置就不多介绍了
主题
关于主题优化,详细的教程还是要参考遇见西门的博客
应用主题
- 官网的主题页面很坑,有时候各种
404
,看不见预览,我直接 Github 搜索。Star 数最高的是 NexT 主题,但是旧版的,我这里直接使用新版 根据主题说明,下载安装主题,我直接安装的最新版本
1
git clone https://github.com/theme-next/hexo-theme-next themes/next
修改站点配置文件
_config.yml
的theme
字段,为主题文件夹名称,我这里就是next
,这时候想看到效果需要重启服务了- 不需要默认的
landscape
主题了,直接删除,执行命令rm -rf themes/landscape
主题修改与优化
因为主题是克隆的仓库,后续升级版本其实很方便,为了避免升级时候主题配置的处理太麻烦,因此采用数据文件的形式配置:
执行下面命令,创建
source/_data/
目录,并将默认主题配置文件themes/next/_config.yml
复制到source/_data/
下,命名为next.yml
1
2mkdir -p source/_data
cp -p themes/next/_config.yml source/_data/next.yml修改新的主题配置文件
source/_data/next.yml
,将override
修改为true
RSS 支持
安装 hexo-generator-feed
插件,由 Hexo 自动生成订阅源并插入链接,不需要其他配置
1 | yarn add -D hexo-generator-feed |
修改主题样式
- 修改主题配置文件
source/_data/next.yml
,将scheme
修改为Gemini
,使用双子座主题样式 - 配置菜单显示文章数,修改
menu_settings.badges
为true
- 配置文章目录自动换行,修改
toc.wrap
为true
- 配置侧边栏显示 Back to Top 按钮,并显示阅读百分比,修改
back2top
下sidebar: true
scrollpercent: true
- 配置 footer,修改
footer
下icon.name: heart
icon.animated: true
主页文章只显示摘要
auto_excerpt.enable: true
记录文章阅读位置
打开 save_scroll: true
这个开关就可以在 Cookie
中保存文章的阅读位置,下次进入还会滚动到相同地方
字数统计与阅读时长
- 执行命令
yarn add -D hexo-symbols-count-time
修改站点配置文件
_config.yml
,添加下面代码1
2
3
4
5
6
7# 字数统计与阅读时长
symbols_count_time:
symbols: true
time: true
total_symbols: true
total_time: true
exclude_codeblock: true如果需要显示
站点总字数
与站点阅读时长
的文字,修改主题配置文件source/_data/next.yml
,将symbols_count_time.item_text_total
设置为true
代码片段复制按钮
主题配置文件 source/_data/next.yml
中 codeblock.copy_button.enable
设置为 true
,codeblock.copy_button.show_result
设置为 true
优化字库访问速度
如果需要优化字库访问速度,可以使用国内字体镜像站 fonts.lug.ustc.edu.cn
代替默认的 fonts.googleapis.com
,修改 font
下
enable: true
host: //fonts.lug.ustc.edu.cn
global.family: Monda
headings.family: Roboto Slab
logo.family: Lobster Two
logo.size: 24
codes.family: PT Mono
配置菜单项
menu
下,打开下面几项的注释- about
- tags
- categories
- schedule
执行下面的命令,生成
categories
tags
about
schedule
页面1
2
3
4hexo new page categories
hexo new page tags
hexo new page about
hexo new page schedule生成的文件路径如下
- source/categories/index.md
- source/tags/index.md
- source/about/index.md
- source/schedule/index.md
- 编辑
source/categories/index.md
与source/tags/index.md
文件,在date
下面添加一行,分别为type: categories
type: tags
,然后再各添加一行comments: false
禁止评论。 - 另外两个文件自己随意修改
- 编辑
scaffolds/post.md
模板文件,在title
下新添一行description:
,在tags
下新添一行categories:
,这样以后创建的文章都会自动添加这两个属性 - 还可添加日程表,使用
Google Calendar
,需要梯子。详细配置参考这里,注意主题配置文件中的calendar.calendar_id
不一定要填写 Google 账号对应的 E-Mail,只需要填写一个日历 ID
,一定要是公开日历
,否则会报404
添加创作共用协议
我这里使用的是 by-nc-sa,因此配置 creative_commons
项
sidebar: true
post: true
language: deed.zh
文章开始统一添加前言
这里我写了个前言,添加一下授权协议说明,在每篇博文都默认添加,也可以手动关闭
创建文件
themes/next/layout/_custom/custom-post-preface.swig
,并输入如下内容,或者自行修改1
2
3
4
5
6
7
8<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2>
<ol>
<li>欢迎在文末留言,共同进步。</li>
<li>
本文采用<span class="exturl" data-url="aHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLXNhLzQuMC9kZWVkLnpo" title="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh">署名 - 非商业性使用 - 相同方式共享 4.0 国际<i class="fa fa-external-link"></i></span>
(<span class="exturl" data-url="aHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLXNhLzQuMC8=" title="https://creativecommons.org/licenses/by-nc-sa/4.0/">CC BY-NC-SA 4.0<i class="fa fa-external-link"></i></span>) 许可协议,转载请注明出处!
</li>
</ol>编辑
scaffolds/post.md
模板文件,在categories
下新添一行include_preface: true
,做为显示前言的开关,这样以后创建的文章都会自动添加,并且是打开状态,具体文章的标记改为false
,则那篇文章就不会显示前言编辑
themes/next/layout/_macro/post.swig
文件,在下面所示的区域1
2
3{#################}
{### POST BODY ###}
{#################}找到非
is_index
的,在其上添加如下代码
1
2
3{% if post.include_preface %}
{% include '../_custom/custom-post-preface.swig' %}
{% endif %}
文章末尾统一添加结束标记
- 创建文件
themes/next/layout/_custom/passage-end-tag.swig
,并输入如下内容,或者自行修改<div style="text-align: center; color: #ccc; font-size: 14px;">-------------本文结束<i class="fa fa-paw"></i>感谢您的阅读-------------</div>
在主题配置文件
source/_data/next.yml
中添加如下配置,这里是关闭的,随时开启,只需要将passage_end_tag.enable
从false
改为true
1
2
3# 文章结束标记(需修改主题,自己添加代码)
passage_end_tag:
enable: false编辑
themes/next/layout/_macro/post.swig
文件,在下面所示的标记上面1
2
3{#####################}
{### END POST BODY ###}
{#####################}添加如下代码
1
2
3{% if theme.passage_end_tag.enable and not is_index %}
<div>{% include '../_custom/passage-end-tag.swig' %}</div>
{% endif %}
添加 GitHub Banner
最大的同性交友网站 GitHub 地址还是要放的,方便其他人 Follow me。
找到 github_banner
项,修改以下配置
enable: true
permalink: https://github.com/wdmcheng
添加搜索功能
添加依赖,在 Shell 中执行命令
1
yarn add -D hexo-generator-searchdb
在站点配置文件
_config.yml
中,找到Extensions
,在后面添加1
2
3
4
5
6# 搜索功能
search:
path: search.xml
field: post
format: html
limit: 10000在主题配置文件
source/_data/next.yml
中,修改local_search.enable
为true
移动设备适配
mobile_layout_economy: true
Safari 菜单栏着色
safari_rainbow: true
自定义滚动条件支持
custom_scrollbar: true
添加特效
- 启用
Canvas-nest
,在主题配置文件source/_data/next.yml
中,修改canvas_nest.enable
为true
配置 CDN 加速,修改
vendors
下的配置1
2
3vendors:
canvas_nest: //cdn.jsdelivr.net/gh/theme-next/theme-next-canvas-nest@1/canvas-nest.min.js
canvas_nest_nomobile: //cdn.jsdelivr.net/gh/theme-next/theme-next-canvas-nest@1/canvas-nest-nomobile.min.js我这里还添加了
JavaScript 3D library
,在主题配置文件source/_data/next.yml
中,下面几项配置,需要启用哪种特效,就将false
改为true
,我这里都是暂时关闭的- three_waves: false
- canvas_lines: false
- canvas_sphere: false
配置 CDN 加速,修改
vendors
下的配置1
2
3
4
5vendors:
three: //cdn.jsdelivr.net/gh/theme-next/theme-next-three@1/three.min.js
three_waves: //cdn.jsdelivr.net/gh/theme-next/theme-next-three@1/three-waves.min.js
canvas_lines: //cdn.jsdelivr.net/gh/theme-next/theme-next-three@1/canvas_lines.min.js
canvas_sphere: //cdn.jsdelivr.net/gh/theme-next/theme-next-three@1/canvas_sphere.min.js使用 CDN 加速,安装
Canvas-Ribbon
,修改主题配置文件source/_data/next.yml
,我这里没有启用,需要启用直接修改canvas_ribbon.enable
为true
1
2vendors:
canvas_ribbon: //cdn.jsdelivr.net/gh/theme-next/theme-next-canvas-ribbon@1/canvas-ribbon.min.js
修改动画
motion.async
默认为 false
,这里修改为 true
,感觉动画效果快一些
添加 Live2D 动画角色
安装
hexo-helper-live2d
1
yarn add -D hexo-helper-live2d
在站点配置文件
_config.yml
中,找到Extensions
,在后面添加1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26# Live2D
# https://github.com/EYHN/hexo-helper-live2d
live2d:
enable: true
# local,从本地加载,需要配置 pluginRootPath、pluginJsPath、pluginModelPath 三个属性;后面三种配置从网络加载,不需要配置
#scriptFrom: local 默认
#pluginRootPath: live2dw/ # 插件在站点上的根目录(相对路径)
#pluginJsPath: lib/ # 脚本文件相对与插件根目录路径
#pluginModelPath: assets/ # 模型文件相对与插件根目录路径
#scriptFrom: jsdelivr # jsdelivr CDN
#scriptFrom: unpkg # unpkg CDN
scriptFrom: https://cdn.jsdelivr.net/npm/[email protected]/lib/L2Dwidget.min.js
tagMode: false # 标签模式, 是否仅替换 live2d tag 标签而非插入到所有页面中
debug: false # 调试, 是否在控制台输出日志
model:
# 第一种需要安装相应的包才可用;第二种和第三种需要手动放置相关文件
#use: live2d-widget-model-z16 # npm-module package name
#use: miku # 博客根目录/live2d_models/ 下的目录名
#use: ./wives/wanko # 相对于博客根目录的路径
use: https://cdn.jsdelivr.net/npm/[email protected]/assets/haruto.model.json # 自定义 URL,可设定 CDN
display:
position: right
width: 300
height: 600
mobile:
show: false
主页文章添加阴影效果
编辑 themes/next/source/css/_custom/custom.styl
文件,添加下面代码,我这里注释掉了,取消注释可以启用阴影
1 | // 主页文章添加阴影效果 |
更新主题
可以通过如下命令更新到最新的 master 分支
1 | cd themes/next |
加入广告
我这里用的是 Google AdSense
,网络问题请自行解决
访问 Google AdSense,点击
立即注册
,然后填各种资料,最后生成一段代码,我的是1
2
3
4
5
6
7<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<script>
(adsbygoogle = window.adsbygoogle || []).push({
google_ad_client: "ca-pub-6923016589675745",
enable_page_level_ads: true
});
</script>编辑
themes/next/layout/_custom/head.swig
文件,粘贴代码(稍作修改,添加一些变量及控制)1
2
3
4
5
6
7
8
9{% if theme.google_adsense.enable %}
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<script>
(adsbygoogle = window.adsbygoogle || []).push({
google_ad_client: "{{ theme.google_adsense.google_ad_client }}",
enable_page_level_ads: true
});
</script>
{% endif %}在主题配置文件
source/_data/next.yml
中添加下面代码1
2
3
4# Google AdSense
google_adsense:
enable: true
google_ad_client: ca-pub-6923016589675745等待审核通过,好运。如果失败,可再次申请。
CDN 加速
配置 font-awesome
jquery
velocity
的 CDN 加速,在主题配置文件 source/_data/next.yml
中,修改 vendors
下的配置
1 | vendors: |
静态资源压缩
如果未安装
gulo
,在 Shell 中执行以下命令:1
npm install gulp -g
执行以下命令:
1
2npm install gulp -g
yarn add -D gulp gulp-clean-css gulp-uglify gulp-htmlmin gulp-htmlclean gulp-imagemin在项目根目录下新建
gulpfile.js
文件,内容如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43var gulp = require('gulp');
var cleancss = require('gulp-clean-css');
var uglify = require('gulp-uglify');
var htmlmin = require('gulp-htmlmin');
var htmlclean = require('gulp-htmlclean');
var imagemin = require('gulp-imagemin');
// 压缩css文件
gulp.task('clean-css', function() {
return gulp.src('./public/**/*.css')
.pipe(cleancss())
.pipe(gulp.dest('./public'));
});
// 压缩html文件
gulp.task('minify-html', function() {
return gulp.src('./public/**/*.html')
.pipe(htmlclean())
.pipe(htmlmin({
removeComments: true,
minifyJS: true,
minifyCSS: true,
minifyURLs: true,
}))
.pipe(gulp.dest('./public'))
});
// 压缩js文件
gulp.task('minify-js', function() {
return gulp.src(['./public/**/.js','!./public/js/**/*min.js'])
.pipe(uglify())
.pipe(gulp.dest('./public'));
});
// 压缩 public/demo 目录内图片
gulp.task('minify-images', function() {
return gulp.src('./public/demo/**/*.*')
.pipe(imagemin({
optimizationLevel: 7, //类型:Number 默认:3 取值范围:0-7(优化等级)
progressive: true, //类型:Boolean 默认:false 无损压缩jpg图片
interlaced: false, //类型:Boolean 默认:false 隔行扫描gif进行渲染
multipass: false, //类型:Boolean 默认:false 多次优化svg直到完全优化
}))
.pipe(gulp.dest('./public/uploads'));
});
// 默认任务
gulp.task('default', gulp.parallel('minify-html', 'clean-css', 'minify-js', 'minify-images'));以后只需要在每次
hexo generate
后,执行一下gulp
就可以实现对静态文件的压缩,之后再执行hexo deploy
命令发布。写一下代码,方便复制:1
2
3hexo generate
gulp
hexo deploy
功能增强
标签插件
标签插件用法参考官网
Note 标签 - Bootstrap Callout
在主题配置文件 source/_data/next.yml
中,修改 note
下的配置
style: modern
icons: true
border_radius: 0
light_bg_offset: -3
Tabs 标签支持
tabs.transition.tabs: true
PDF 标签支持
修改配置 pdf.enable: true
Mermaid gantt 图标签支持
修改配置 mermaid.enable: true
数学方程式渲染支持
数学方程式渲染引擎可以使用 mathjax
或 katex
,由 math.engine
项配置,将 math.enable
修改为 true
即可开启
启用 Fancybox
修改配置
1 | fancybox: true |
启用书签功能
1 | bookmark: |
启用顶部阅读进度条
1 | reading_progress: |
启用顶部加载进度条
1 | pace: true |
启用 FastClick
1 | fastclick: true |
启用 Jquery Lazyload 图像延迟加载
1 | lazyload: true |
启用 Quicklink 预加载
1 | quicklink: |
启用汉字标准格式支持
启用方式就是直接按照下面修改主题配置文件 source/_data/next.yml
,我没有启用
1 | han: true |
启用盘古支持——在中英文之间自动添加空格
- 在主题配置文件
source/_data/next.yml
中,修改pangu: true
- 不使用 CDN 的话,需要安装 theme-next-pangu,我这里使用 CDN 加速,直接修改
vendors.pangu
配置1
2vendors:
pangu: //cdn.jsdelivr.net/npm/pangu@4/dist/browser/pangu.min.js
内容分享
百度分享
太丑,Likely
没有本土化,不支持微信什么的,这里使用 NeedMoreShare2
不在本地加依赖了,直接使用 CDN,修改主题配置文件
source/_data/next.yml
1
2
3vendors:
needmoreshare2_js: https://cdn.jsdelivr.net/gh/theme-next/theme-next-needmoreshare2@1/needsharebutton.min.js
needmoreshare2_css: https://cdn.jsdelivr.net/gh/theme-next/theme-next-needmoreshare2@1/needsharebutton.min.css修改如下配置
1
2
3
4
5
6
7
8
9
10needmoreshare2:
enable: true
postbottom:
enable: true
options:
networks: Weibo,Wechat,Douban,QQZone,Twitter,Facebook,Linkedin,Mailto,Evernote
float:
enable: true
options:
networks: Weibo,Wechat,Douban,QQZone,Twitter,Facebook,Linkedin,Mailto,Evernote
评论系统
我这里使用 LiveRe,注册后安装一个免费的 City 版本,在安装代码中找到 data-uid
,然后修改主题配置文件 source/_data/next.yml
,打开 livere_uid
的注释,并填入 data-uid
在线聊天系统
这里没有使用 NexT
官方推荐的,使用的是 DaoVoice,安装方法我参考了这里
注册之后,选择
接入
,编程语言为JavaScript
,会出现下面这种代码1
<script>(function(i,s,o,g,r,a,m){i["DaoVoiceObject"]=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;a.charset="utf-8";m.parentNode.insertBefore(a,m)})(window,document,"script",('https:' == document.location.protocol ? 'https:' : 'http:') + "//widget.daovoice.io/widget/XXXXXXXX.js","daovoice")</script>
1
2
3
4daovoice('init', {
app_id: "XXXXXXXX"
});
daovoice('update');themes/next/layout/_custom/head.swig
文件中添加如下代码(修改一下</script>
结束标签的位置,并且将app_id
做成变量)1
2
3
4
5
6
7
8
9{% if theme.daovoice.enable %}
<script>
(function(i,s,o,g,r,a,m){i["DaoVoiceObject"]=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;a.charset="utf-8";m.parentNode.insertBefore(a,m)})(window,document,"script",('https:' == document.location.protocol ? 'https:' : 'http:') + "//widget.daovoice.io/widget/{{ theme.daovoice.daovoice_app_id }}.js","daovoice")
daovoice('init', {
app_id: "{{ theme.daovoice.daovoice_app_id }}"
});
daovoice('update');
</script>
{% endif %}在主题配置文件
source/_data/next.yml
中添加下面代码,XXXXXXXX
是前面获取到的app_id
1
2
3
4# DaoVoice 在线聊天
daovoice:
enable: true
daovoice_app_id: XXXXXXXX
部署
- 执行命令
yarn add -D hexo-deployer-git
部署配置,在站点配置文件
_config.yml
中,找到deploy
,在其节点下删除type
,然后添加如下配置1
2
3- type: git
repo: [email protected]:wdmcheng/wdmcheng.gitlab.io.git
branch: master执行下面的命令,清理、生成静态文件、部署
1
2
3
4hexo clean
hexo generate
gulp
hexo deploy
站长工具
阅读量统计工具
Firebase
要使用 Firebase 需要梯子,不只是配置过程,用户访问时如果不能连接服务,也是没有办法统计的,因此不建议
- 注册或登录 Firebase,配置好项目,获取到
网络 API 密钥
和项目 ID
,然后修改主题配置文件source/_data/next.yml
的firestore
部分,如下enable: true
apiKey: #<网络 API 密钥>
projectId: #<项目 ID>
Firebase 控制台
中,进入开发 > Database
,创建一个非测试的数据库,之后进入规则
,将allow read, write: if false;
改为allow read, write: if true;
,然后发布
不蒜子
- 修改主题配置文件
source/_data/next.yml
,将busuanzi_count.enable
改为true
- 这里只使用不蒜子的站点统计,文章阅读量交给
LeanCloud
,因此将busuanzi_count.post_views
改为false
- 页面底部的
访客数
图标修改一下,busuanzi_count.total_visitors_icon
的值从user
改为users
LeanCloud
LeanCloud
的相关配置请参考
Leancloud访客统计插件重大安全漏洞修复指南
- 到 LeanCloud 官网注册,可以直接使用
GitHub
账号注册 - 创建一个开发版的应用
- 建立一个无限制的
Counter
类,之后进入设置拿到App ID
及App Key
- 修改主题配置文件
source/_data/next.yml
中的leancloud_visitors
部分enable: true
app_id: #<App ID>
app_key: #<App Key>
betterPerformance: true
- 在
LeanCloud
的设置页面,进入安全中心
,添加Web 安全域名
,注意协议、域名和端口号需严格一致,我这里是https://www.wdmcheng.cn
部署云引擎以保证访客数量不被随意篡改
- 打开
LeanCloud
的云引擎 > 部署
,点击在线编辑
创建函数 > Hook
,Hook
选择beforeUpdate
,Class
选择Counter
,然后粘贴下面代码1
2
3
4
5
6
7
8var query = new AV.Query("Counter");
if (request.object.updatedKeys.indexOf('time') !== -1) {
return query.get(request.object.id).then(function (obj) {
if (obj.get("time") + 1 !== request.object.get("time")) {
throw new AV.Cloud.Error('Invalid update!');
}
})
}注释
处填个描述,我这里写的防止访客数量被随意篡改
- 然后要
部署
一下才可以生效
- 打开
配置数据库记录只可以本地增加,禁止删除
打开站点配置文件
_config.yml
,添加以下配置,app_id
与app_key
是LeanCloud
中的,username
与password
是授权可以create
的用户名与密码1
2
3
4
5
6leancloud_counter_security:
enable_sync: true
app_id: #<App ID>
app_key: #<App Key>
username:
password:执行命令
yarn add -D hexo-leancloud-counter-security
安装相关组件- 执行命令
hexo lc-counter register <<username>> <<password>>
创建用户 - 打开
LeanCloud
的存储
,进入Counter
类,选择其他 > 权限设定
,将create
的权限设置为指定用户
,选择刚才创建的用户,delete
的权限也设置为指定用户
,但用户和角色都留空 - 站点配置文件
_config.yml
的deploy
节点下添加- type: leancloud_counter_security_sync
- 配置 CDN 加速,修改
vendors.leancloud
配置1
2vendors:
leancloud: //cdn.jsdelivr.net/npm/leancloud-storage@3/dist/av-min.js
数据分析工具
Google Analytics
启用 Google Analytics
- 启用
Google Analytics
,前往Google Analytics,注册或登录,获取到Google 跟踪 ID
- 修改主题配置文件
source/_data/next.yml
,将google_analytics
部分的注释打开,并且在google_analytics.tracking_id
填入UA-XXXXXXXX-X
形式的Google 跟踪 ID
关联 Google Search Console
若要关联 Google Search Console
,这里不能使用 HTML 文件
方式验证,因为使用 Hexo
部署时,会自动移除多余的 html 文件。这里采用 Google Analytics
方式验证,那么在启用了 Google Analytics
后必须部署,然后根据 Google 的向导操作
关联 Google AdSense
直接在 Google Analytics
的管理页面关联就可以了
百度统计
打开百度统计,注册、建立网站,完成后会有一个下面这种的
统计代码
,复制https://hm.baidu.com/hm.js?xxxxxxxx
中的xxxxxxxx
,得到统计 ID
1
2
3
4
5
6
7
8
9<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?xxxxxxxx";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>打开主题配置文件
source/_data/next.yml
,找到baidu_analytics
,打开注释,并修改为baidu_analytics: xxxxxxxx
搜索引擎相关
搜索引擎优化(SEO)
在主题配置文件
source/_data/next.yml
中,修改如下配置disable_baidu_transformation: true
seo: true
index_with_subtitle: true
exturl: true
baidu_push: true
各种 Webmaster tools verification 需要到各自官网获取,然后填写到配置文件中,详细说明可参考NexT 主题官网,
我这里开了google_site_verification
bing_site_verification
baidu_site_verification
三个,可以开三个页签分别配置到待验证的环节,然后配好NexT
,一次发布,再分别点验证减少出站链接能够有效防止权重分散,这里安装
hexo-autonofollow
,该工具可以在出站链接上自动添加属性external nofollow noopener noreferrer
1
yarn add -D hexo-autonofollow
在站点配置文件
_config.yml
中添加如下配置,友链不想添加nofollow
属性的,添加到exclude
里1
2
3
4
5nofollow:
enable: true
exclude:
- 友链地址1
- 友链地址2主题配置文件中默认的
permalink
是:year/:month/:day/:title/
,这对搜索引擎不友好,直接修改一下链接层级,变成:title
或者:year-:month-:day-:title
搜索引擎抓取
这里参考 Hexo博客Next主题SEO优化方法
首先安装插件,自动生成
sitemap
文件,一个传统的,一个百度的1
yarn add -D hexo-generator-sitemap hexo-generator-baidu-sitemap
安装完部署,这时网站就有了两个
sitemap
了- 前面已经在
Google Search Console
和百度搜索资源平台中添加验证了站点,现在可以直接提交sitemap.xml
了,百度提交baidusitemap.xml
github
禁止百度爬虫,好在百度支持主动推送,因此还需要添加一个主动推送的插件,执行命令yarn add -D hexo-baidu-url-submit
在站点配置文件
_config.yml
中,参考下面配置、注释及主动推送的接口调用地址添加配置(最后三个是熊掌号
相关的,没有注册熊掌号则不写)1
2
3
4
5
6
7
8baidu_url_submit:
count: 1000 ## 提交最新的一个链接
host: alili.tech ## 在百度站长平台中注册的域名
token: xxxxx ## 请注意这是您的秘钥,所以请不要把博客源代码发布在公众仓库里!
path: baidu_urls.txt ## 文本文档的地址,新链接会保存在此文本文档里
xz_appid: 'xxxxxx' ## 你的熊掌号 appid
xz_token: 'xxxxxx' ## 你的熊掌号 token
xz_count: 10 ## 从所有的提交的数据当中选取最新的10条,该数量跟你的熊掌号而定在
deploy
下增加下面的类型(没注册熊掌号则不添加熊掌号的类型)1
2- type: baidu_url_submitter # 百度
- type: baidu_xz_url_submitter # 百度熊掌号
添加热度排行榜
这里参考了 hexo next 新增阅读排行页面
排行榜源码如下(修改了文章链接地址),其中
leancloud_uri
leancloud_appid
leancloud_appkey
需要替换一下1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24<div id="top"></div>
<script src="leancloud_uri"></script>
<script>AV.initialize("leancloud_appid", "leancloud_appkey");</script>
<script type="text/javascript">
let time = 0
let title = ""
let url = ""
let query = new AV.Query('Counter');
query.notEqualTo('id', 0);
query.descending('time');
query.limit(1000);
query.find().then(function (todo) {
for (let i = 0; i < 1000; i++){
const result = todo[i].attributes;
time = result.time;
title = result.title;
url = result.url;
const content="<p><font color='#1C1C1C'>【文章热度:"+time+"℃】</font><a href='"+url+"'>"+title+"</a></p>";
document.getElementById("top").innerHTML += content
}
}, function (error) {
console.log("error");
});
</script>执行
hexo new page top
命令,创建一个top
页面,编辑该页面,在头部描述区域添加comments: false
关闭评论功能,然后粘贴上述代码- 修改主题配置文件
source/_data/next.yml
,在menu
下添加top: /top/ || signal
- 编辑
themes/next/languages/zh-CN.yml
语言文件,在menu
下添加top: /top/ || signal
自动化部署
我这里是使用 GitLab
私有仓库保存源码(因为含有密钥等信息),使用 gitlab-ci
自动部署的到 GitLab 的仓库,然后使用 GitLab 的镜像仓库功能推送到 github
与 coding
,这样每次写完文章,合并到 master
分支即可
- 使用
GitHub
的 Pages 服务并配置域名,需要添加CNAME
文件,为了自动部署,直接新建source/CNAME
文件,并在里面填写www.wdmcheng.cn
- 如果要使用
HTTPS
,要先解析到Coding
的服务,然后开启Coding Pages
的HTTPS
功能,待申请下来证书后,再添加国外 IP 解析到GitHub
,最后再申请GitHub Pages
的HTTPS
- 三个月证书到期需要续期时,需要先暂停国外 IP 解析,
Coding
续期完成再开启 - 自动化部署的工作流配置,参考 GitLab Pages examples 和 NexT 主题官网,我这里采用的是
SSH
方式部署的,附上我的.gitlab-ci.yml
文件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48# This file is a template, and might need editing before it works on your project.
# Full project: https://gitlab.com/pages/hexo
image: node:10.15.3
before_script:
- export TZ='Asia/Shanghai'
- git config --global user.name "wdmcheng"
- git config --global user.email "[email protected]"
# Restore last modified time
- "git ls-files -z | while read -d '' path; do touch -d \"$(git log -1 --format=\"@%ct\" \"$path\")\" \"$path\"; done"
# Install ssh-agent if not already installed, it is required by Docker.
# (change apt-get to yum if you use a CentOS-based image)
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
# Run ssh-agent (inside the build environment)
- eval $(ssh-agent -s)
# Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store
- ssh-add <(echo "$DEPLOY_PRIVATE_KEY")
# For Docker builds disable host key checking. Be aware that by adding that
# you are suspectible to man-in-the-middle attacks.
# WARNING: Use this only with the Docker executor, if you use it with shell
# you will overwrite your user's SSH config.
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
# In order to properly check the server's host key, assuming you created the
# SSH_SERVER_HOSTKEYS variable previously, uncomment the following two lines
# instead.
# - mkdir -p ~/.ssh
# - '[[ -f /.dockerenv ]] && echo "$SSH_SERVER_HOSTKEYS" > ~/.ssh/known_hosts'
- apt-get update -qq && apt-get install -y -qq pandoc
cache:
paths:
- node_modules/
- .deploy_git/
- source/leancloud.memo
pages:
script:
- npm install hexo-cli yarn gulp@^4.0.0 -g
- test -e package.json && yarn install
- hexo clean && hexo generate
- gulp
- hexo deploy
artifacts:
paths:
- public
only:
- master
致谢
- 遇见西门的博文【持续更新】最全Hexo博客搭建+主题优化+插件配置+常用操作+错误分析
- my_杨哥的简书文章Hexo的Next主题详细配置
- LEAFERx 的博文 Leancloud访客统计插件重大安全漏洞修复指南
- hoxis 的博文 hexo next 配置 DaoVoice 实现在线聊天功能及 hexo next 新增阅读排行页面