I am new to web development and I would like to verify site ownership using javascript, similar to what Google does with their analytics code. I have a django app that lets users sign up for a service, but I need to validate that they own the site. Here's a very high level description of what needs to happen:
The user signs up and is given a verification code
I generate a snippet of code to put on their site
They return to my site and click 'Verify'
Here's googles code. Can someone break down for me what this is doing and how it's used to verify site ownership?
<script type='text/javascript' id="verification code">
(function(){
// create a new script element
var script = document.createElement('script'),
script.src = '//www.google-analytics.com/analytics.js';
script.async = true;
// insert the script element into the document
var firstScript = document.getElementsByTagName('script')[0];
firstScript.parentNode.insertBefore(script, firstScript)
})();
</script>
Let's ignore the js for the moment. Your core question is how to verify site ownership. So I'm going to tackle that first.
What Google is doing is having you insert some code into a webpage that you have control of. The assumption is that if you have control of www.example.com, you can get that bit of code served at www.example.com to someone. And that's a pretty safe bet.
Now back to that code snippet you gave. For one thing, it didn't look familiar to me whatsoever. It must be an older format, because what's current is below:
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-123456-7', 'auto');
ga('send', 'pageview');
</script>
In any any case, there's a great read here on why Google has changed their approach over time for how it loads this script: http://www.stevesouders.com/blog/2010/05/11/appendchild-vs-insertbefore/
Related
I am trying to integrate GA into a QT5 / QML project. For this I created a dummy GA web page project to test connectivity. First step is to test the setup with a simple web page (code below).
I had to specify a URL for the GA project. The page, however, is on my desktop, not online. I see no traffic in the real time GA view. Not sure why. Is it that my page is not on www.my-domain.com but literally on my desktop?
SETUP
On the GA settings page, this is my setup
Basic Settings
Tracking Id
UA-1234567890-1
Property Name
Default URL
http://www.my-domain.com
LOCAL TEST PAGE CODE
<html>
<head>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-1234567890-1', 'auto');
ga('send', 'TEST');
console.log(ga.q);
</script>
</head>
<body>
<button onclick="ga('send', 'BUTTON PUSH')">
PUSH ME
</button>
</body>
</html>
I have used GA before and do not remember the integration was this bumpy. Right now, I am also confused by the difference of GA view and Firebase view on the live report. However, I first need to establish proper tracking.
Trying to use the latest google analytics tracking code in a site that uses Barba JS but it will not track past the first page, ie the path of the user, any ideas anybody?
The reason it is only working on the initial page is that the default GA snippet implemented using gtag.js only runs once after load. Since you're using it in a SPA setting, you need to manually re-send the page data when you route. Looking at the barbajs documentation, I think it'll be something like this:
// define a global hook, using afterEnter, but you can adjust to enter, beforeEnter, etc as you see fit.
barba.hooks.afterEnter((data) => {
// this hook will be called for each transitions
//data.current.url is the page path.
gtag('config', 'UA-#######-1', {'page_path': data.current.url});
});
use full code provide with google annalitics
https://developers.google.com/analytics/devguides/collection/analyticsjs/?hl=en
in you JS add
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-XXXXX-Y', 'auto');
ga('send', 'pageview');
I have two problems...1. I have never used google analytics, and 2. I have never used, made, or touched a GWT project until now. I am trying to get google analytics to work with a GWT application. I read through this: How to integrate Google Analytics into GWT using the asynchronous script and the question that it links to with no luck.
There is a new version of Google Analytics out which uses a new
analytics.js script. It's the same process though, just add the script
in your html header:
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-YOUR_ACCOUNT-X', 'auto');
ga('send', 'pageview'); </script>
For my case, the project is large and I am not sure which html file I need to put the google analyics js in. I am assuming the html files in the war folder.
As for this bit:
call the new methods like so:
public static native void googleAnalyticsTrackPageView(String url)/*-{
$wnd.ga('send', 'pageview', url); }-*/;
I am totally unsure where I need to include this.
Oh, one last question. Is this still how I would test locally?
ga('create', 'UA-XXXX-Y', {'cookieDomain': 'none'});
In your war folder there should be an index.html or index.jsp file that serves the GWT JS file (xxx-nocache.js). You need to put the script there.
Alternatively you can also use Arcbee's universal-analytics library.
I've a question related to the simple tracking functionalities of Google Analytics.
I've realized my website with reveal.js, so my site follows a step navigation
http://[mywebsite.nl]/#/cover
http://[mywebsite.nl]/#/welkom
http://[mywebsite.nl]/#/pagina1
http://[mywebsite.nl]/#/pagina2
and I setup google analytics to track statistics.
My tracking issue is that when I land on my http://[mywebsite.nl] and I'm redirected to http://[mywebsite.nl]/#/cover it happens that the same page is tracked twice.
Is there a way to remove the tracking of the / of the website?
Thanks
You can take a look at Google's analytics.js tutorial, it allows some customization:
https://developers.google.com/analytics/devguides/collection/analyticsjs/pages
Page - The page path and query string of the page (e.g. /homepage?id=10). This value must start with a / character.
GA is nice to use as is, it provides some valuable insights.
But it is generally more valuable to track not page views but user actions.
GA is about page views, but as soon as you really want to understand users behaviour you need to track actions. I would recommend to take a look at http://www.devmetrics.io or http://mixpanel.com analytics.
You specify event and its properties. That means that you have full control.
var pageName = document.location.pathname;
// custom pageName processing if you need
devmetrics.userEvent('page_load', [pageName]);
....
// inside button handler:
devmetrics.userEvent('button_click', [pageName]);
I wouldn't recommend stripping the hostname from your pageviews, that can cause other issues with data quality.
Ideally, you would use a 3xx redirect to redirect from your main page to /#/cover, or don't send a hit before your site redirects. If that's not possible, you could try using a filter to drop hits from the URL you don't want to be double-counted.
You might try Google Tag Assistant Recordings to validate that your flow works as expected.
It was easier than I thought, sometimes we tend to over complicate things..
This is the super easy answer I was looking for, it is necessary a small tune on the javascript code
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
if(window.location.pathname != '/'){
ga('create', 'UA-XXXXXXXXX', 'auto');
ga('send', 'pageview');
}
It is just necessary to check the window.location.pathname and call the analytics function only for the desired urls.
The following script is not generating activity when cross-checked in Google Analytics : Real-Time section : Content section --
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-475021xx-x', 'auto');
ga('send', 'pageview');
</script>
where xx-x masks the real account code.
The script is placed just before </head>
We have upgraded our account to Universal Analytics. Google tells us that this is the script to use; directly copied and pasted here (with the masked account code).
On the Google Analytics page, the test page is loaded as an ACTIVE PAGE. I click links on the test page to trigger ga.
Is there an error in this script? For example, I see on other Stackoverflow posts that 'auto' is replaced with the real domain. But I don't see Google instructions to make that substitution.
Am I doing something else wrong?
I did the same thing as you back then.
Mine started showing data in about 12-24 hours after I put the Google Analytics code.
I suggest waiting for another day then checking if data comes up.
Given that this answer can only be verified until we wait for a certain amount of time, please hold off setting this as the correct answer until then.
For me, the issue was a dunce move. I have the Google Analytics Opt-out Add-on for Chrome enabled.
What I had to do was go to chrome://extensions/, scroll down to the Extension "Google Analytics Opt-out Add-on (by Google)" and uncheck the box that says, "Enable".
I hope this helps someone.
You can check the health of your tag using Google tag assistant, and also check with developer tools whether you can see data being sent to your GA account. Also look in your account under Property > Tracking Info > Tracking Code for the status of your tracking code. But if you are not seeing Real Time data then something could be wrong.
The third parameter in the 'create' method sets the cookie domain. It is optional and with 'auto', it sets the cookie domain to the highest domain level possible. Without it, the cookie domain will be set to the website domain without the www. prefix.
Here is what my issue was. I'm using google analytics with wordpress. I tried configuring google analytics for my website using plugin called Google Analytics Dashboard for WP (GADWP). This plugin generated a google analytics snippet that looks similarly to the one described in the question:
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-475021xx-x', 'auto');
ga('send', 'pageview');
</script>
However, in Google Analytics console, the suggested snippet looked like this:
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-110984887-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-475021xx-x');
</script>
It looks like this gtag.js is a new format for the google analytics snippet. So I disabled that wordpress plugin and I manually added the script suggested by Google Analytics to the page.
I have recently fixed the same issue. Please login to your admin dashboard and check the filters.
What I did was to make sure my valid host name filter was the correct one.
If you have copied the custom dashboard from another project or if you had an error in the filter then this would be worth your time to check out.
I have placed the value "domain.com" in the included host names filter.
Let me know if this fixed the issue for you.