HexoブログからAMP HTMLを生成してくれるプラグイン「hexo-generator-amp」を作ってみました。今回はそれについて触れたいと思います。
WordpressからHexoにブログを移行して、数ヶ月が経ちました。Hexoはnode.jsの静的ジェネレーターです。静的ジェネレーターは他言語のJekyll、Hugo、Middleman、Octopress、Gatsbyも有名です。Hexoのお陰で快適にブログが書けるようになり、ブログが手軽なものになりました。
目次
何ができるの?
このプラグインは投稿記事(markdownファイル)ごとに、新たなAMP HTMLを自動生成してくれます。
そもそもAMP HTMLとは何か?
AMP(Accelerated Mobile Pages) HTMLとは、モバイル端末で高速に表示するためのページです。
仕様で定められた軽量なウェブページ(=AMP HTML)を用意しておくと、専用のサーバーからキャッシュして配信してくれます。
通常のウェブページでは、配信元のWebサーバーへアクセスするのですが、AMPの場合は予めキャッシュされたページを配信してくれます。これによって表示が短時間で済みます。AMPの詳しい内容は以下をご覧ください。
冒頭でも触れましたが、今回はブログで採用しているHexoでAMP HTMLを生成できるプラグインを作りました。嬉しいことに、Spotifyのエンジニアである、José Manuel Pérezさんのブログにもこのプラグインを使っていただいてます。
その他、以下のサイトでもご紹介いただきました。
Pull Requestやissueも歓迎しておりますので、煮るなり焼くなりご自由にお使いください。
hexo-generator-ampの導入方法
それでは、HexoでAMPページを生成できる「hexo-generator-amp」の導入方法をまとめてみたいと思います。流れは以下のステップで行います。
- headタグにAMP HTMLのパスを指定
- オプションの設定
- ローカルサーバーで確認
- デプロイ
- AMPの記述をチェックする
それでは順番に見ていきましょう。
プラグインのインストール
すでに前述しましたが、他のプラグインと同様にnpmからインストールしてください。
bash1
| $ npm install hexo-generator-amp --save
|
1. headタグにAMP HTMLのパスを指定
次に、headタグを生成するテンプレート(例えば./themes/(your-theme)/layout/head.ejs
)にAMP HTMLのファイルパスを追記していきます。プラグインからAMP HTMLが生成されるパスは./amp/index.html
となっていますので、その絶対パスを追記していきます。
head.ejs1 2 3 4 5
| ... <% if (is_post() && config.generator_amp){ %> <link rel="amphtml" href="<%= config.url %>/<%= page.path %>/amp/index.html"> <% } %> ...
|
例えば、hexoのデフォルトテーマであるhexo-theme-landscapeではthemes/landscape/layout/_partial/head.ejs
に上記の内容を追加します。
2. オプションの設定
hexo-generator-ampを使うにあたり、以下のようなオプションを追加していきます。./_config.yml
を開き、以下のようなオプションを入力してください。
_config.yml1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
generator_amp: templateDir: amp-template assetDistDir: amp-dist logo: path: sample-logo.png width: 600 height: 60 substituteTitleImage: path: sample-substituteTitleImage.png width: 1024 height: 800 warningLog: false
|
3. ローカルサーバーで確認
ローカルサーバーで記事のAMP HTMLが生成されるか確認してください。ブラウザからlocalhost:4000/パーマリンク/amp/
にアクセスするとAMP版HTMLが表示されます。
bash1 2
| $ hexo clean $ hexo server
|
4. AMPの記述をチェック
hexo-generator-ampでは、AMP HTMLが生成された直後に、記述が正しいのかを自動検証することができます。
AMP HTML検証機能
AMP HTMLの記述の妥当性を自動チェックするには./_config.yml
を開き、以下のようにオプションvalidateAMP
を追記します。値はtrue
にしてください。
_config.yml1 2 3 4
| generator_amp: validateAMP: true
|
validateAMP
をtrue
に変更すると自動検証が行われます。また、AMP HTMLの記述に問題があれば以下のようなエラーメッセージが表示されます。
検証エラー例:AMP HTMLにiframeタグが混じっている。その他2頁がエラー ©
表示されたエラーを元に、AMP HTMLを修正していきましょう。
(余談)エラーはブラウザでも確認できる
ブラウザからも同じように、AMP HTMLの記述が正しいか確認することができます。
ブラウザから確認したい場合にはChrome DevToolsを開き、localhost:4000/パーマリンク/amp/#development=1
にアクセスします。
Chromeでも同様のエラーメッセージを確認し、デバッグできる ©
AMP HTMLの検証手段は他にもいくつかありますので、好みの方法を選ぶ事ができます。詳しくは以下をご覧ください。
その他の警告表示
その他、以下の問題に該当する場合には、警告も表示されます。
警告表示がされる場合
hexo-generator-ampでは、以下の場合に警告メッセージが表示されます。
- オプションが正しく設定されていない場合
- imgタグにwidthとheightの指定が無い
- 記事内の1つ目の画像の幅が696px以上ではない
- サイトのロゴ画像の幅が600px以下、且つ高さが60px以下ではない
これらの警告はAMP HTMLの仕様を満たすために用意されています。警告表示を一旦非表示にしたい場合はwarningLog
オプションをfalse
にするか、記事のmarkdownファイルや_config.yml
を修正してください。
修正後、AMP HTMLのエラーが表示されなくなれば、AMP HTMLのデバッグは完了です。
5. デプロイ
いつも通りHexoでデプロイしていきます。
bash1 2 3
| $ hexo clean $ hexo generate $ hexo deploy -g
|
ブログをデプロイした後でAMP HTMLが正常にクロールされているかGoogle Search Consoleで確認をしましょう。
Google search consoleでAMP HTMLのクロール状況が分かる ©
問題がなければAMP HTMLが徐々にインデックスされていきます。
注意点と詳細
前述ではhexo-generator-ampの簡単な導入方法をご説明しました。
続いて注意点と詳細な使い方について解説したいと思います。まずは、hexo-generator-ampを使うにあたり、幾つか注意点がありますので以下をご覧ください。
記事中の画像の扱い
AMP HTMLのheadタグ内には構造化データと呼ばれるものを含める約束になっています。構造化データの詳しい情報については、当ブログの下記記事をご覧ください。
構造化データには、AMPカルーセルという情報に画像のURLや幅、高さを含める事ができるようになっています。プラグインでは投稿記事のmarkdownファイルにimg
があれば、画像を見つけて構造化テータ用の画像として利用します。高さと幅の値(width
とheight
)については、プラグインが自動で取得してくれます。
また投稿記事に1つ以上の画像が存在しない場合にはオプション./_config.yml
で設定したsubstituteTitleImage
の情報が構造化データ用の画像として代わりに使用されます。
詳細なオプション設定
hexo-generator-ampで設定できる詳細なオプションについての説明です。前述の簡単なオプション指定だけでもAMP HTMLが生成可能となっていますが、より詳細にカスタマイズしたい場合には以下を指定して下さい。
_config.yml1 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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
generator_amp:
substituteGoogle_adsense: data_ad_client: ca-pub-123456789876543 data_ad_slot: 0123456789 layout: responsive width: 300 height: 250 templateDir: amp-template assetDistDir: amp-dist logo: path: sample-logo.png width: 600 height: 60 logo_topImage: path: sample/sample-yoursite-logo.png width: 1024 height: 400 substituteTitleImage: path: sample-substituteTitleImage.png width: 1024 height: 800 placeholderImg: path: sample/sample-placeholder.png cssFilePath: sample-amp.css templateFilePath: sample-amp.ejs generateAmpPath: :year/:month/:day/:title/amp/ google_analytics: UA-123456789-1 html_minifier: warningLog: true cache: hexo-generator-amp-cached.json validateAMP: true
authorDetail: authorReading: よみ仮名 avatar: path: sample-avator.png width: 1024 height: 1024 description: 筆者の説明 copyright_message: (例)記事の転載を禁止します
|
詳細なオプションに関しては以上となります。またAMP HTMLでは、画像等に関するいくつかの仕様がありますので、以下に注意してください。
AMPカルーセルで定めれた画像サイズの制約
googleの検索結果として表示されるAMP HTMLページをAMPカルーセルと呼びます。AMPカルーセルの元なるデータはschema.org/BlogPostingで定められている仕様に沿って構造化データを用意することになります。
しかし当プラグインでは、オプションで記述した内容や投稿記事のコンテンツを元に、自動で構造化データが作成されます。ここで注意点があるのですが、画像の扱いについては以下の内容に注意して下さい。
決まりごとは沢山ありますが、特に注意すべき点はロゴ画像やアイキャッチのサイズです。以下のように画像の幅と高さに制約があります。
最後に
という事で、今回はHexoからAMP HTMLを生成するプラグインについてご紹介しました。もし興味のある方がいらっしゃいましたら使ってみてください。それでは!