덕분에 this great post 무엇이 잘못되었는지 이해하고 아이디어를 .NET
에 적용했습니다. 주요 아이디어는 amp-analytics
구성 객체 (JSON 형식)를 잡아 내 자신의 것으로 바꿉니다 (내부는 clientId
).
우선 내가 web.config
에 등록 된 다음
''//.VB
Namespace AmpHandlers
Public Class AmpConfig
Implements IHttpHandler
Private Const unixStart As DateTime = #1/1/1970# ''//start of epoc
Public ReadOnly Property IsReusable As Boolean Implements IHttpHandler.IsReusable
Get
Return False
End Get
End Property
Public Sub ProcessRequest(context As HttpContext) Implements IHttpHandler.ProcessRequest
context.Response.Clear()
''//ecpected request
''// https : //mydomain.com/gtm-amp.json?id=GTM-zzzzzz>m.url=SOURCE_URL
If String.IsNullOrEmpty(context.Request.QueryString("id")) OrElse context.Request.QueryString("id") <> "GTM-zzzzzz" Then
''//no answer
context.Response.End()
Return
End If
Dim clientId As String = ""
If context.Request.Cookies("_ga") IsNot Nothing Then
Dim ga As String = context.Request.Cookies("_ga").Value ''//GA1.2.12321354.1507250223
clientId = Regex.Match(ga, "(\d+?\.\d+?$)").Groups(1).Value
Else
Dim rand As New Random()
''//Majic 2147483647 is upper limit of Google's random part of _ga cookie
''//The second part is Unix time, in seconds
clientId = rand.Next(2147483647) & "." & CInt(DateTime.UtcNow.Subtract(unixStart).TotalSeconds)
End If
''//Set cookie and response headers
context.Response.ContentType = "application/json" '; charset=UTF-8
context.Response.SetCookie(New HttpCookie("_ga") With {.Value = "GA1.2." & clientId,
.Path = "/", .Domain = context.Request.Url.Host, .Expires = DateTime.UtcNow.AddYears(2)
})
context.Response.AddHeader("Access-Control-Allow-Origin", "https://mydomain-com.cdn.ampproject.org")
context.Response.AddHeader("Access-Control-Expose-Headers", "AMP-Access-Control-Allow-Source-Origin")
context.Response.AddHeader("AMP-Access-Control-Allow-Source-Origin", "https://" & context.Request.Url.Host)
context.Response.AddHeader("Access-Control-Allow-Source-Origin", "https://" & context.Request.Url.Host)
context.Response.AddHeader("Access-Control-Allow-Credentials", "true")
context.Response.AddHeader("Content-Disposition", "attachment; filename=""GTM-NZPM27T.json""")
context.Response.AddHeader("cache-control", "no-cache, no-store, must-revalidate")
''//https://www.googletagmanager.com/amp.json?id=GTM-zzzzzz>m.url=SOURCE_URL response is saved locally and edited
''//possibly it is not the best colution
Dim sr As New IO.StreamReader(context.Server.MapPath("~/amp-gtm.config"))
Dim str As String = sr.ReadToEnd()
str = str.Replace("[[clientId]]", clientId)
context.Response.Write(str)
context.Response.Flush()
context.Response.End()
End Sub
End Class
End Namespace
HttpHandler
을 만들었다.
<handlers>
<add name="amp-gtm" verb="GET" path="gtm-amp.json" type="AmpHandlers.AmpConfig" resourceType="Unspecified"/>
</handlers>
마지막으로 amp-analytics
태그에 넣습니다.
<amp-analytics config="https : //mydomain.com/gtm-amp.json?id=GTM-zzzzzz>m.url=SOURCE_URL" data-credentials="include"></amp-analytics>
이제 캐시 된 캐시 및 캐시되지 않은 AMP 페이지의 모든 클릭은 organic/google
입니다.
이 [블로그] (http://blog.analytics-toolkit.com/2015/google-analytics-direct-none-source/)를 기반으로 사용자가 내 사이트로 이동하고 Google 웹 로그 분석에서 알지 못하는 경우 사용자가 어디서 왔는지에 따라 세션이 '직접/없음'으로 표시됩니다 (이전 쿠키 데이터에 대한 이전 캠페인 데이터가없는 경우). – abielita