You don’t touch what half works, right? At Velux we touched it on nearly 600 websites.
You can only decide well about your ad money when you can see which source brought the buyer.
| Rebuilding the measurement of nearly 600 websites in 42 countries | Before | After |
|---|---|---|
| Measurement containers | 50 | 2 |
| Purchases with no known source | 91% | 8% |
| Page load time | 5-10 seconds | under 2.5 seconds |
What nobody dared to touch
Many companies know their measurement is off. Still nobody touches it, because nobody can see what depends on what, and everyone is afraid that what half works today will not work at all afterwards.
When I joined Velux, I found the same thing, only bigger. The measurement ran from 50 Google Tag Manager containers, on nearly 600 websites, in 42 countries. That was every website Velux had. (Google Tag Manager is the tool that lets you manage a website's tracking codes from one place. A container is the box those codes sit in.)
A container only holds a set amount of code. Some of them were 100 percent full, and nothing more could be added. The whole structure was impossible to see through.
What it cost
The first cost was money. Measurement gives every visitor an identifier. That is how it knows that the person who bought today came earlier from an ad, a newsletter or a search. In the old structure something overwrote these identifiers. The purchase was there, its source was not.
For 91 percent of purchases we did not know where they came from. Meanwhile, decisions had to be made about a marketing budget of several million euros. It is like seeing one invoice out of ten and having to say from that one where the money goes.
The second cost was speed. The websites loaded in 5-10 seconds.
We did not patch it, we rebuilt it
This was when Google announced GA4, the new version of Google Analytics. (That is the program that shows how many people come to your site and what they do there.) Moving to it meant work either way.
I proposed that we should not only move to the new Analytics, but redraw the whole measurement structure together with it.
Base and supplement
Two containers took the place of the 50, and we divided the measurement between them:
- Base. One container holds the measurement everything else is built on. Only the most skilled technicians could touch it.
- Supplement. We were freer with the other container. Anyone who had worked with Google Tag Manager before could submit a measurement for approval.
Strict at the base, free in the supplement. This was deliberate: we did not want the price of order to be that teams cannot get to their data.
Two more things went into the new structure:
- Google Consent Mode. It makes sure the measurement follows what the visitor agreed to in the cookie window.
- Custom templates. In Google Tag Manager, a template can fix in advance what the code may reach on the website and what it may not. So a new measurement cannot do anything it was not given permission for.
Switching 600 websites while they were running
With nearly 600 websites there is no such thing as switching over and seeing what happens.
What made it harder was that the websites were not alike. They ran on separate frameworks (the software a website is built on), with separate designs, and in many cases separate agencies managed them. What worked on one site had to be checked again on the next.
So for a while the old and the new measurement ran side by side. We only switched once it was clear that the new numbers matched reality better.
What changed
On the day we took the old measurement off the websites for good, the ratio turned around. The share of purchases with no known source fell from 91 percent to 8 percent. At last it was visible where the several million euros of marketing budget were going.
The websites got faster too: instead of 5-10 seconds, they loaded in under 2.5 seconds.
The cause was in the old structure. Measurement works with variables (a variable is a piece of data the measurement reads from the page, the value of the basket for example). There was a variable that referred to 151 other variables, in a circle. As if you could only get the answer to a simple question after phoning 151 people first. When we removed these, the load time recovered.
What we did not manage
We never managed to map the old structure completely, even though we wrote custom software for it.
This is the most important lesson if you are in a similar position. You do not have to understand every thread of the old system to replace it. It is enough to build the new one beside it, run the two together for a while, and decide from the numbers.