This post is the second in a series where I examine details related to different digital privacy laws in various states and explain how they influence the use of standard 3rd party tools such as Google Analytics 4 and Google Ads. You can view all posts here. I’ll update these posts as legislation and best practices evolve.

What is the Colorado Privacy Act?

The Colorado Privacy Act (CPA) is legislation aimed at safeguarding the privacy rights of Colorado residents. (Waves a tiny Colorado flag.) The Colorado General Assembly passed the CPA on June 8, 2021. It was signed into law by Governor Jared Polis on July 7, 2021. It became effective on July 1, 2023, with additional provisions becoming effective over time.

Read more

Universal Analytics data is disappearing in 3 days, on July 1, 2024. The only way to access this data in the future will be if it’s been exported to another 3rd party service or CSV files. Once I started thinking about exporting Universal Analytics data, it took me only a short time to decide to use Looker Studio. It makes much more sense than manually exporting reports inside Universal Analytics, and it doesn’t cost anything. Here are some of the main benefits of this approach:

  • Universal Analytics only allows you to export 5,000 rows at a time. Looker Studio doesn’t have that limitation. Using this approach, I’ve exported up to 250,000 rows of Universal Analytics data from Looker Studio.
  • I can create pivot tables showing one dimension (examples: traffic source/medium, page, countries) and all the daily values for the entire account history. Doing this with medium, for example, allows you to see how many organic visitors there were every day.
Read more

An increasing number of states are rolling out digital privacy regulations. Each state’s legislation has different specifics regarding who needs to comply and how to comply. This blog post starts a series in which I’ll break down these privacy laws from different states and explore their implications for using digital tools and platforms such as Google Analytics and Google Ads. One caveat applies: I’m not a lawyer. I implement and manage cookie consent platforms, and I’m learning about this landscape like everyone else. I’m writing and sharing this information to deepen my understanding and to spark a conversation.

Read more

The ability to seamlessly redirect web traffic from one domain to another is more than just a convenience—it’s a necessity for good SEO and usability. However, not all domain forwarding services are created equal. One service that consistently falls short is offered by GoDaddy. In this post, I’ll explain why GoDaddy’s domain forwarding doesn’t work, and then I’ll explain a solution that circumvents these pitfalls by using a free account from Cloudflare.

Read more

Here’s a summary of the posts and news I found most interesting in January.

Read more

I work in spreadsheets a lot. It’s still the best way to easily slice and dice small data sets. I’ve been using Google Sheets for most of my spreadsheets for several years, but it has limits. The two biggest are memory and power, and they’ve forced me to keep a few grotesquely large spreadsheets in Excel. Another limitation to Google Sheets that I’ve experienced a lot recently is that you can’t edit row 1 of pivot tables.

Read more

Google Analytics has a “ghost spam” issue lately and one really annoying Russian is responsible for most of it. I’ve read through buckets of posts from Analytics professionals about how to deal with this tomfoolery. I’d like to share a few of the resources and provide some commentary.

Read more

Let’s say you’re launching a significant update to a website. A lot is changing: the theme, lots of URLs, maybe the CMS or backend, and so forth. And the team creating the website is working from various IP addresses on the development site. What’s the best way to handle the transition with Analytics?

Lately (after having a website launch without Analytics earlier this year) I’ve been handling this in a very particular way, and I’ve grown to really like it. Basically, I’m using hostnames (dev.domain.com, www.domain.com, etc.) in Google Tag Manager to automatically split traffic to different Analytics properties. I’m doing this by using a “lookup table” for my Analytics IDs (instead of using a “constant” variable).

Read more

This post was originally created on November 11, 2016, and updated on April 20, 2024. It previously provided instructions for setting up error tracking with custom error pages, Google Tag Manager, and Universal Analytics. However, things are a bit different today with Google Analytics 4, so I’ve edited this post significantly to reflect those updates.


I was with a client browsing their website to review some new content recently, and we ran across a “500 – Internal Server Error” warning on one of the most important pages. (That means their server encountered an error that prevented it from successfully serving the page.) We were unaware of this and didn’t know how long it had been an issue.

Most websites (even big ones) do not automatically report such errors. Problems like this are usually exposed when someone (a coworker, an angry website visitor, etc.) finds and reports them. That’s terrifying if you’re responsible for an organization’s web presence. What if visitors are experiencing errors and nobody is saying anything?

One way to monitor website errors is with custom GA4 reports. In this blog post, I’ll show how most content management systems and website platforms already provide this information to GA4 in a way that allows you to report on it. If you’re not getting that data in GA4, I’ll also give you some notes about changing that.

Read more

After collecting data for The Worst Super Bowl Ever, I asked a bunch of other people in Boulder, CO what sort of analysis they’d like to see. The response was overwhelming: most people wanted to know who swore more — Broncos fans or Seahawks fans? This is a reasonable way to think about things, especially for those of us currently in a state of mourning.

Discussing this further, I found an implicit assumption: most people assumed that Broncos fans were much more profane during the Super Bowl than Seattle fans, mostly because of Denver’s unconditional surrender in the first few seconds of the game. Is that assumption correct? Let’s see.

Read more