この記事を書いてる人: 
tea

AMP(Accelerated Mobile Pages) HTMLとは、モバイル端末で高速に表示するためのHTMLファイルです。

仕様で定められた軽量なウェブページ(=AMP HTML)を用意しておくと、専用のサーバーからキャッシュして配信してくれます。

ご存知のように、通常のウェブページでは、配信元のWebサーバーへアクセスするのですが、AMPの場合は予めキャッシュされたページを配信してくれます。だから表示が短時間で済むわけですね。

ということで、今回はAMP HTMLの導入方法を分かりやすく解説してみたいと思います。

 AMP HTMLのサンプル

当サイトでは、以下のようにAMP HTMLを用意しています。一つの実例として参考にしていただけば幸いです。当ブログではHexoからAMP HTMLを自動生成しています。

Ads

雷画像

photo by Mr. JosephW - DSC03309 on flickr

目次

AMP HTMLの導入方法

AMP HTMLを導入するにはCreate Your AMP HTML Pageに従ってAMP HTMLを記述していきます。通常のHTMLとの主な違いは以下の通りです。

  1. 通常のHTMLとAMP HTMLに互いのパスを追記する
  2. AMP HTMLのheadタグにお決まりのタグを追加
  3. カスタムエレメンツに置き換える

それでは順番に見ていきましょう。

1.通常のHTMLとAMP HTMLに互いのパスを追記する

AMPを導入する際には、1つのページにつき、通常のHTMLとAMP HTMLをそれぞれ作成します。まずは通常ページ(例:./index.html)とAMP版ページ(例:./amp/index.html)を用意してみましょう。

次に、通常のHTMLのheadタグにAMP HTMLの場所を示すパスを追記します。更にAMP HTMLには通常のHTMLのパスを追記していきます。

パスの記述例としては以下のようになります。

通常のHTML

./index.html
1
2
3
4
5
6
7
<!DOCTYPE html>
<html>
<head>
<!--AMPのパスを以下のように追記する-->
<link rel="amphtml" href="./amp/index.html">
</head>
...

AMP版 HTML

./amp/index.html
1
2
3
4
5
6
7
<!doctype html>
<html ⚡>
<head>
<!--通常ページのパスを以下のように追記する-->
<link rel="canonical" href="../index.html" >
</head>
...

通常のHTMLに対して行う変更作業は、以上で完了です。AMP HTMLについては引き続き2をご覧ください。

2.AMP HTMLのheadタグにお決まりのタグを追加

headタグ内には以下のコードのようにgoogle AMPで定められたmetaタグやjsを記述する決まりとなっています。まずは大まかに見ていきましょう。

./amp/index.html
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
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
<!doctype html>
<html ⚡>
<head>
<meta charset="utf-8">
<title>Hello, AMPs</title>
<!--(必須)通常のhtmlファイルの場所を示すパスを指定する-->
<link rel="canonical" href="../index.html" />
<!--(必須)viewportの指定-->
<meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1">
<!--(必須。値は記事に応じて変化)構造化データ。検索結果として表示される情報をJSON形式で定義する-->
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "BlogPosting",
"headline": "(記事のタイトル)",
"description": "(記事の説明)",
"mainEntityOfPage":{
"@type":"WebPage",
"@id":"(記事のURL)"
},
"datePublished": "(投稿日時)",
"dateModified": "(変更日時)",
"image": {
"@type": "ImageObject",
"url": "(アイキャッチとなる画像のURL)",
"width" : "(アイキャッチとなる画像の幅。696px以上が必須)",
"height" : "(アイキャッチとなる画像の高さ)"
},
"author": {
"@type": "Person",
"name": "(著者名)"
},
"publisher": {
"@type": "Organization",
"name": "(サイト名)",
"logo": {
"@type": "ImageObject",
"url": "(サイトロゴのURL)",
"width": "(サイトロゴの幅。600px以内が必須)",
"height": "(サイトロゴの高さ。60px以内が必須)"
}
}
}
</script>
<!--(必須)AMPデフォルトのスタイル指定-->
<style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>
<!--(任意)googleアナリティクスのjavascript。下記のamp-analytics-0.1.js、v0.jsの順番で読み込む-->
<script async custom-element="amp-analytics" src="https://cdn.ampproject.org/v0/amp-analytics-0.1.js"></script>
<!--(必須)AMP ProjectからCDN配信されるJavaScriptランタイム-->
<!--尚、AMPでは外部jsの読み込みは禁止されている-->
<script async src="https://cdn.ampproject.org/v0.js"></script>
<!--(任意)オリジナルのcssをここで指定。AMPではCSSの外部読み込みは禁止されているので直接ここへスタイルを記述していく-->
<style amp-custom>
.example{font-size: 100%;}
</style>
</head>
<body>
<!--(任意)google analyticsのトラッキングコード-->
<amp-analytics type="googleanalytics" id="google-analytics">
<script type="application/json">
{
"vars": {
"account": "UA-123456789"
},
"triggers": {
"trackPageview": {
"on": "visible",
"request": "pageview"
}
}
}
</script>
</amp-analytics>
<!--(任意)以下、コンテンツの例-->
<h1>Welcome to the AMP page</h1>
<!--imgタグはカスタムエレメンツamp-imgで記述する。詳しくは後述-->
<amp-img src="./sample.jpg" width="200" height="100"></amp-img>
</body>
...

それでは各コードについて詳しく見ていきたいと思います。

 外部jsやCSSの読み込みは不可

AMPでは外部のjavascriptやcssファイルの読み込みが禁止されています。cssはheadタグの<style amp-custom></style>内で直接記述が可能ですが、javascriptに関しては記述できません。

構造化データについて

上記のHTMLヘッダに含まれる構造化データ(schema.org)とは、AMPが検索結果として表示される情報の塊です。構造化データは記述のルールが幾つかあります。海外SEO情報ブログさんが非常に詳しい内容をまとめていらっしゃいますので、参照してください。

 2016年2月追記:構造化データが必須では無くなった

AMP HTMLの構造化データは必須条件から外れ、任意に変更されました。

ただし、検索結果のトップニュース枠に表示されるようなAMPカルーセル(後述)には、これまで通り構造化データが必要です。

構造化データは、いくつかのタイプがあります。AMPがサポートしている構造タイプは全部で3種類です。

前述したHTMLの記述例では、ブログの記事を意味するBlogPostingを指定してみました。

構造化データについて
Googleモバイル検索のAMPカルーセルに掲載させるために必要な構造化データ/schema.org

AMP向け構造化データの仕様
Top Stories with AMP | Structured Data | Google Developers

schema.org/BlogPostingの仕様
schema.org/BlogPosting | schema.org

 AMPカルーセルで定めれた画像サイズの制約

googleの検索結果として表示されるAMP HTMLページをAMPカルーセルと呼びます。AMPカルーセルで定められているschema.orgの仕様については、Google AMP Projectの「Publishing AMPs for the Top Stories carousel」をご覧ください。決まりごとは沢山ありますが、特に注意すべき点はロゴ画像やアイキャッチのサイズです。以下のように画像の幅と高さに制約があります。

  • Markup specification

    Articleの項目では、画像は幅696px以上と定められている

  • Logo Guidelines

    ロゴ画像のガイドラインでは、ロゴ画像は幅600px以下、高さ60px以下と定められている

3.カスタムエレメンツに置き換える

bodyタグの内容については、一部、AMPで定められたカスタムエレメンツというAMP独自のタグに置き換える必要があります。

HTMLのタグ AMP HTMLで使用するタグ
img amp-img
video amp-video
audio amp-audio
iframe amp-iframe

例えばimgタグは以下のような記述となります。

通常のHTML

./index.html
1
<img src="./sample.jpg" width="200" height="100" />

AMP HTMLでは以下のようになります。

./amp/index.html
1
<amp-img src="./sample.jpg" width="200" height="100"></amp-img>

 入力必須の属性があることに注意

amp-imgではsrc、width、heightが必須となります。

 カスタムエレメンツに置き換わっているもの

その他カスタムエレメンツに置き換わっているものはGithubのampprojectにサンプルがありますので以下をご覧ください。

一例を挙げますと、youtubeやvimeoなどはカスタムエレメンツamp-youtubeamp-vimeoを使用する決まりになっています。サンプルコードのyoutube.amp.htmlvimeo.amp.htmlをご覧ください。これらのカスタムエレメンツもやはりwidthやheight属性が必須となっています。

AMP HTMLの記述を確認する方法

AMPの記述が完了したら、最後にAMP記述をチェックしていきます。手順は簡単にまとめると、以下3つの流れで行います。

  1. Chrome Developer ToolsでAMP HTMLの検証
  2. 構造化データの検証
  3. Google Search Consoleでクロールされたか確認

詳しくは下記記事をご覧ください。

当ブログ
Google AMP HTMLが正しく記述されたかチェックする方法

感想。AMPの導入でつまづいた所

画像や動画などを載せている記事では、AMP導入のハードルになるのではないかと思われます。なぜかというと、AMPの場合はwidth属性やheight属性の指定は記述必須となっているからです。特に画像をAPIやプラグイン経由で挿入している記事では、プラグインの見直しが必要になるケースもあるでしょう。

最後に

という事で、今回はAMP HTMLの仕様や導入方法について簡単にまとめてみました。もし更に興味のある方がいらっしゃいましたらGithubで更に仕様を確認してみてください。それでは!

github/amphtml
AMP Project