先日Hexoを使って、Github pagesでブログを公開しました。
公開まで簡単に出来る!とよく紹介されているのですが、なんだかんだで引っかかったところが多々あったのでまとめてみました。
Hexo設定関係のつまづき
configが複数あるんだけども
Hexoではブログ本体に関する設定_config.yml
と、テーマに関する_config.yml
が存在します。
使い分けですが、絶対に必要な設定(デプロイなどの設定)を前者に、
なくても問題ない設定(google_analyticsなど)を後者に記述するようにしています。
RSSの設置
RSSの設置は、hexo-generator-feedというプラグインで対応しました。
sitemap導入時と同じようにnpm installし、必要に応じてconfig.ymlでオプションを変更してください。
デフォルト値では、http://localhost:4000/atom.xmlで生成されます。
SEOに関する設定のつまづき
meta descriptionの設定
デフォルト値をconfig.ymlに記述しておき、記事ページではdescriptionが重複しないよう毎回設定しています。
記事の文字を抜き出して自動で設定することも可能ですが、より効果のある文章にするために意図的に手動にしています。
1
2
3
4
5
6
7// head.ejsに下記を記述
<% if (page.description) { %>
<meta name="description" content="<%= page.description %>">
<% } else if(config.description) { %>
<meta name="description" content="<%= config.description %>">
<% } %>
1 | # 記事.mdの設定 |
sitemapを作る
公式のプラグインが用意されているので、そちらを使用しました。
hexo-generator-sitemap
npm installし、必要に応じて_config.yml
でオプションを変更してください。
デフォルト値では、http://localhost:4000/sitemap.xmlで生成されます。
google-analyticsの設定
トラッキングIDをthemes/themeName/_config.yml
に設定し、ejsで出力するようにしました。
1
2
3
4
5
6
7
8
9
10<% if (theme.google_analytics){ %>
<script async src="https://www.googletagmanager.com/gtag/js?id=<%= theme.google_analytics %>"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '<%= theme.google_analytics %>');
</script>
<% } %>
robots.txtの設置
hexo-generator-robotstxtというプラグインが有名そうだったのですが、1ファイル置けばいいだけなので手動で設置しました。
配置先はproject/source/
です。
中身は下記の通り。1
2
3User-Agent:*
Disallow:
Sitemap:https://makura3.github.io/sitemap.xml
Google Search Consoleのrobots.txt テスターで正しく記述されているか確認しておくと良いです。
ページ作成に関するつまづき
新規でページを増やしたい
Hexoでページを増やす場合は少々面倒です。
1
hexo new page testPage
実行すると/source/testPage/index.md
が作成されます。
index.mdの中身は、
1
2
3---
layout: testPage①
---
とします。
次に、/themes/themeName/layout
の配下にtestPage.ejs②を作成すると、
/testPageでアクセスできるようになります。
作成する際、①と②は同じ名前を指定するようにしてください。
プラグインを入れるともう少し簡単にページが作れるようですが、
更新が止まっている&必須ではなかったので導入は見送りました。
404ページ
404ページは自分で作成する必要があります。$ hexo new page 404
とし、index.mdに
1
2
3---
permalink: /404.html
---
と記載してください。
/404.htmlでアクセスが可能になります。
通常ページと同じく、layoutの設定も可能なのでオリジナルの404ページが作れます。
記事作成に関するつまづき
記事の途中に目次を入れたい
目次生成のヘルパーが公式で用意されていますが、記事の途中に挿入することはできません。
目次の前にまえがきを設置しておきたかったので、hexo-toc
というプラグインを導入しました。
設定方法はgithubをご覧ください。
パーマリンクの設定
SEOの観点から、非常に大切な部分です。
project/_config.yml
に設定を記述します。
散々迷った結果、
1
permalink: :category/:id/
とし、カテゴリー+記事ID(スラッグ)の形としました。
記事投稿後にカテゴリーを変える可能性がある場合は、categoryがはいっているとURLが変わってしまうため記事IDのみでいいのではないでしょうか。
記事ごとに記事IDを設定する場合は、.mdの上部で設定をする必要があります。
1
2
3---
id: idname
---
テーマに関するつまづき
テーマを探す
公式やGithubから好みのテーマを探すことができます。themes/
にテーマフォルダを配置し、project/_config.yml
の中のtheme: themeName
の部分を変更します。
ちなみにこのブログで現在使用しているテーマは自作したものなので、ある程度形になってきたらそのうち配布する予定です。
scssのコンパイル
Hexoには、node-sassがくっついています。hexo-renderer-scss
をnpm installし、_config.yml
に下記を記載しました。1
2
3
4
5
6
7# style settings
node_sass:
debug: false
outputStyle: compressed
precision: 5
sourceComments: false
includePaths: ['./node_modules/normalize-scss/sass/','./node_modules/reset-css/']
個人的にnormalize.cssとreset.cssを追加でimportできるようにしています。(npm install必須)
ページ毎にヘッダーを出しわけたい
公式の変数一覧の中にpage.layout
という変数があるので、ページ毎にejs内で分岐することが可能です。
その他にもcircleCIで自動デプロイまで行なってみたりしているので
そのうち紹介できたらいいなと思ってます。