ラベル Google の投稿を表示しています。 すべての投稿を表示
ラベル Google の投稿を表示しています。 すべての投稿を表示

2016年2月12日金曜日

【Android】AppIndexingを設定してみた

こんにちは。エンジニアのKです。

【Android】AppIndexingを実装してみたの続きです。
前回までで最低限必要な実装は完了しましたが、
ディープリンクのテスト方法や、「Google Play Developer Console」、「Search Console」への登録方法でも
公式ドキュメントを読んだだけではピンと来ない部分があったので、補足できればと思います。

ディープリンクをテストする

実装したディープリンクがAppIndexingとして正常に動作するかテストします。
公式ドキュメント:App Indexing の実装をテストするの前半

方法としては、公式ドキュメントにあるADBでインテントを飛ばすやり方と、アプリがインストールされた端末のブラウザで、android-app://のリンクを踏んでみるやり方の2つがあります。

ADBでインテントを飛ばす

端末をUSBで接続し、コマンドラインから公式ドキュメントにあるドキュメントを実行すると、インテントが飛びます。
ディープリンクが正しく実装できていれば、アプリのコンテンツが立ち上がるはずです。
以下は、Android StudioのTerminalで実行した結果です。


実装が上手く行っていない、飛ばすインテントが誤っていると、「Error: Activity not started, unable to resolve Intent」といったエラーが表示されると思いますので、実装に誤りがないかを確認しましょう。

android-app://のリンクを踏む

webページを自由に変更できる環境があれば、aタグにテストURLを埋め込んでブラウザでアクセスします。
そういった環境がない場合は、公式ドキュメントにあるQRコード経由でアクセスすると便利だと思います。
前回の記事でも書きましたが、テストURLは

android-app://com.recipe-app/http/recipe/pierogi-poutine
android-app://com.recipe-app/recipe-app/recipe/pierogi-poutine

といったものになります。


AppIndexing APIをテストする

AppIndexing APIが正常に動作しているかも確認しておきます。
公式ドキュメント:App Indexing の実装をテストするの後半

これもアプリをインストールした端末をUSBでPCに接続し、ターミナルにコマンドを打ち込みます。
AppIndexing APIが起動する処理を通るようにアプリを操作すると、以下の様なログが出力されるはずです。
title, description, appUri, webUriが正しい値になっていればOKです。
マルチバイト文字を含めるとログ出力が文字化けしてしまいますが、URLエンコード処理は不要です。
試しにこのままリリースしてクロールさせたところ、検索結果に表示されるAppIndexingのリンクは文字化けしていませんでした。



Search Consoleにアプリを登録する

まずはSearch Consoleにアプリとしてプロパティを追加します。
公式ドキュメント:アプリの Search Console

Search Consoleにログインし、公式ドキュメントにあるようにandroid-app://のURLでプロパティを追加します。
すると、以下の画像のように、「Androidアプリ」のプロパティが追加されます。




Search Consoleでクロールテストをする

Search Consoleに登録すると、アプリに対しても「Fetch as Google」を行うことができます。(2016/02時点でアルファ版)
テスト対象のアプリは、基本的にはGoogle Playで配布されている最新版のapkですが、この場でapkファイルをアップロードして試す事もできるようです。
言語を選択するセレクトボックスは「日本語」にした方が良さそうです。「英語」のまま実行したらエラーになってしまいました。

広告SDK等が含まれていると、広告で読み込まれる一部リソースがブロックされ「一部完了」のステータスになりますが、
正常にレンダリングされていれば問題ないと思います。


アプリとWebサイトを紐付ける

ここまで確認できたら、あとはアプリとwebサイトを紐付けて、GoogleにAppIndexingしてもらいます。
公式ドキュメント:アプリをサイトに関連付ける
※前提として、ディープリンクに対応したアプリをGoogle Playで公開している必要があります。

紐付け方はGoogle Playから行う方法と、Search Consoleから行う方法があります。
今回はGoogle PlayのサービスとAPIからwebサイトのURLを入力する方法で行ってみました。
すると、Search Console側に「{googleアカウント} が Android アプリ {パッケージID} を {webサイトURL} と関連付ける権限をリクエストしています」といったタイトルのメッセージが届きますので、承認しましょう。

これで、必要な作業は全て完了となります。
ここから徐々にgooglebotのによるアプリクロールが開始され、3-5日程度でSearch Console上でクロールステータスを確認することができると思います。
以下が実際のクロールステータスの画面ですが、クロール開始直後はエラーが大量に発生してしまいました。
ですが、特に何もせず様子を見ていたところ、エラーは0件となり、インデックス数が増加していきました。



インデックス数が増え始めると、その更に数日後(5日程度かかった)、google検索結果にAppIndexingのリンクが表示されるようになると思います。

2016年1月28日木曜日

【Android】AppIndexingを実装してみた

こんにちは。エンジニアのKです。
アプリへの新しい導線口だけでなく、SEOにも効果があると言われているAppIndexingを
遅ればせながら実装してみました。

AppIndexingについて

ざっくり言うと、Google検索結果にアプリコンテンツへのリンクが表示されるようになります。
Cookpadさんの場合、こんな感じで表示されます。


アプリがインストールされていれば、アプリ内のコンテンツ(この場合「大根」レシピの検索結果画面)が、まるでwebページへの遷移のようにシームレスに行われます。
アプリがインストールされていない場合、Google Playストアのダウンロードページヘ遷移します。便利ですね。

アプリリンクの表示条件は?

実装にあたって、どんな挙動になるか、先駆者様のアプリで見てみようと思ったのですが、
なかなか上手く行かずに苦労しました。
AndroidはGoogleアカウントでログインしていなくても表示されるらしいのですが、なかなか表示されず。。
とりあえず、対象アプリをインストールしたGoogleカウントでログインしたら、表示されるようになりました。
※ Androidバージョンやブラウザアプリのバージョンにもよる違いもあるかもです。


AppIndexingを実装する

公式ドキュメントに従って実装していきますが、試行錯誤した点について補足していければと思います。
 サンプルコードは、公式ドキュメントにも出てくるandroid-deep-linkingプロジェクト(com.recipe-app)を使います。

 

インテントフィルタの追加

まず、アプリ内のコンテンツに直接遷移できるディープリンクをサポートする必要があります。
http://recipe-app.com/recipe/{recipeId}といったwebページでレシピ詳細を表示する機能があった場合、
同等の機能を持ったアプリのActivity(.RecipeActivity)に、以下の様なintent-filterを追加します。(AndroidManifest.xml)
        
            
                
                
                
                
                
            
            
                
                
                
                
                
            
        

HTTPスキームとカスタムスキームどちらかだけでもいいですし、両方設定してももちろん大丈夫です。
要は特定のURLでインテントが飛んだ時に、アプリが反応できるようになっていれば良いということですね。
Googleは実装手順が簡素になるということから、HTTPスキームを推奨しています。

ディープリンクのURIに対応する処理をActivityに実装

 intent-filterを追加したことにより、http://recipe-app.com/recipe/pierogi-poutineといったURLで.RecipeActivityが起動するようになります。
.RecipeActivityはレシピ詳細を表示するアクティビティですので、対象となるレシピIDが必要になります。
アプリ内遷移であれば、前画面から飛ばすintentにputExtraしてレシピIDを渡すのが一般的かと思いますが、
ディープリンクの場合、intent.getDataString()で取得できるURLをパースして、レシピIDを取り出して、後続の処理に渡すようにします。

    protected void onNewIntent(Intent intent) {
        String action = intent.getAction();
        String data = intent.getDataString(); // http://recipe-app.com/recipe/pierogi-poutine
        if (Intent.ACTION_VIEW.equals(action) && data != null) {
            String recipeId = data.substring(data.lastIndexOf("/") + 1); // pierogi-poutine
            // レシピ情報を取得して、表示する処理
            Uri contentUri = RecipeContentProvider.CONTENT_URI.buildUpon().appendPath(recipeId).build();
            showRecipe(contentUri);
        }
    }


ディープリンクをGoogleに知らせる

ここまでで、アプリがディープリンクに対応し、Googleの検索結果から直接アプリへ遷移できるようになりました。
あとは、対応したディープリンクをGoogleに教えて、検索結果に表示するようにしてもらいましょう。
教える方法は、
  1. AppIndexing APIをアプリに実装
  2. 対応するwebページのmetaタグにディープリンクを指定
  3. sitemap.xmlに記述する
があります。2,3はアプリに対応するwebページを持っている前提となります。
できれば全て対応したほうが、インデックスされやすくなりそうですね。

また、Googleにディープリンクを知らせる際のURLは、以下の様なフォーマットで記述します。
android-app://{package_id}/{scheme}/{path}
上記で対応したディープリンクの場合、
android-app://com.recipe-app/http/recipe/pierogi-poutine
android-app://com.recipe-app/recupe-app/recipe/pierogi-poutine
となります。

AppIndexing APIで知らせる

公式ドキュメントにあるとおり、build.gradleとAndroidManifest.xmlに設定を追加し、ActivityのonStart(), onStop()でAPIを実行します。
公式ドキュメントにあるコードでは、タイトルとwebのURL、アプリのURLを設定していますが、
以下のように書くと、概要(description) も合わせて送信できるようになります。
※descriptionがどのように評価され、利用されるかは不明

    mClient.connect();

    String title = "タイトル";
    String description = "概要";
    Thing object = new Thing.Builder()
        .setType("http://schema.org/Thing")
        .setName(title)
        .setDescription(description)
        .setUrl(APP_URL)
        .setId(WEB_URL)
        .build();
    Action viewAction = new Action.Builder(Action.TYPE_VIEW).setObject(object).build();
    AppIndex.AppIndexApi.start(mClient, viewAction);

タイトルや概要にマルチバイト文字が含まれる場合、URLエンコードする必要は無いのかな?と迷いましたが、エンコードは不要でした。
公式ドキュメントのApp Indexing API 呼び出しをテストするで見た時、コンソールに文字化けして表示されますが、
リリース後にSearch ConsoleでFetch as Googleで見たところ、正常に日本語が認識されていました。


Webページのmetaタグで知らせる

http://recipe-app.com/recipe/pierogi-poutineのheadタグ内に、以下のmetaタグを追加します。

<html>
<head>
...


...
</head>
...
</html>

sitemap.xmlで知らせる

http://recipe-app.com/recipe/pierogi-poutineの要素にlink要素を追加します。
...

  http://recipe-app.com/recipe/pierogi-poutine
  
  

...


以上で実装編は完了です(長い)。
次回はGooglePlay DeveloperConsoleやSearchConsoleで必要となる設定についてまとめられたらと思います。

まとめました => 【Android】AppIndexingを設定してみた




2016年1月27日水曜日

GoogleのAMP(Accelerated Mobile Pages)ってすごいの?

AMP(Accelerated Mobile Pages)とは・・・


Z-MENです。
どうも。

昨年夏頃?からモバイルやSEO界隈でAMPの話題がすごく盛り上がっていて、
モバイル担当としてもやはり気になるところなので一度情報を整理してみたいと思います。

自分の勉強がてらではありますが、どなたかの参考になれば幸いです。
AMPとは、からAMPの実装・確認までまとめてみます。

AMP(Accelerated Mobile Pages)とは?

AMPはAccelerated Mobile Pagesの略称です。
GoogleとTwitterが共同で立ち上げたAMPプロジェクトのオープンソースらしいです。
簡単に言うとAMPに対応した記事コンテンツをGoogle側が勝手に読み取り、キャッシュして、
超高速に優先表示してくれます。モバイルの場合のみ出てくるようですが、カルーセル形式でずらっと並べてくれます。

去年末くらいからモバイルで検索した際に、一部記事がカルーセルで表示されるようになりましたが、あんな感じのイメージで、表示が超高速になる、という感じです。

【g.co/ampdemo】でAMPをデモ体験

Googleさん、ちゃんとデモも用意してくれていて、Googleの検索窓に『gco/ampdemo』といれると
AMPのデモ表示モードに切り替わります。ほんと爆速です。


 AMPの実装について

AMPの実装方法を見てみましょう。
GitHubにもあるんですが、全部英語でオエッとなるかたは参考になれば。

AMPは専用のjsライブラリとbilerplate(いけてるテンプレみたいの)で動くとのこと。
超シンプルに書くとこんな感じになりますと。

  
    Hello, AMPs
    
    
    
    
    
  
  
    

Welcome to the mobile web

 

マークアップ上の注意点としては、

    • <html>タグを<html amp>と書く?
    • <head> 内に<style>body {opacity: 0}</style><noscript><style>body {opacity: 1}</style></noscript>をいれる
    • <head>閉じ直前にを<script async src="https://cdn.ampproject.org/v0.js"></script>をいれる
    • 画像を入れるときはこんな感じ<amp-img src="welcome.jpg" alt="Welcome" height="400" width="800"></amp-img>
    とかとか、基本はこんな感じなのですが、普通にHTMLでページ作ればOKというわけでもなさそうです。
    公式のGetStartにいくつか注意事項があるので貼っておきます。
    AMPプロジェクト公式
    AMP GitHub

    日本語版の導入ガイドも発表されたようです。
    AMP日本語版導入ガイド

     AMPの条件・制約 

    AMPには、爆速を得られる代わりにいくつか制約があります。
    この制約がやや影響が大きく、導入できない方も多いかもしれません。

    1. AMPのランタイムはAMPのCDNから固定のURLで配信
    2. Javascriptが使えない(JSON-LDのみ)
    3. 画像・動画は大きさの固定指定が必要
    4. 広告はiframe経由で表示
    5. フォーマットを遵守
    6.  link要素はrel:canonical以外禁止
    7. ほかimgとかformとかinputタグも使えないかも
    とのこと。これ特に②がでかい、トラッキングができない・・・。
    『AMP実装したから効果が楽しみだぜー!』と思っても効果の程がわからない・・・
    そしてどうもレスポンシブにもうまく対応してない模様。。。厳密にはレスポンシブの実装方法による、ということででしょうか。ちゃんとCSSとかでdevicewidthで判別してればいいんでしょうが、jsでUserAgentみて~とかやってるとアウトなんでしょうね。
    レスポンシブを推奨しておきながらレスポンシブでは使えないかもってどうなのよ。
    そしてとどめの⑥⑦・・・まじか。
    とにかく新しいものやっとけ!と飛びつかずにGoogleが修正やら本腰入れた公表をするまでは
    いったんステイが間違いないかも、が現時点でのわたしの見解です。


    2016.02.03追記
     広告とGAについては対応されることが発表されたようですね。
     まずは最低限の機能は揃えてくれた、というかんじでしょうか。他のアクセス解析が
     使えないのは相変わらず痛いんですが・・・。
    AMPが広告とGoogleアナリティクスをサポート開始

     AMPの確認方法

    先日SearchConsoleでAMPが確認できるようになりました、とアナウンスがありました。
    とりあえず実装してみた!というかたはいてみましょう。
    公開しなきゃわからんよ、ってことね・・・。
    Googleウェブマスターブログ:Search Console における AMP エラー レポートのプレビュー 

     終わりに

    GoogleのAMPの説明を直接聞いたり様々な記事に目を通したりしてきましたが、所感として、モバイルフレンドリーの基準として表示スピードがいよいよ本格導入されるか?な話もあり、AMPを通してモバイルでの表示スピードに対するGoogleの本気度みたいなものは感じました。