webhack / ウェブ技術が好き

javascriptやcssやHTML5とかサーバーサイド等のウェブ技術全般を好きに書くブログ

さくらでSSL(RapidSSL)の申し込みで自動認証が色々と面倒だったので情報まとめ

さくらでSSL(RapidSSL)の申し込みで行われる認証ファイルの自動認証が色々を面倒だったのでブログに情報をまとめます。

自動認証とは/.well-known/pki-validation/fileauth.txtをジオトラスト社のクローラーに自動でクロールしてもらい、認証確認をしてもらう一連の流れを指します。

HTTPSの解除

状況によりけりですが、サーバー証明書の有効期限が切れていたり中間CA証明書が正しく含まれていない場合はクローラーが上手に認証ファイルをクロールしてくれません。

そのため以下のようにhttpsへ転送している場合は、その設定を解除します。

# RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$
# RewriteRule ^(.*)$ https://tkosuga.jp%{REQUEST_URI} [R=301,L]

SSLがvalidな状態であれば問題ありません。

また、今時ないかと思いますがTLSのバージョンが1.1以上である必要があるようです。もし万が一、TLS1.0を利用している場合は自動認証されません(TLS1.0の無効化期限を過ぎているのに利用している方が問題ですが)。

中間CA証明書

もし独自でSSLをインストールする場合は中間CA証明書を含めるようにしましょう。以下URL先を参照して適切な中間CA証明書を含めて下さい。

https://www.geotrust.co.jp/resources/rapidssl/repository/intermediate_sha2.html#b

改行コードの有無

認証ファイルの末尾に誤って改行コードが含まれたりすると自動認証されません。そのためテキストファイルから改行コードを取り除く必要があります。

Linuxサーバー上では以下のようにコマンドで削除してあげると楽です。

cat fileauth.txt | tr -d '\n' > fileauth.txt

gzipの解除

認証ファイルはgzip圧縮を解除してプレーンな情報にしないと自動認証されないらしいです(ほんとかな?)。実際にそのようなのでmod_deflateで認証ファイルを解除します。

<IfModule mod_deflate.c>
  SetEnvIfNoCase Request_URI "/.well-known/(.*)$" no-gzip

上記の設定で /.well-known/ 以下はgzipが解除されます。

クローラーで認証ファイルがクロールされるタイミング

以下ジオトラストサイト内の「ファイル認証とはなんですか?」にクローラーの詳細が記載されています。更新日を見ると2017/09/26となっており、小まめに更新されているようです。

https://knowledge.geotrust.com/jp/support/knowledge-base/index?vproductcat=G&vdomain=GEOTRUST_JP&page=content&id=SO24207&actp=LIST&viewlocale=ja_JP&locale=ja_JP&redirected=true

2017/10/10日時点でのクロールされるタイミングの要点を以下にまとめます。

以下の上記URLからのクロールタイミングを抜粋したテーブルです。認証用ファイルが届いてから速いほど、頻度が高いため認証の確認を行い易いです。

  • 経過時間 | 間隔
  • 送信直後 - 15分後 | 1分毎
  • 15分後 - 1時間後 | 5分毎
  • 1時間後 - 4時間後 | 15分毎
  • 4時間後 - 1日後 | 1時間毎
  • 1日後 - 1週間後 | 4時間毎
  • 1週間後 - | 1日毎

1週間を経過すると1日1回になるため試しづらくなります。そして、このクロールしてもらうタイミングは手動で指定できません。いつくるか分からないクローラーを待つことになります。

Google Analytics有でGooglePageSpeedを100点にする方法

f:id:tkosuga:20150904135325j:plain 写真はうちのみーこ。

PageSpeed Insightsで100点を取るためには「Google Analytics を外しましょう!」という情報をよく見かけるので、

Google Analyticsを外さずにちゃんと100点を取る方法を説明します。Bootstrap等のよくある普通のサイトを高速化してPage Speed Insightsで100点を取る方法も参考にしてください。

王道編

analytics.jsをサーバーにホスティングする

JavaScript ファイルをローカルに保存する際の注意点

サーバーにホスティングして、そこでキャッシュの設定を行えば解決ですが、定期的に更新しているから保存して使わないようにと警告されています。

そのためサーバー内でcron等を利用して定期的にanalytics.jsをダウンロード、そのファイルに変更があった場合にはパラメーターを変更する(ファイルのハッシュ値をパラメーターに利用しても良い)、と言ったanalytics.jsの更新に対応できれば問題ありません。

CDNを経由させる

analytics.jsをCDN経由で取得するようにすればCDNのキャッシュが有効になるため「キャッシュの有効期限が短い」と警告が出る問題が解決します。

WordPressでは、WordPress内で使われるcss/js/imgをCDN経由で取得するプラグインが幾つかあります。CDN EnablerやJackpotのプラグインPhoton等です。

番外編

ga-lite を使う

Analytics.jsのキャッシュ可能なサブセットga-liteを使うと機能制限がありながらも解決できます。

github.com

100行ほどの小さいjsにまとめられています。PVだけ取れれば良い人向けです。

外道編

PageSpeedInsightsのオプションでサードパーティーのリソースを除外する

PageSpeed ToolsのPagespeedapi: runpagespeedを見ると以下の通りで、Page Speed InsightのURLに?filter_third_party_resources=trueを付け加えるとGoogle Analyticsのjsファイルが評価から除外されます。

filter_third_party_resources     boolean     Indicates if third party resources should be filtered out before PageSpeed analysis. (Default: false) 

analytics.js等のサードパーティーリソースを除外したPageSpeedInsightsを使う場合は以下のリンクからアクセスしてしてください。

https://developers.google.com/speed/pagespeed/insights/?filter_third_party_resources

PageSpeedInsightsからのアクセスだったらGoogleAnalyticsを外す。

以下はPHPのコード例です。ユーザーエージェントを見てPageSpeedInsightsのアクセスであればGoogleAnalyticsのコードをHTMLに含めません。

<?php if (!isset($_SERVER['HTTP_USER_AGENT']) || stripos($_SERVER['HTTP_USER_AGENT'], 'Speed Insights') === false): ?>
// your analytics code here
<?php endif; ?>

おちついて編

PageSpeedInsightsの測定中はanalytics.jsを外す。

ストレートにanalytics.jsを読み込むscriptタグを外すと減点0になります。

サイトTOPからanalytics.jsを外す。

PageSpeedInsightsで測定するのはサイトTOPが多いと思います。サイトTOPだけanalytics.jsを読み込まなければ減点がありません。

まとめ

このanalytics.jsがあるために1点減点され、99点になっているサイト管理者もいると思います。

「気にするな」と言われれば、そこまでの問題ですが様々な解決方法があるので必要に応じて参考にして下さい。

GoogleのAPIでSEOする方法

f:id:tkosuga:20160813225351j:plain 写真はおもちゃに高速アタックするうちのみーこ。

ある程度の規模感があるサイトを複数運営していると以下のようなニーズが社内で出てくると思います。

  • 独自のSEOレポートを作りたい
  • 共通のSEOをする指標が欲しい
  • 各種プロモーションとSEOを連動させたい

これらを自社に合った形で実現するのに使えるGoogleが公開しているAPIを簡単な説明付きで紹介します。

Search Console API (Webmaster Tools API)

プログラムからSearch Console APIを利用するとページに訪問した検索キーワードが取得できたり便利です。

Google検索エンジンで(not provided)にまとめられてしまいGoogle Analyticsから参照できなくなったキーワード情報ですが、Search Console API経由で取得できます。

Google Analytics API

SEO目的でGoogle Analyticsを利用するのに良く使われるのがPVやセッション数などを取得するCore Reporting API。それと流入経路別でCV数や接点を取得できるMulti-Channel Funnels Reporting APIです。

またGoogle Analyticsで仮想ページや独自データを管理できるようにする analytics.js を良く使います。

AdWords API

Googleで広告出稿を行っていて、広告運用と連動したSEOを行う場合に使うのがAdWords APIです。キャンペーンの管理や自動入札などを行うためのAPIですが、広告出稿状況や成果に合わせてキーワード単位のSEO計画を立てる事が出来ます。

Cloud Natural Language API

これからSEOで使われるだろうAPIが先日公開されたGoogle自然言語APIです。

自前で機械学習環境を作らずに、Googleによって機械学習済み(これから学習強化されて行くと思われる)な日本語の自然言語処理を利用できる便利なAPIです。辞書学習が大変だった形態素解析しての関連語抽出(co-citation/co-occuranceと呼ばれるもの)もAPI経由で可能です。

APIは便利

欲しい情報がAPI経由で取得できれば加工して表示する幅も広がるし、何といっても複数APIを横断してURLやパス、キーワード単位でデータを統合できるのが良いですね。

自動生成したレポートをメールに張り付けて自動送信する事も出来るようになります。

複数APIを横断して統合した結果を返す自前のAPIサーバーを立ち上げてCSVを返すようにすれば、Excel上でチャート描画したり、ブラウザ上でd3.jsを使ってグラフを描画する事も出来ます。

認証やエラー処理が色々あって、データ取得も方法によっては遅いし、リソース制限が厳しいのでキャッシュするようにしたり、APIのバージョンが変わって動かなくなったりと気をつかう所は多々でてきますがAPIを使ったレポーティングには夢がありますよね。

おまけ

じぶんと何の関係もないツールですが、Google Analyticsのキレイなレポートをブラウザで作りたい人はMegalyticがとても便利ですよ。

Google Analyticsの詳しい調べ事をしていると良く出てくるサイトで、自由度の高い柔軟なカスタマイズが出来て使い方も分かり易いです。Google Analytics APIを使って何かしたい用途の多くは有料ですがMegalyticを使うと解決できると思います。