博客DIY1.0
HTML页面编辑
新增菜单栏
新建文件夹
在hexo > source文件夹中会生成一个studylink文件夹
hexo new page “studylink”
在菜单中添加链接
编辑主题的_config.yml
,在menu
中的添加如下:
1 | menu: |
||
之前的值是目标链接,之后的是分类页面的图标,图标名称来自于FontAwesome icon。若没有配置图标,默认会使用问号图标。
新添加的菜单需要翻译对应的中文
打开hexo>theme>next>languages>zh-Hans.yml
,在menu下添加:
1 | menu: |
参考文章
添加revolvermaps
官方地址:点击进入
将代码复制到相应的页面
侧边栏设置在/themes/next/layout/_macro/sidebar.swig
找到自己觉得合适的地方写入相应的代码
1 | {# visitmap #} |
添加时钟flash
有趣的人体时钟HONE HONE CLOCK
,作者是个日本人,点击此处访问作者博客。我将他添加在了侧边栏,方法同上1
2
3
4
5<!--人体时钟背景透明-->
<script charset="Shift_JIS" src="http://chabudai.sakura.ne.jp/blogparts/honehoneclock/honehone_clock_tr.js"></script>
<!--人体时钟背景白-->
<script charset="Shift_JIS" src="http://chabudai.sakura.ne.jp/blogparts/honehoneclock/honehone_clock_wh.js"></script>
或者创建 js 文件 hone_hone_clock.js
在next\source\js\src
文件夹下创建hone_hone_clock.js
,添加代码:
1 | /*hone-hone-clock*/ |
引用
在next\layout\_layout.swig
文件中,添加引用(注:在 swig 末尾添加):
1 | <!--clock--> |
ps:用户访问手动开启flash支持,不太方便我实现后就把它删除了
博客seo优化
打开Next主题自带的seo配置
打开主题配置文件
1 | canonical: true |
添加sitemap
这一步目的在于告诉搜索引擎你的站点结构。
sitemap生成插件的安装和配置
1 | npm install hexo-generator-sitemap --save |
在站点配置文件中添加sitemap的生成路径
1 | sitemap: |
现在执行 hexo g 生成以后应该可以访问sitemap.xml和baidusitemap.xml
提交sitemap
github好像屏蔽了百度的爬虫,所以即使提交了sitemap,也可能出现无法爬下来的情况。于是我们需要主动向百度提交链接。
安装插件hexo-baidu-url-submit1
npm install hexo-baidu-url-submit --save
在站点配置文件中添加如下内容:1
2
3
4
5baidu_url_submit:
count: 1 ## 提交最新的一个链接
host: ## 在百度站长平台中注册的域名
token: your_token ## 请注意这是您的秘钥, 所以请不要把博客源代码发布在公众仓库里!
path: baidu_urls.txt ## 文本文档的地址, 新链接会保存在此文本文档里
在站点配置文件的deploy下仿照github的类型添加:1
2
3
4
5
6
7deploy:
- type: git # 原来就有的
repo: 巴拉巴拉
branch: master
message: blog update
- type: baidu_url_submitter # 注意,这个为新增的
记得改成上面那种形式,type前面有一个-,然后下面的配置项和type对齐。
添加蜘蛛协议
蜘蛛协议就是告诉爬虫,你的哪些文件爬虫可以爬取,哪些不能的文件。
新建一个robots.txt文件,添加以下内容,然后放到/yoursite/source/文件夹下面:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#hexo robots.txt
User-agent: *
Allow: /
Allow: /archives/
Allow: /categories/
Allow: /tags/
Disallow: /js/
Disallow: /css/
Disallow: /fonts/
Sitemap: https://7iny.jxustctf.top/search.xml
Sitemap: https://7iny.jxustctf.top/sitemap.xml
Sitemap: https://7iny.jxustctf.top/baidusitemap.xml
执行hexo clean,hexo g -d,就同步到了coding上了。
百度HTML验证
在站点配置文件中,添加这样一个配置项:1
baidu_site_verification: 刚刚复制的一串字符
修改文件,路径D\themes\next\layout\_partials\head.swig
1
2
3{% if theme.baidu_site_verification %}
<meta name="baidu-site-verification" content="HTML验证的一串字符" />
{% endif %}
谷歌SEO
同理,在谷歌收入站点提交即可
禁止爬虫跟踪外链
当你提交了链接,写好了蜘蛛爬取协议之后,搜索引擎的蜘蛛就会来爬取你的文章内容。但是,如果你的文章中有外链,蜘蛛就会通过这个链接到别人的站点去。如果这个站点是友情链接还好,如果是非友链,就回严重影响网站的爬取。
为了避免蜘蛛进入非友情链接,需要为非友链添加上nofollow
属性。推荐使用hexo-autonofollow
插件。
在站点根目录下执行:
1 | npm install hexo-autonofollow --save |
修改站点配置文件,添加如下内容:
1 | nofollow: |
这样,例外的链接就不会被加上nofollow
属性。
- 插件自动添加的属性为
external nofollow noopener noreferrer
。一般来说标准的nofollow
属性只需要external nofollow
即可,noopener noreferrer
估计是新闻上说的钓鱼漏洞的补救方法,不过这条属性会影响站长工具的友链检测。
如果想要去掉noopener noreferrer
,修改/yoursite/node_modules/hexo-autonofollowlib/filter.js
:
1 | rel: 'external nofollow noopener noreferrer' |
去掉其中的noopener noreferrer
,再生成即可。
参考文章
实验室静态介绍页面
平台
使用github,方法与创建个人博客一致。实验室对外交流页面
git的用法
git clone到本机
1 | //注意要换成自己的github仓库地址 |
push到github
打开git客户端并执行以下命令
1 | git add . |
强行更新
git push -u origin +master
绑定域名
直接解析域名的CNAME记录到你的Git二级域名,不要使用方法一中的A记录,因为ip地址可能会一段时间之后会改变,所以建议记录类型选择CNAME进行解析,记录值填的就是username.github.io
gif截图工具
gifcam中文版 : 官网
gif在线压缩:官网
sitemap.xml在线生成
1.打开网站地图制作工具
2.输入url,点击开始
3.下载放在根目录
页面添加密码
HTML顶部或headn之间添加以下代码:
1 | <script type="text/javascript"> |
博客DIY2.0
彩色标签页
在/themes/next/layout/目录下,新增tag-color.swig文件,填入如下内容:
1 | <script type="text/javascript"> |
在同级目录的page.swig
中引入tag-color.swig
:
1 | <div class="tag-cloud"> |
文章底部的标签样式
代码拷入/themes/next/source/css/_custom/custom.styl
即可
1 | /*文章底部标签样式*/ |
归档页美化
- 修改
/themes/next/layout/_macro/post-collapse.swig
后的代码如下
1 | {% macro render(post) %} |
主要修改:一是将post-meta
这个div移到前面header标签下;二是将所有的class属性都加上my-
,例如my-post-meta
,这样改动是为了不影响其它页面引用的样式。
2.在/themes/next/source/css/_custom/custom.styl
新增如下样式:
1 | /* 归档页样式 began */ |
打字特效 (搜索框)
此功能主要通过 JS
监听页面的 input 输入框事件来实现。首先在主题_config.yml
中添加动态配置项
1 | typing_effect: |
在 /themes/next/layout/_custom/header.swig
中引入依赖
1 | {% if theme.typing_effect %} |
其中的 activate-power-mode.min.js
位于/themes/next/source/js/src/
目录,代码如下:
1 | (function webpackUniversalModuleDefinition(root,factory){if(typeof exports==='object'&&typeof module==='object')module.exports=factory();else if(typeof define==='function'&&define.amd)define([],factory);else if(typeof exports==='object')exports["POWERMODE"]=factory();else root["POWERMODE"]=factory()})(this,function(){return(function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={exports:{},id:moduleId,loaded:false};modules[moduleId].call(module.exports,module,module.exports,__webpack_require__);module.loaded=true;return module.exports}__webpack_require__.m=modules;__webpack_require__.c=installedModules;__webpack_require__.p="";return __webpack_require__(0)})([function(module,exports,__webpack_require__){'use strict';var canvas=document.createElement('canvas');canvas.width=window.innerWidth;canvas.height=window.innerHeight;canvas.style.cssText='position:fixed;top:0;left:0;pointer-events:none;z-index:999999';window.addEventListener('resize',function(){canvas.width=window.innerWidth;canvas.height=window.innerHeight});document.body.appendChild(canvas);var context=canvas.getContext('2d');var particles=[];var particlePointer=0;POWERMODE.shake=true;function getRandom(min,max){return Math.random()*(max-min)+min}function getColor(el){if(POWERMODE.colorful){var u=getRandom(0,360);return'hsla('+getRandom(u-10,u+10)+', 100%, '+getRandom(50,80)+'%, '+1+')'}else{return window.getComputedStyle(el).color}}function getCaret(){var el=document.activeElement;var bcr;if(el.tagName==='TEXTAREA'||(el.tagName==='INPUT'&&el.getAttribute('type')==='text')){var offset=__webpack_require__(1)(el,el.selectionStart);bcr=el.getBoundingClientRect();return{x:offset.left+bcr.left,y:offset.top+bcr.top,color:getColor(el)}}var selection=window.getSelection();if(selection.rangeCount){var range=selection.getRangeAt(0);var startNode=range.startContainer;if(startNode.nodeType===document.TEXT_NODE){startNode=startNode.parentNode}bcr=range.getBoundingClientRect();return{x:bcr.left,y:bcr.top,color:getColor(startNode)}}return{x:0,y:0,color:'transparent'}}function createParticle(x,y,color){return{x:x,y:y,alpha:1,color:color,velocity:{x:-1+Math.random()*2,y:-3.5+Math.random()*2}}}function POWERMODE(){{var caret=getCaret();var numParticles=5+Math.round(Math.random()*10);while(numParticles--){particles[particlePointer]=createParticle(caret.x,caret.y,caret.color);particlePointer=(particlePointer+1)%500}}{if(POWERMODE.shake){var intensity=1+2*Math.random();var x=intensity*(Math.random()>0.5?-1:1);var y=intensity*(Math.random()>0.5?-1:1);document.body.style.marginLeft=x+'px';document.body.style.marginTop=y+'px';setTimeout(function(){document.body.style.marginLeft='';document.body.style.marginTop=''},75)}}};POWERMODE.colorful=false;function loop(){requestAnimationFrame(loop);context.clearRect(0,0,canvas.width,canvas.height);for(var i=0;i<particles.length;++i){var particle=particles[i];if(particle.alpha<=0.1)continue;particle.velocity.y+=0.075;particle.x+=particle.velocity.x;particle.y+=particle.velocity.y;particle.alpha*=0.96;context.globalAlpha=particle.alpha;context.fillStyle=particle.color;context.fillRect(Math.round(particle.x-1.5),Math.round(particle.y-1.5),3,3)}}requestAnimationFrame(loop);module.exports=POWERMODE},function(module,exports){(function(){var properties=['direction','boxSizing','width','height','overflowX','overflowY','borderTopWidth','borderRightWidth','borderBottomWidth','borderLeftWidth','borderStyle','paddingTop','paddingRight','paddingBottom','paddingLeft','fontStyle','fontVariant','fontWeight','fontStretch','fontSize','fontSizeAdjust','lineHeight','fontFamily','textAlign','textTransform','textIndent','textDecoration','letterSpacing','wordSpacing','tabSize','MozTabSize'];var isFirefox=window.mozInnerScreenX!=null;function getCaretCoordinates(element,position,options){var debug=options&&options.debug||false;if(debug){var el=document.querySelector('#input-textarea-caret-position-mirror-div');if(el){el.parentNode.removeChild(el)}}var div=document.createElement('div');div.id='input-textarea-caret-position-mirror-div';document.body.appendChild(div);var style=div.style;var computed=window.getComputedStyle?getComputedStyle(element):element.currentStyle;style.whiteSpace='pre-wrap';if(element.nodeName!=='INPUT')style.wordWrap='break-word';style.position='absolute';if(!debug)style.visibility='hidden';properties.forEach(function(prop){style[prop]=computed[prop]});if(isFirefox){if(element.scrollHeight>parseInt(computed.height))style.overflowY='scroll'}else{style.overflow='hidden'}div.textContent=element.value.substring(0,position);if(element.nodeName==='INPUT')div.textContent=div.textContent.replace(/\s/g,"\u00a0");var span=document.createElement('span');span.textContent=element.value.substring(position)||'.';div.appendChild(span);var coordinates={top:span.offsetTop+parseInt(computed['borderTopWidth']),left:span.offsetLeft+parseInt(computed['borderLeftWidth'])};if(debug){span.style.backgroundColor='#aaa'}else{document.body.removeChild(div)}return coordinates}if(typeof module!="undefined"&&typeof module.exports!="undefined"){module.exports=getCaretCoordinates}else{window.getCaretCoordinates=getCaretCoordinates}}())}])}); |
canvas粒子时钟
在/themes/next/layout/_custom/
目录下,新建clock.swig
文件,内容如下:
1 | <div style=""> |
在/themes/next/layout/_macro/sidebar.swig
中引入:
1 | {% include '../_custom/clock.swig' %} |
网站 logo 炫彩效果
在 /themes/next/source/css/_custom/custom.styl 中添加以下 css ,如果之前已经设置了,根据情况进行替换:
1 | .site-title{ |
鼠标样式
添加CSS样式代码:
文件位置:/themes/next/source/css/_custom/custom.styl
1 | /* 鼠标样式 */ |
用到的两个文件:default.cur
、pointer.cur
位于 images 目录下,因为是 .cur 这种静态光标文件,编辑器打开是一堆 ASCII 码,这里就不贴了,直接附上链接,当然,你也可以在浏览器里获取。
飘落特效
将文件保存在\themes\next\source\js\src\
下命名为sakura.js
;
然后在\themes\next\layout\_layout.swig
文件里引用即可:
1 | <!-- 花飘落特效 --> |
中文链接转拼音
hexo-permalink-pinyin 插件
安装
1 | npm i hexo-permalink-pinyin --save |
启用
在站点配置文件中新增以下配置:1
2
3permalink_pinyin:
enable: true
separator: '-' # default: '-'
enable:是否启用插件
separator:指定分隔符,默认为’-‘’
Hexo-abbrlink
生成唯一文章链接
中文转拼音 这样方案也存在一定的缺陷,比如修改了文章标题,重新hexo
三连后,URL就变了,以前的文章地址变成了404
。而且这样生成的URL层级也很深,不利于SEO
。
Hexo-abbrlink
项目地址
安装
1 | npm install hexo-abbrlink --save |
执行此命令可能会不成功,提示你缺少相应的依赖,比如babel-eslint、mini-css-extract-plugin、webpack-cli…
使用npm命令安装即可,比如npm install eslint@4.x babel-eslint@8 --save-dev
配置
修改根目录站点配置文件config.yml
,改为:
1 | abbrlink: |
注意一定要注释原有的permalink
官方样例
1 | crc16 & hex |
生成完后,原md
文件的Front-matter
内会增加abbrlink
字段,值为生成的ID 。这个字段确保了在我们修改了Front-matter
内的博客标题title或创建日期date字段之后而不会改变链接地址。
h1-h6
前添加表情
在\themes\next\source\css\_custom\custom.styl
中添加一下代码
1 | /* 一到六级标题设置 */ |
可复制表情:网站
自定义友链页面
在博客根目录 /source 下手动创建 links 文件夹和里边的 index.md
文件
1 | --- |
配置 menu
主题配置文件中menu
下添加:
1 | links: /links/ || link |
在 /themes/next/languages/zh-Hans.yml
文件中 menu
下增加中文描述
1 | links: 友链 |
新增 links.swig 页
在 /themes/next/layout/
新建 links.swig
,内容如下:
1 | <!-- 所在目录:~/themes/next/layout/ --> |
修改 page.swig
修改 /themes/next/layout/page.swig
文件,在开头的 block title
内部
1 | #}{{ __('title.tag') + page_title_suffix }}{#下方添加 |
1 | <!-- 友情链接--> |
引入 links.swig
接着在 /themes/next/layout/page.swig
中 PAGE BODY
内部,引入刚才新建的 page.swig
:
1 | <!-- 友情链接--> |
配置友链
接下来,在 /themes/next/_config.yml
文件中配置友链,末尾处新增 mylinks
,如下:
1 | # 友链 |
结尾
此处我将主题修改为了scheme: Pisces
参考文章
1.北宸的博客
2.添加友链页面
3.飘落特效
博客DIY3.0
归档页面加入 12 生肖
步骤
1)下载字体:chinese-zodiac.zip (23.2KB),下载后将解压的三个字体文件全部放在 ~/blog/source/fonts/
下(若无 fonts
文件夹请自建)。
2)新建文件:保存路径参考下文注释,文件名为chinese-zodiac.swig
。
1 | <!-- 文件位置:~/blog/themes/next/layout/_partials/chinese-zodiac.swig --> |
3)修改文件:编辑archive.swig
文件,文件位置参考下面注释。删除(-)一行,增加(+)几行(复制粘贴后删除每行前面的 +
号)。
1 | <!-- 文件位置:~/blog/themes/next/layout/archive.swig --> |
4)添加样式:将下面的 CSS
代码加入到 custom.styl
。
1 | /* 文件位置:~/blog/themes/next/source/css/_custom/custom.styl */ |
参考文章
具体细节或者其他报错,请参考:博客
侧边添加运行时间
在原来时间下面添加
1 | {# blogtime #} |