SendGridとGoogle Analyticsを連携させてみる

Shunsuke Sawada

Herokuのアドオン、Mandrill の有料化に伴い、Sendgridを導入したサービスがあるのですが、それとGoogle Analyticsを連携するやり方がわからなかったので調べました。

Sendgrid経由で、Railsでメールを送ると、メール本文に記載されるリンクのURLは上書きされてしまいます。
これはSendgridの方でクリック率をトラックするためのものなので、
便利ではあるのですが、Google analyticsのカスタムURLみたいなことをする時にはやっかいです。

上書きされてしまうので、せっかく設定したパラメータが無効になってしまうのです。

1
/signin?utm_campaign=signin&utm_medium=email&utm_source=xxxx

というURLが、

1
https://u2842942.ct.sendgrid.net/wf/click?upn%3Ddmy08NGolhxxxxxxxxxxxxx

こんな感じになってしまう。

ヘッダーに情報を追加する

ということで、普通にパラメータで追加する方法は上手くいきませんので、解決策。
公式ドキュメントにこんなのがあります。

Settings (Filters) - SendGrid Documentation | SendGrid

Railsでメールを送信するときに、ヘッダーに対応するフォーマットで情報を送信してあげればいいとのこと。
こんな感じになりました。

ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def send_signin_email(user)
  @user = user
  # Header for sendgrid filter (tracking with google analytics)
  sendgrid_header = {
    "filters" => {
      "ganalytics" => {
        "settings" => {
          "enable" => 1,
          "utm_source" => "register",
          "utm_medium" => "email",
          "utm_campaign" => "signin"
        }
      }
    }
  }
  headers['X-SMTPAPI'] = sendgrid_header.to_json
  mail(
    subject: "Sign in",
    to: user.email,
  )
end

ちゃんとしたヘッダーかどうなのかは下記でチェックできます。
SMTP API Header Validator - SendGrid Documentation | SendGrid

まだAnalyticsの方で計測できてませんが、メールは正常に送れているし、ヘッダーにも上記の内容が含まれていました。たぶん大丈夫かな。

以上です。

参考

SMTP Headers: Custom Fields, SendGrid Magic | SendGrid
ruby on rails - How to create custom email headers - Stack Overflow

Shunsuke Sawada

おすすめの記事

Rails / Turbolinksに対応したソーシャルボタンを配置する(Facebook, Twitter, Google+, Pocket, はてブ)
118
Rails / Google Analytics が動きを止めた & なぜかURLが正常に取得できない
10
紙のデザイナーがウェブ開発できるようになるまでに必要なこと
451