hexo定制&優化

原文發表在我的個人博客。

前言

折騰hexo有幾天時間了,配合NexT主題,大愛!雖然我寫博客主要是用來記錄自己的一些知識積累,并不強求有多少人來看,hexo本身已經很優秀了,但有些地方對于強迫癥來說還是忍不住想要定制和優化,這樣才能讓自己更爽~~而且折騰的過程中,也可以學到不少新的知識。

靜態資源優化

主要是壓縮html,css,js等等靜態資源,可以適當減少請求的數據量,主要用到gulp和一些相關的插件來實現,直接列出我的dependencies.

"dependencies": {
  "gulp": "^3.9.1",
  "gulp-htmlclean": "^2.7.6",
  "gulp-htmlmin": "^1.3.0",
  "gulp-imagemin": "^2.4.0",
  "gulp-minify-css": "^1.2.4",
  "gulp-uglify": "^1.5.3",
  "hexo": "^3.2.0",
  "hexo-deployer-git": "^0.1.0",
  "hexo-generator-archive": "^0.1.4",
  "hexo-generator-category": "^0.1.3",
  "hexo-generator-index": "^0.2.0",
  "hexo-generator-tag": "^0.2.0",
  "hexo-generator-sitemap": "^1.1.2",
  "hexo-generator-baidu-sitemap": "^0.1.2",
  "hexo-renderer-ejs": "^0.2.0",
  "hexo-renderer-marked": "^0.2.10",
  "hexo-renderer-stylus": "^0.3.1",
  "hexo-server": "^0.2.0"
}

其中gulp相關的就是用來壓縮靜態資源用的,接著還要安裝gulp工具:

$ npm install gulp -g

然后添加gulpfile.js到根目錄。

var gulp = require('gulp');
var minifycss = require('gulp-minify-css');
var uglify = require('gulp-uglify');
var htmlmin = require('gulp-htmlmin');
var htmlclean = require('gulp-htmlclean');
// 壓縮css文件
gulp.task('minify-css', function() {
  return gulp.src('./public/**/*.css')
  .pipe(minifycss())
  .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')
  .pipe(uglify())
  .pipe(gulp.dest('./public'));
});
// 默認任務
gulp.task('default', [
  'minify-html','minify-css','minify-js'
]);

以后generate的時候跟上gulp命令即可壓縮靜態資源。

$ hexo g
$ gulp
$ hexo d

生成sitemap文件

生成sitemap文件然后提交給搜索引擎,對于SEO很有幫助,hexo有相關的sitemap插件。

"hexo-generator-sitemap": "^1.1.2",
"hexo-generator-baidu-sitemap": "^0.1.2",

安裝這倆插件后,以后每次hexo g都會生成sitemap.xml和baidusitemap.xml文件并自動幫你放到public目錄。很省心~

修改permalink

hexo默認的permalink配置是:

permalink: :year/:month/:day/:title/

這樣生成的訪問鏈接都是類似http://yoursite.com/2016/05/06/your_title/這樣的,有點動態網站的風格,不過這樣可能對于搜索引擎不是太友好,我們可以把permalink修改成.html結尾的:

permalink: :year/:month/:day/:title.html

還有一點需要注意的是,title最好是英文的,這樣permalink也是不帶中文的,但是markdown文件中的title你還是可以按自己的文章標題寫成中文的。

其他小的修改點

這些都是看個人愛好了,hexo還是很方便自己自定義的。

站點頭像改成圓形

themes/next/source/css/_common/components/sidebar/sidebar-author.styl.site-author-image定義中增加:

border-radius: 50%;
-webkit-border-radius: 50%;
-moz-border-radius: 50%;

去掉站點鏈接前面的小圓點

個人不太喜歡站點鏈接前面的小圓點,去掉themes/next/source/css/_common/components/sidebar/sidebar-author-links.styla::before的定義即可。

小技巧

有其他想修改的小地方,都可以打開瀏覽器的開發者工具,找到對應地方的css定義,然后在sublime或者atom中Search In Directory找到對應css的源碼,修改即可。

解決github pages屏蔽百度爬蟲的問題

嗯,是的,github pages屏蔽了百度爬蟲(屏蔽了百度爬蟲的UAMozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html))。這樣你的hexo博客很難被百度收錄,從百度站長工具抓取診斷中就可以發現爬取都是403 forbidden。

HTTP/1.0 403 Forbidden
Cache-Control: no-cache
Connection: close
Content-Type: text/html

本來也無所謂,但是從技術的角度來看,解決這種問題肯定很有快感~~
目前主要有兩種解決方案:CDN回源為百度spider指定特殊線路。兩種方案我都試過,最終選擇了后者。

CDN回源

hexo博客都是靜態文件,很適合使用CDN回源,這樣不僅能提高訪問速度還能跳過github對百度爬蟲的屏蔽。
回源的意思是用戶請求hexo之后CDN會抓取hexo內容,這樣其他用戶就不用訪問github pages了而是直接從CDN就近的節點拉取數據,訪問速度更快。但是這里有個問題,比如百度爬蟲所在的區域CDN節點還沒有緩存hexo數據,這樣百度爬蟲會穿透CDN直接請求到github pages,然后后果就是github pages返回403 forbidden。所以CDN回源的方式僅適用于博客訪客量比較大的情況(這樣訪問會在百度爬蟲之前讓CDN緩存hexo數據,當然也只是比較大的概率)。
不過如果無視百度爬蟲,給hexo加上CDN回源也是很不錯的,至少能提高訪問速度。推薦使用又拍云。大概的配置步驟:

配置服務

配置upyun服務
配置upyun服務

添加CNAME解析

CNAME @ kikoroc.b0.aicdn.com

同時去掉到github pages ip的A類解析。

為百度spider指定特殊線路

除了github pages能托管hexo之外,還有其他的選擇,比如gitcafe pages(已經和coding.net合并)。傳送門:gitcafe pages配置,配置還是挺簡單的。而且gitcafe沒有屏蔽百度爬蟲。但是gitcafe pages的服務器目前還不夠github給力(偶爾出現一些無法打開的情況),所以有了新的思路:

hexo deploy同時部署到github和coding.net

# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
  type: git
  #repo: https://github.com/kikoroc/kikoroc.github.io.git
  #branch: master
  repo: git@git.coding.net:/kikoroc/kikoroc
  branch: coding-pages

后面有時間可以寫個腳本直接同時部署github和gitcafe。

正常用戶訪問github pages,百度爬蟲訪問gitcafe

現在的DNS解析服務一般都可以指定特定的線路,比如指定百度爬蟲的線路解析到gitcafe。


dnspod設置

gitcafe pages綁定域名到kikoroc.com。

-EOF-

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容