AMP導入を検討している全てのWEBサイト運営者へ捧げる、10の検討事項とその解決法

[サイバー・バズ](http://qiita.com/organizations/cyberbuzz)の@kashira2339です。
最近巷を賑わせているAMPと、導入にあたって検討されるであろうことがらについて
サイバー・バズでの取り組みにあわせて触れていきたいと思います:)

# 急いでいる人用
## AMPを導入すると...
- [モバイルページの表示が早くなる](#amp%E3%81%A8%E3%81%AF)
- [検索結果にカルーセルUIが表示される](#amp%E3%81%A8%E3%81%AF)
- [Twitter、FacebookなどSNSのシェアボタンが設置できる](#1-twitterfacebook%E3%81%AA%E3%81%A9sns%E3%81%AE%E3%82%B7%E3%82%A7%E3%82%A2%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%8C%E8%A8%AD%E7%BD%AE%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%AE%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%84%E3%81%8B)
- [サイドメニューやアコーディオンUIは拡張コンポーネントで使える](#2-%E3%83%A2%E3%83%90%E3%82%A4%E3%83%AB%E3%83%9A%E3%83%BC%E3%82%B8%E7%89%B9%E6%9C%89%E3%81%AE%E3%82%B5%E3%82%A4%E3%83%89%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%81%AA%E3%81%A9%E3%81%8C%E5%AE%9F%E8%A3%85%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%AE%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%84%E3%81%8B)
- [限られた広告は表示できる](#3-%E5%BA%83%E5%91%8A%E3%81%8C%E8%A1%A8%E7%A4%BA%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%AE%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%84%E3%81%8B)
- [テンプレートエンジンの駆使で仮想的に外部ファイルが読み込める](#4-javascript%E3%82%84css%E3%82%92%E5%A4%96%E9%83%A8%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%9F%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E8%89%AF%E3%81%84%E3%81%AE%E3%81%8B)
- [サードパーティのレコメンドエンジンは海外に強い会社を中心に対応されている](#5-%E3%82%B5%E3%83%BC%E3%83%89%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%81%AE%E3%83%AC%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%89%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3%E3%81%8C%E5%88%A9%E7%94%A8%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%AE%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%84%E3%81%8B)
- [現状、記事ページのみ対応可能](#6-%E3%81%A9%E3%82%93%E3%81%AA%E3%83%9A%E3%83%BC%E3%82%B8%E3%82%92amp%E5%AF%BE%E5%BF%9C%E3%81%95%E3%81%9B%E3%82%8B%E3%81%B9%E3%81%8D%E3%81%AA%E3%81%AE%E3%81%8B)
- [SEOに直接影響はない](#7-seo%E3%81%AE%E8%A6%B3%E7%82%B9%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88%E3%81%AF%E3%81%82%E3%82%8B%E3%81%AE%E3%81%8B)
- [GoogleAnalyticsが使える](#8-%E8%A7%A3%E6%9E%90%E7%B3%BB%E3%83%84%E3%83%BC%E3%83%ABgoogle-analytics%E3%81%AA%E3%81%A9%E3%81%8C%E5%88%A9%E7%94%A8%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%8F%E3%81%AA%E3%82%8B%E3%81%AE%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%84%E3%81%8B)
- [SNSの投稿やyoutubeも埋め込める](#9-sns%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84%E3%82%84youtube%E3%81%AA%E3%81%A9%E3%81%AE%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%AE%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%84%E3%81%8B)
- [10人日程度の工数がかかる](#10-%E3%82%84%E3%81%AF%E3%82%8A%E5%B7%A5%E6%95%B0%E3%81%8C%E8%86%A8%E3%82%8C%E3%81%82%E3%81%8C%E3%81%A3%E3%81%A6%E3%81%97%E3%81%BE%E3%81%86%E3%81%AE%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%84%E3%81%8B)

[時間があるならば、やらないよりはやってみても良さそうだ。](#%E3%81%BE%E3%81%A8%E3%82%81)

# AMPとは
AMPとは、 **Accelerated Mobile Pages** の略称です。
正確には、GoogleとTwitterが協同で策定したプロジェクト名がAMPであり、
オープンソースでAMP HTMLというフレームワークが公開されています。

[AMP HTML(GitHub)](https://github.com/ampproject/amphtml)

その名の通り、モバイル端末でのWEBページの表示の高速化を目的とした技術です。
Googleのモバイル端末での検索結果に表示されたAMPのリンクをクリックすると、
驚くべき速さでページが表示されます。

みなさんも、Googleの検索結果に表示された「トップニュース」のカルーセルに見覚えがあるのではないでしょうか。

![dm_amp.gif](https://media.giphy.com/media/3o7TKTz1iaojpjzHna/giphy.gif)

サイバー・バズで運営している[Doctors Me](https://doctors-me.com)でも
記事ページにAMPを導入しているため、検索キーワード次第ではこのように表示されます。

しかし、AMPで策定された仕様に則ってページを構築するにはいくつもの制約・規約に従う必要があり、
その手間や技術的課題からAMPの導入を迷っているサイト運営者も非常に多いのではないでしょうか。
特に、AMPページでは普段使っているJavaScriptが利用できないことから
導入を見送ってしまっているケースも多いのではないかと思います。
この記事では、私たちが実際に検討した項目とその解決方法について触れていきたいと思います。


# 検討事項とその解決
## 1. Twitter、FacebookなどSNSのシェアボタンが設置できないのではないか
こちらは、 **問題なく設置できます。**

```html
<amp-social-share type="twitter"
    width="60"
    height="44"> </amp-social-share>
<amp-social-share type="facebook"
    width="60"
    height="44"
    data-attribution=254325784911610></amp-social-share>
```

`<amp-social-share>` というタグがあり、typeには標準でいくつかのSNSが指定できるようになっています。
Doctors Meでもシェアボタンを４パターン用意しています。
LINEとはてなブックマークは外部リンクとして立ち上がるため、もとより問題なく動作します。

<img width="344" alt="スクリーンショット 0028-08-12 午後1.09.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/36105/61eb93dd-ebdc-7dba-6667-046db1e62efe.png">

参考: https://ampbyexample.com/components/amp-social-share/


## 2. モバイルページ特有のサイドメニューなどが実装できないのではないか
こちらも用意されているコンポーネントの利用で**実装可能です。**
JavaScriptのライブラリを使う程度の感覚で実装できるので、
特に難しいことはありません。
実装のためには`amp-sidebar`というタグを使います。

```html
<amp-sidebar id='sidebar'
    layout="nodisplay"
    side="right">
```
幅などはCSSで、向きはsideプロパティで決めることができます。

参考: https://ampbyexample.com/components/amp-sidebar/


## 3. 広告が表示できないのではないか
**限られた広告のみですが、表示可能です。**

AMP HTMLには、アドネットワーク用のタグも用意されています。
[amp-ad(GitHub)](https://github.com/ampproject/amphtml/blob/master/builtins/amp-ad.md)

まだ対応しているアドは多くなく、WEBサイトによっては現在導入している
全ての広告をAMPでも使うことは難しいかもしれません。

Google傘下であったり、海外に強い企業は既にamp-adに対応しているケースはあります。
上のリンクや、[AMP HTMLの公式ページ](https://www.ampproject.org/docs/reference/amp-ad.html#supported-ad-networks)から使いたい広告が対応しているか確認してみましょう。

[2016/08/16 追記 (SPthx:@banakemiさん)]
[GitHubでも対応広告一覧が確認できます。](https://github.com/ampproject/amphtml/tree/master/ads)


参考: https://www.ampproject.org/docs/reference/amp-ad.html


## 4. JavaScriptやCSSを外部ファイルから読み込みたい場合はどうすれば良いのか
AMP HTMLではCSSやJavaScriptを外部ファイルとして読み込むことができません。
それを制約として高速化を図っている以上は、仕方のないことです。

そこで、[GitHubに挙げられている公式の例](https://github.com/ampproject/amp-by-example)では以下の方法を採用しているようです。

```html
<!doctype html>
<html ⚡>
  <head>
    <meta charset="utf-8">
    <style amp-custom>
      {{> css/material.css}}
      {{> css/styles.css}}
      {{{styles}}}
      html, body {
         margin: 0;
         height: 100%;
         width: 100%;
      }
      ...
```

このように、テンプレートエンジンを利用して
`<style amp-custom>`タグの中に外部ファイル化されたCSS挿入しています。
サンプルは[mustache](https://mustache.github.io/)を使っているようですが、
Doctors Meでは[Thymeleaf](http://www.thymeleaf.org/)を使っています。

こうすることで、**cssを従来通り外部ファイルとして管理**しつつも、
レンダリングされる際には**validなAMPページとして出力**することができます。

## 5. サードパーティのレコメンドエンジンが利用できないのではないか
AMP導入を検討しているWEBサイトに、他社様のレコメンドエンジンを利用している場合も少なくないでしょう。
ですが、AMPに対応したレコメンドエンジンは現在も続々と増えています。

- popIn Discovery
- TAXEL byGMO
- logly lift
- Outbrain
- Taboola

どちらかといえば海外に強いプレイヤーが多いようなので、
どうしても使わなければいけないレコメンドエンジンがAMP対応しているかどうかは、要チェックです。

## 6. どんなページをAMP対応させるべきなのか。
AMPは**ニュース、コラムなどの記事ページのみに**導入することができます。
具体的には、下の3つのタイプのschema.orgとなります。
[schema.org/Article](http://schema.org/Article)
[schema.org/NewsArticle](http://schema.org/NewsArticle)
[schema.org/BlogPosting](http://schema.org/BlogPosting)

Doctors Meでも、AMP対応の記事ページにて
JSON-LDフォーマットで以下のような記述をしています。

```json
  {
    "@context": "http://schema.org",
    "@type": "NewsArticle",
    ....
```

このように記述されており、かつAMPの制約を守られて作られているページが
[冒頭](#amp%E3%81%A8%E3%81%AF)のように検索結果に表示されます。

ただし、**記事ページではないにもかかわらず**上記のような記述をすると、
検索結果には表示されなくなってしまうようです。

## 7. SEOの観点におけるメリットはあるのか
AMP導入を検討する際、SEOにおけるメリットを考慮して導入したいというケースもあるのではないかと思います。

**現状、AMPを導入したからといって検索順位をあげるということはないようです。**

ただ、AMP HTMLを導入すると

- ページ表示速度の向上が期待出来る
- 検索結果に「トップニュース」として、カルーセルUIで表示される可能性がある

といったメリットがあり、**間接的に自然検索からの流入を生む**可能性はあります。

[Google Search Console](https://www.google.com/webmasters/tools/home?hl=ja)ではAMPのサポート用の機能がいくつか用意されています。
<img width="538" alt="スクリーンショット 0028-08-12 午後1.51.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/36105/d62eb547-bd2a-39a4-de1a-80a40af655d5.png">




## 8. 解析系ツール（Google Analyticsなど）が利用できなくなるのではないか
**AMPはGoogleAnalyticsに対応しています。**
[amp-analytics](https://www.ampproject.org/ja/docs/reference/extended/amp-analytics.html)
[amp-analytics(GitHub)](https://github.com/ampproject/amphtml/blob/master/examples/analytics.amp.html)

たとえば、ページビューをトラッキングするだけであれば以下の記述だけで実装できます。

```html
  <amp-analytics type="googleanalytics">
    <script type="application/json">
      {
        "vars": {
          "account": "XX-xxxxxxxx-x"
        },
        "triggers": {
          "trackPageview": {
            "on": "visible",
            "request": "pageview"
          }
        }
      }
    </script>
  </amp-analytics>
```

リンク先を見ればわかる通り、ページビューだけでなく
クリックイベント、スクロールイベント、経過時間でのトラッキングも可能です。
これらのルールを理解すれば基本的なイベントはおおよそ実装できるでしょう。



## 9. SNSのコンテンツやYouTubeなどの埋め込みができないのではないか

AMPでは、特定のSNSなどの**外部サービスの埋め込み専用のコンポーネントが用意されています。**
例えば、youtubeでは以下のようになります。

```html
<amp-youtube
    data-videoid="mGENRKrdoGY"
    layout="responsive"
    width="480" height="270">
</amp-youtube>
```

また、Facebookやインスタグラム、Twitterなどの埋め込み専用のタグが用意されています。

```html
<amp-facebook width=486 height=657
    layout="responsive"
    data-href="https://www.facebook.com/zuck/posts/10102593740125791">
</amp-facebook>
```

昨今、ブログなどに自身のTwitterなどのSNSでのツイートを引用し埋め込むケースなどもあるので、
記事ページにおいては重要なタグとなるでしょう。

参考: https://www.ampproject.org/docs/guides/third_party_components.html#include-a-youtube-video



## 10. やはり、工数が膨れあがってしまうのではないか
Doctors Meでは、**実装にかかった工数は10人日程度**でした。

AMP HTML対応のためには、もちろん多少の工数は覚悟する必要があるでしょう。
なぜなら、画像サイズを適切に指定したり、現在のJavaScriptの動作に相当する挙動を実装する必要があるからです。

ただ、実際にどれくらいの工数がかかるかは現状のWEBサイトの仕組みにもよります。
Doctors Meではチームメンバーの人数の増減もなく、ざっくりとした所感ですが
**思ったほどの工数はかからなかったな**、と思っています。



# まとめ

**AMPには思った以上に、実際のプロダクトでの利用に耐えうるレベルで
モバイルページに必要なコンポーネントが揃っていました。**
そのため、記事ページを有するWEBサイトにおいては
「◯◯ができないからAMPの導入はやめよう」という決断には
ならなくなってきたのかなと感じています。

ですが、現時点では数人日の工数をかけても
**WEBサイトへの集客に重要なSEOに直接的な利点が無いのも事実です。**
もちろん、今後はAMPを導入していることがGoogleでの検索結果の
順位付けの一要素となっている可能性もあるかもしれません。

ですが、しばらくはSEOとしての効果への期待よりは、
モバイルページ高速化というAMP本来の目的や検索結果へのカルーセルUI表示、
今後を見据えた技術的チャレンジのような意味合いが強くなるかと感じます。

**AMPは、現状のサービス方針に合わせて導入を考える価値はあるが、
直接的メリットはまだ少ないので余裕のあるときの追加の一手とする**

のが良さそうです。


# おわりに

[サイバー・バズでは一緒にサービスを創れるエンジニアを募集しています :)]
(https://www.wantedly.com/projects/57067?list=5)