");background-repeat:no-repeat;-webkit-background-size:30px 24px;-moz-background-size:30px 24px;background-size:30px 24px;background-position:center center;border:none;margin:0;padding:0;width:60px;height:60px;cursor:pointer;-ms-flex-item-align:center;-ms-grid-row-align:center;-webkit-align-self:center;align-self:center;-ms-flex-item-align:center}.tab{position:relative;color:#424242;padding:6px;margin:0 4px;text-decoration:none;text-transform:uppercase;font-weight:400;-webkit-transition:.1s ease color;-webkit-transition:.1s ease color;-moz-transition:.1s ease color;-o-transition:.1s ease color;-ms-transition:.1s ease color;transition:.1s ease color}amp-sidebar{width:200px}amp-sidebar ul{padding:10px 0}amp-sidebar li a{display:block;padding:10px 20px}.title-cover{background-color:#4f7086;color:#fff;padding:30px 15px 20px 15px;text-align:center}.title-cover a{color:#fff}.title-cover a:hover{color:#fff}.meta-content{background-color:#e9e9e9;padding:20px 0}.meta-wrapper{margin:20px 20px;padding:20px 20px;background-color:#fff}#footer .copyright-tool,#footer .homeLink{margin:20px}.copyright-tool{color:#fff;font-size:.5em}.social-share{margin:10px 0 0 0;display:-webkit-box;display:-moz-box;display:-webkit-flex;display:-ms-flexbox;display:box;display:flex;-webkit-box-pack:center;-moz-box-pack:center;-o-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.social-share amp-social-share{margin:5px}#totop{position:fixed;bottom:20px;right:20px;font-size:1.2em;z-index:995;line-height:1.8em}#totop a{background:rgba(152,209,245,.6);text-decoration:none;color:#fff;padding:0;text-align:center;display:block;width:1.2em;height:2.2em;line-height:2em;letter-spacing:0;position:relative;display:inline-block;padding:0 0 0 16px;vertical-align:middle;text-decoration:none;font-size:15px}#totop a:after,#totop a:before{position:absolute;top:0;bottom:0;left:0;margin:auto;content:"";vertical-align:middle}#totop a:before{left:12px;width:8px;height:8px;border-top:2px solid #fff;border-right:2px solid #fff;-webkit-transform:rotate(-45deg);-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-o-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}#totop a:hover{text-decoration:none;background:#4f7086;color:#fff;line-height:2.3em}.site-author-desc{font-size:1.2em;line-height:2em;margin-top:1em}.site-author-info{background-color:#fff;margin:20px}.gravatar-area{-webkit-border-radius:50%;border-radius:50%}.article-categories,.article-categories-list,.article-tag,.article-tag-list{padding:0;margin:0}.article-categories{margin-bottom:1.6em}.article-categories-list li,.article-tag-list li{list-style:none;display:inline-block;padding:0;margin:.2em 0}.article-categories-list li a,.article-tag-list li a{padding:.5em .6em;margin:.4em 0;background-color:#f5f2f0;color:#3a484b}.article-categories-list li a:before,.article-tag-list li a:before{content:"#"}.article-categories-list li a:hover,.article-tag-list li a:hover{color:#fff;background-color:#648aa4}.homeLink,.htmlPageLink{font-weight:700;-moz-transition:.7s;-ms-transition:.7s;-o-transition:.7s;-webkit-transition:.7s;-webkit-transition:.7s;-moz-transition:.7s;-o-transition:.7s;-ms-transition:.7s;transition:.7s;padding:.4em 0}.homeLink a,.htmlPageLink a{color:#fff;display:block;padding:1em;text-align:center}.homeLink:hover,.htmlPageLink:hover{-moz-transition:.3s;-ms-transition:.3s;-o-transition:.3s;-webkit-transition:.3s;-webkit-transition:.3s;-moz-transition:.3s;-o-transition:.3s;-ms-transition:.3s;transition:.3s}.homeLink{font-size:120%;background:#7496ad}.homeLink:hover{background:#94afc0}.htmlPageLink{font-size:110%;background:#7496ad}.htmlPageLink:hover{background:#94afc0}.ad-footer,.googleAdPost,amp-instagram,amp-twitter,amp-video,amp-vimeo,amp-youtube{margin:2.8em 0}.sns-link{margin:1em 0}.sns-link a{font-size:2.6em;padding:.4em .1em;margin:0 .1em;color:#d0d0d0}.sns-link a:hover{color:#4f7086}.applink-wrapper .applink-col{width:100%}.applink-wrapper .applink-col a{display:block;width:60%;margin:0 auto}.applink-wrapper,.babylink-box{border:1px solid #f8981d;position:relative}.applink-wrapper .applink,.applink-wrapper .babylink-wrapper,.babylink-box .applink,.babylink-box .babylink-wrapper{margin:1em 1em 1em 1em}.applink-wrapper .app-image,.applink-wrapper .babylink-image,.babylink-box .app-image,.babylink-box .babylink-image{margin:0 5% 0 0;display:inline-block;vertical-align:middle;width:40%}.applink-wrapper .app-title,.applink-wrapper .babylink-info,.babylink-box .app-title,.babylink-box .babylink-info{margin:0;display:inline-block;vertical-align:middle;width:55%}.applink-wrapper .app-info,.applink-wrapper .babylink-description,.babylink-box .app-info,.babylink-box .babylink-description{margin:1em 1.2em .5em 1.2em}.applink-wrapper .babylink-description,.babylink-box .babylink-description{line-height:1.8em}.applink-wrapper .babylink-manufacturer,.babylink-box .babylink-manufacturer{margin:.8em 0;line-height:1.8em}.applink-wrapper .babylink-title,.babylink-box .babylink-title{font-size:1em;margin:.8em 0;line-height:1.8em}.applink-wrapper .babylink-title a,.babylink-box .babylink-title a{display:block;padding:1em 0}.applink-wrapper .aicon,.babylink-box .aicon{position:absolute;display:none}.applink-wrapper .babylink-amazonBtn,.babylink-box .babylink-amazonBtn{margin:1.4em 0 1em 0;height:4em}.applink-wrapper .babylink-amazonBtn a.amb,.babylink-box .babylink-amazonBtn a.amb{-webkit-transition:.1s;-moz-transition:.1s;-o-transition:.1s;-webkit-transition:.1s;-moz-transition:.1s;-o-transition:.1s;-ms-transition:.1s;transition:.1s;font-size:1em;height:3.5em;line-height:3.5em;text-align:center;color:#fff;width:85%;margin:0 auto;padding:0;display:block;background-color:#f8981d;border-top:1px solid #fff;border-bottom:4px solid #c27006;border-radius:4px}.applink-wrapper .babylink-amazonBtn a.amb:hover,.babylink-box .babylink-amazonBtn a.amb:hover{color:#fff;border-top:4px solid #fff;border-bottom:1px solid #c27006}.applink-wrapper .amazon-icon:before,.babylink-box .amazon-icon:before{content:"\f270";font-family:fontawesome;color:#fff}.entry-content p.openMap{text-align:center}.entry-content .attention{border:1px solid #ce8a8a}.entry-content .attention h5.label,.entry-content .attention h6.label{color:#ce8a8a}.entry-content .r-download{border:1px solid #88a3c1}.entry-content .r-download h5.label,.entry-content .r-download h6.label{color:#88a3c1}.entry-content .r-memo{border:1px solid #88b9c1}.entry-content .r-memo h5.label,.entry-content .r-memo h6.label{color:#88b9c1}.entry-content .attention,.entry-content .babylink-box,.entry-content .r-download,.entry-content .r-memo{margin:2.2em 0;padding:0;border-radius:2px}.entry-content .attention h5.label,.entry-content .attention h6.label,.entry-content .babylink-box h5.label,.entry-content .babylink-box h6.label,.entry-content .r-download h5.label,.entry-content .r-download h6.label,.entry-content .r-memo h5.label,.entry-content .r-memo h6.label{background:0 0;background-color:none;border:none;border-bottom:none;border-left:none;border-right:none;border-top:none;margin:1.2em 1.5em;padding:0}.entry-content .attention h6.label,.entry-content .r-download h6.label,.entry-content .r-memo h6.label{font-size:1em}.entry-content .attention p.label,.entry-content .r-download p.label,.entry-content .r-memo p.label{font-size:.85em;margin:1.5em;padding:0}.entry-content .attention .amp-img-wrapper,.entry-content .attention table,.entry-content .r-download .amp-img-wrapper,.entry-content .r-download table,.entry-content .r-memo .amp-img-wrapper,.entry-content .r-memo table{margin:1.8em 1.8em 0 1.8em}.entry-content .attention dl,.entry-content .attention ol,.entry-content .attention ul{margin:1em 1em 1em 2em}.entry-content .r-download dl,.entry-content .r-download ol,.entry-content .r-download ul{margin:1em 1em 1em 2em}.entry-content .r-memo dl,.entry-content .r-memo ol,.entry-content .r-memo ul{margin:1em 1em 1em 2em}.entry-content .attention h5.label:before,.entry-content .attention h6.label:before{content:"\f071"}.entry-content .r-download h5.label:before,.entry-content .r-download h6.label:before{content:"\f019"}.entry-content .r-memo h5.label:before,.entry-content .r-memo h6.label:before{content:"\f0f6"}.entry-content .attention h5.label,.entry-content .attention h6.label,.entry-content .r-download h5.label,.entry-content .r-download h6.label,.entry-content .r-memo h5.label,.entry-content .r-memo h6.label{margin:1.8em 1.8em 0}.entry-content .attention h5.label:before,.entry-content .attention h6.label:before,.entry-content .r-download h5.label:before,.entry-content .r-download h6.label:before,.entry-content .r-memo h5.label:before,.entry-content .r-memo h6.label:before{margin:0 .5em 0 0;font-family:fontawesome}.entry-content .attention ol li,.entry-content .attention ul li{font-size:.85em}.entry-content .r-download ol li,.entry-content .r-download ul li{font-size:.85em}.entry-content .r-memo ol li,.entry-content .r-memo ul li{font-size:.85em}.entry-content .attention ul li:after,.entry-content .r-download ul li:after,.entry-content .r-memo ul li:after{top:.85em}.entry-content .attention p.label,.entry-content .r-download p.label,.entry-content .r-memo p.label{font-size:.85em;margin:1.8em}.amSimple{margin:1.8em 0;padding:1em 1.8em;position:relative;background-color:#f6f6f4}.amSimple p{margin:1em 0}amp-img,img{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-drag:none;-khtml-user-drag:none}.imgCaption{text-align:center}.imgCaption span{font-size:.5em;color:#b6b6b6}.bcg{width:90%;margin:2.8em auto}.bcg-x-and-cell{width:100%;margin:0;position:relative;height:100%}.bcg-x-label{width:94%;margin:5px 0 0 6%;text-align:center}.bcg-y-label{-webkit-writing-mode:vertical-rl;-ms-writing-mode:tb-rl;writing-mode:vertical-rl;text-orientation:sideways-right;width:6%;display:inline-block}.bcg-y-label-inner{position:absolute;top:50%;left:1%;display:inline-block;-webkit-transform:translate(-50%,-50%) rotate(180deg);-moz-transform:translate(-50%,-50%) rotate(180deg);-o-transform:translate(-50%,-50%) rotate(180deg);-ms-transform:translate(-50%,-50%) rotate(180deg);transform:translate(-50%,-50%) rotate(180deg);text-align:center;height:100%}.label-circle{display:inline-block;padding:.2em;border-radius:50%;width:1.6em;height:1.6em;line-height:1.6em;font-size:.8em}.label-week{background-color:#758f94;color:#fff}.label-strong{background-color:#3c4b4e;color:#fff}.label-desc{margin:.8em;display:inline-block}.bcg-table-wrapper{margin:0;padding:0;width:94%;display:inline-block}.bcg-table{border-collapse:collapse}.bcg-table .bcg-td{width:50%;text-align:center;height:100px;border:1px solid #fff;margin:0;padding:0;font-size:1.2em}.bcg-table .def{background-color:#758f94;color:#fff}.bcg-table .em{background-color:#55696e;color:#fff}.bcg-table .strong{background-color:#3c4b4e;color:#fff}@media (min-width:800px){.article-nav,.entry-content,.entry-header,.entry-title{width:780px;margin:0 auto}.nav-container{width:800px;margin:0 auto}.meta-wrapper{width:760px;margin:20px auto}.site-author-info{width:760px;margin:20px auto}#footer .copyright-tool,#footer .homeLink{width:760px;margin:20px auto}}#hexo-amp-id-1{line-height:1.8em;padding:0}
AMP(Accelerated Mobile Pages) HTMLとは、モバイル端末で高速に表示するためのHTMLファイルです。
仕様 で定められた軽量なウェブページ(=AMP HTML)を用意しておくと、専用のサーバーからキャッシュして配信してくれます。
ご存知のように、通常のウェブページでは、配信元のWebサーバーへアクセスするのですが、AMPの場合は予めキャッシュされたページを配信してくれます。だから表示が短時間で済むわけですね。
ということで、今回はAMP HTMLの導入方法を分かりやすく解説してみたいと思います。
AMP HTMLのサンプル当サイトでは、以下のようにAMP HTMLを用意しています。一つの実例として参考にしていただけば幸いです。当ブログではHexo からAMP HTMLを自動生成しています。
photo by Mr. JosephW - DSC03309 on flickr
目次 AMP HTMLの導入方法 AMP HTMLを導入するにはCreate Your AMP HTML Page に従ってAMP HTMLを記述していきます。通常のHTMLとの主な違いは以下の通りです。
通常のHTMLとAMP HTMLに互いのパスを追記する AMP HTMLのheadタグにお決まりのタグを追加 カスタムエレメンツに置き換える それでは順番に見ていきましょう。
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 > <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 > <link rel ="canonical" href ="../index.html" /> <meta name ="viewport" content ="width=device-width,minimum-scale=1,initial-scale=1" > <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 > <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 > <script async custom-element ="amp-analytics" src ="https://cdn.ampproject.org/v0/amp-analytics-0.1.js" > </script > <script async src ="https://cdn.ampproject.org/v0.js" > </script > <style amp-custom > .example {font-size : 100% ;} </style > </head > <body > <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 > <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」をご覧ください。決まりごとは沢山ありますが、特に注意すべき点はロゴ画像やアイキャッチのサイズです。以下のように画像の幅と高さに制約があります。
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-youtube
やamp-vimeo
を使用する決まりになっています。サンプルコードのyoutube.amp.html
やvimeo.amp.html
をご覧ください。これらのカスタムエレメンツもやはりwidthやheight属性が必須 となっています。
AMP HTMLの記述を確認する方法 AMPの記述が完了したら、最後にAMP記述をチェックしていきます。手順は簡単にまとめると、以下3つの流れで行います。
Chrome Developer ToolsでAMP HTMLの検証 構造化データの検証 Google Search Consoleでクロールされたか確認 詳しくは下記記事をご覧ください。
当ブログGoogle AMP HTMLが正しく記述されたかチェックする方法
感想。AMPの導入でつまづいた所 画像や動画などを載せている記事では、AMP導入のハードルになるのではないかと思われます。なぜかというと、AMPの場合はwidth
属性やheight
属性の指定は記述必須 となっているからです。特に画像をAPIやプラグイン経由で挿入している記事では、プラグインの見直しが必要になるケースもあるでしょう。
最後に という事で、今回はAMP HTMLの仕様や導入方法について簡単にまとめてみました。もし更に興味のある方がいらっしゃいましたらGithubで更に仕様を確認してみてください。それでは!
github/amphtmlAMP Project