Jay Murphy

Jay Murphy

Jay Murphy is a digital analytics expert and founder of Trionia, where he specializes in transforming data into actionable insights for large and mid-sized businesses. With over thirty years of experience and a passion for Google Analytics since its inception, Jay has honed his skills to bridge the gap between technical data analysis and strategic business planning. An educator at heart, he has developed and taught comprehensive digital marketing courses at both the undergraduate level and within organizations, enriching minds with his deep understanding of the digital analytics landscape.

His career, which began in systems analysis for spacecraft guidance, has evolved through roles that blend technical acumen with strategic vision across various sectors, including Fortune 500, Higher Education and Non-Profits. Certified in Google Analytics since 2011, Jay's leadership at Trionia has spearheaded successful online campaigns and innovative marketing strategies, underlining his commitment to leveraging data for growth. Jay's approach goes beyond the numbers; he's a storyteller who uses data to drive business success, making him a pivotal figure in the digital marketing world.

Sunday, 21 January 2024 19:57

How to track HubSpot Forms in GTM? Supercharged!

HubSpot stands out as a powerful CRM widely embraced in the marketing sphere. One common query that surfaces is how to effectively track HubSpot Forms using Google Tag Manager (GTM). The process is straightforward and adds a valuable tool to your GTM toolkit. We've drawn insights from Clarity Global (formerly 3WhiteHats) and Analytics Mania's Julius Fedorovicius for this technique, ensuring a robust foundation.

In our example, we go beyond the basics by extending the code to access form data, providing richer information for our marketing tags. While we specifically use GA4 Event tags in our illustration, this approach can be extended to various marketing tags like Facebook, TikTok, LinkedIn, and more. However, it's crucial to ensure compliance with organizational privacy policies and legal regulations such as GDPR or CCPA.

Implementation Steps

Step 1: Create and HTML Tag in GTM

Begin by creating an HTML tag in GTM that listens for the HubSpot FormSubmitted Event. Detailed information can be found here. The raw code below should be copied and pasted into GTM.

 <script>
  window.addEventListener("message", function(event) {
    if (event.data.type === 'hsFormCallback' && event.data.eventName === 'onFormSubmitted') {
      console.log(event.data);
      window.dataLayer.push({
        'event': 'hubspot-form-success',
        'hs-form-guid': event.data.id,
        'data': event.data,
      });
    } else if (event.data.type === 'hsFormCallback' && event.data.eventName === 'onFormReady') {
      window.dataLayer.push({ 'event': 'hubspot-form-ready', 'hs-form-guid': event.data.id });
    }
  });
</script>

This code has been extended to include the submitted form data in the dataLayer, that is done by this line:

'data' : event.data

What this line does put the form data in the dataLayer.  What you will see in the dataLayer will depend on how your form has been created, in the video we will show how to review the dataLayer so that you can create your own customized Data Layer type variables.

HubSpot Form Tracking GTM Form Listener

Employ a DOM Ready Pageview trigger for the tag to ensure the complete rendering of the HubSpot form. (For extra credit you could detect a HubSpot form and only fire when one is present, but for now we will use all pages.)

Step 2: Create a Variable for the Form Data

Generate variables for the form data; for instance, 'company' in our example. The full variable name in the dataLayer is:

data.data.submissionValues.company

Adjust the final part based on your HubSpot form's variable names.  You can find them in the dataLayer formSubmission object.

HubSpot Form Tracking GTM Form Variable

Step 3: Set up a Trigger

Create a trigger to detect the 'hubspot-form-success' event defined in the listener.

HubSpotFormTrackingGTM Trigger

Step 4: Create a GA4 Event Tag

Finally, craft a GA4 Event tag using the HubSpot Form Submit trigger to send back the form variable.

HubSpotFormTrackingGTM GA4Event

With these steps, you now have a fully operational HubSpot Form tracker in GTM. Feel free to include additional form variables and channel this data to other tags. Embrace the advantages of a consistent Form Submit trigger for more accurate conversion tracking compared to traditional "thank-you" pages.

Happy Tracking! If you have any questions, whether about this or other GA4/GTM topics, let us know — we're here to help.

Referrences

 

 

Sunday, 31 December 2023 22:18

GA4 IP Filters

 

How to Filter by IP Address in GA4?

A common process in keeping your GA4 data accurate is removing internal traffic.  The most common way to do that is by filtering out this traffic by IP Address.  This article will step through how to complete this process.

 

How to Define Internal Traffic using an IP Address?

The first step of this process is defining internal traffic using an IP Address.  We will use an example IP Address of 123.456.78.9 - you can find the right IP Address by typing in "What is my IP" in Google search or check with your network team to find a range of IP Addresses. 
Now navigate to the "Define internal traffic" page.  ( Admin -> Data streams -> click on Data Stream -> Configure tag settings -> click "Show more" -> Define internal traffic ) and you will see this screen:
 
 ga4 ip filtering define internal traffic
After clicking on the creat button you will see this screen:
ga4 ip filtering defininf internal traffic with an ip address 
Defining Internal Traffic by an IP Address 
Enter in a unqiue name for your "Rule name".  Notice that "traffic_type" value is defined as "internal", this is what will be used in the filter step to filter out this traffic.  You can create new "traffic_type"s at this point as well if you would like different filters, keeping in mind that there are a maximum of 10 filters allowed. 
Next select the "Match type", in this case we have selected "IP adress matches regular expression", there are other choices as well including "IP address is in range (CIDR notation)" - look here to learn more about this match type - https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing.  In the "Value" field we have coppied in our IP address and then add "\" before the "." to make it clear that we mean a period "." in our IP Address.  (The period character means a single character wildcard, using the backslash, "\", escapes the period to indicate that we mean an actual period and not a wildcard.  We will be providing a brief Regular Expression article to provide the basics that will help your GA4 analysis.  To read more - https://en.wikipedia.org/wiki/Regular_expression

How to Create a Filter in GA4?

The next step is creating (or in most cases editing) your internal traffic filter.  First navigate to Admin -> under "Data Collection and modification" click on Data filters.  From here you can Edit your "Internal Traffic" filter, or click the "Create" button to start.  You will see this:

ga4 ip filtering internal traffic filter

If the "Data filter name" is not set fill in a unique name.  Next notice that the "Parameter name" is set to "traffic_type" and the "Parameter value" is set to "internal" - in most case we can leave these alone, if you want to create additional custom filters - then the Parameter and Value will allow you to customize these settings.

Finally we will want to select the "Active" filter state - this will ensure that the traffic is permanently filtered out.  (If you only want to filter the data from reports, but want the data available, try Report Filters - here is an introduction to Exclude Filters.)  When you are complete click on the "Save" button and then click on "save filter" on the next warning that filters are destructive and irreversable.  Make sure you test your filters - to ensure no data is lost.

References:

Google Article on Filtering Internal Traffic - https://support.google.com/analytics/answer/10104470?hl=en

Google Article on Regular Expressions in Google Analytics - https://support.google.com/analytics/answer/1034324?hl=en

 
Saturday, 22 April 2023 19:22

Edit GA4 Custom Channel Groups

Introduction:

Google Analytics 4 (GA4) is the latest version of Google Analytics that offers a more intelligent, flexible, and privacy-focused analytics solution for businesses. GA4 comes with many advanced features that provide a better understanding of user behavior, customer journey, and website performance. One such feature is the ability to edit GA4 channels, which allows you to customize your reports and insights according to your business needs.
 

What are GA4 Channels?

Channels in GA4 refer to the sources of traffic that bring visitors to your website. These channels can be categorized into various types, such as organic search, direct, social, referral, email, and paid search. Each channel has its own set of characteristics and behaviors, which can help you identify the most effective marketing channels for your business.
 

Why Edit GA4 Channels?

Editing GA4 channels can help you gain deeper insights into user behavior and optimize your marketing campaigns. By customizing your channels, you can filter out unwanted traffic sources, combine similar channels, and create new channels that better reflect your business goals. This can help you focus on the most important metrics and make better-informed decisions about your marketing strategy.
 

How to Edit GA4 Channels?

To edit GA4 channels, you need to follow these steps (also see video following this article):
Step 1: Go to the Admin section of your GA4 property and select Data Settings.
Step 2: Click on "Channel Groups".
ga4 channel group editing
 

Step 3: To start from scratch you can create a new Channel Group or more often you will 'Copy to create a new' (in some properties you may see 'duplicate') the 'Default Channel Group':

GA4 copy channel group

Step 4: In the Edit Channel Group window, you can rename the channel group, change the rules for the channels included in the group, and add or remove channels from the group.
GA4 edit or modify channels
 
Step 5: To Create a new Channel - click on the "Add new channel" button.  Then on the next screen update the criteria for this new channel.  In our example traffic with a medium of either "magazine" or "newspaper" will be assigned to our "Magazine" Channel. 
To change the rules for the channels in the group, click on the ">" button next to the channe. This will open the Channel Details window, where you can set conditions for including or excluding channels based on various parameters such as source, medium, campaign, and more.
GA4 create a new custom channel
NOTE: The regular expression in this example uses the "|" symbol which represents and "OR" - so if our medium is "magazine" or "newspaper" the Channel will be "Magazine".
Step 6: After making the necessary changes, click on "Save channel" and then "Save" to save your new channel group.
Step 7: Once you have saved your changes, the new channel group will be available in your GA4 reporting views.
 

Tips for Editing GA4 Channels:

1. Before making any changes to your channel groups, make sure you have a clear understanding of your website traffic sources and user behavior. 
2. Use descriptive names for your channel groups to make it easier to identify them in your reports.
3. Experiment with different channel group configurations to find the one that works best for your business.
4. Regularly review and update your channel groups to ensure they accurately reflect your marketing strategy and goals.

Conclusion:

Editing GA4 channels can help you gain deeper insights into user behavior and optimize your marketing campaigns. By customizing your channels, you can filter out unwanted traffic sources, combine similar channels, and create new channels that better reflect your business goals. Use the tips outlined above to make the most of your GA4 channel editing capabilities and improve your website's performance.

References:

Google Article on Channel Groups - https://support.google.com/analytics/answer/6010097?hl=en#zippy=%2Cin-this-article

Google Article on Regular Expressions in Google Analytics - https://support.google.com/analytics/answer/1034324?hl=en

 
Wednesday, 09 September 2020 19:15

Google Tag Manager - Introduces Server Side Tagging

Three Ways Server-Side Tagging Can Help Marketers Succeed In 2023

The release of server-side tagging in Google Tag Manager has a lot of digital marketers talking, and for all the right reasons. For years, marketers have relied on a variety of third-party tech partners to gain deep insights into customer behavior on their websites, sometimes trading such valuable information for slower site performance, questionable security, and misleading data sets.

Why should marketers be looking at server-side tag management right now? For starters, privacy safeguards implemented or being implemented in the most popular browsers are quickly making server-side tagging not just an option, but an eventual necessity.

Two such examples can be found in Safari’s Intelligent Tracking Prevention (also known as ITP), which has severely restricted third-party cookies, as well as Chrome’s restrictions on third-party cookies that are set to roll out in 2023.

These changes amount to a complete overhaul of the current landscape marketers have grown accustomed to, and are creating new challenges for marketers looking to provide relevant ads and highly personalized experiences to customers. For digital marketers to continue to maintain audiences and provide relevant advertising, implementing server-side tagging will be a must.

GTM Tag management today

The server side is also the secure side

Browser security will continue to be a hot topic for both brands and the customers interacting with them in 2021, making server-side tagging an even hotter commodity moving into the new year. Server-side tagging allows digital marketers to identify customers with server-based (http only) first-party cookies.

Further, server-based cookies are more secure, as a result browsers will allow such cookies for user identification. This change ensures privacy by the browsers, and will ultimately force more digital marketers to embrace server-side cookies moving forward.

These issues make the availability of server-side tagging all the more exciting. The new features give users the ability to move Google Tag Manager containers from a website or app to a server-side environment, thus creating another layer of tagging between sites (and other data sources) and other third-party marketing tags such as Google Ads, Facebook, and more.

Server Side GTM Tag management

There are many benefits to moving your tag management to a server-side environment, but for the sake of time, we’re going to feature our top three reasons why your digital marketing strategy should seriously consider migrating your tags to a Google Cloud Container in 2021.

Improved website performance.

One of the primary benefits of Google Tag Manager is the ease in which digital marketers can add new tags to marketing campaigns. But, that also comes with a price—namely, how easy it is to overload a website with a slew of trackers and the associated JavaScript that can have a serious impact on site performance and page load times.

With server-based tagging, much of the work being done within our client’s browser can be offloaded to our Google Tag Manager Container in the Google Cloud environment. We accomplish this is by moving browser-based code to server-side clients, which in turn apply business rules for tracking, security, and potential data enrichment from other systems. This newly transformed data is then sent to the final consumer of said data, resulting in less code that is downloaded and run within the browser to give users improved site performance and a better overall user experience.

Customer-centric security features.

There’s little doubt that data and privacy concerns remain a key concern of Internet users. For example, a recent survey of mobile users in the U.S. showed that 64 percent of respondents take data privacy of brands very seriously. Further, 43 percent stated that they refused to make mobile purchases because of concerns that their data would be stolen.

With browser-side containers, every new marketing tag added to the browser can send user data directly to third-party sources. Most of the time this isn’t an issue, however, the fact remains that digital marketers have very minimal oversight or control of the data that’s collected.

A server-side client, on the other hand, puts marketers in control of the data collected and forwarded to third-party tracking providers. Server-side GTM accomplishes this through data checks performed in the Cloud Server GTM Container prior to sending said data to third parties, resulting in greater security for your customers’ data.

Analytical accuracy where it matters most.

Another reason brands should consider server-side tagging in Google Tag Manager is the ability to improve the quality and accuracy of the various data that are collected through customer interactions and site visits.

With current browser-based containers, for example, expiring cookies can lead to a wide range of undesirable results. Because of some of the privacy features browsers such as Safari and Firefox (ITP mentioned above) implement directly affect user cookie privacy, it’s not uncommon for such users to return to websites a week later only to appear to a brand viewing the data from an analytical perspective as completely new users.

Even more, such privacy features can negate conversions with a third-party cookie after as a little as a day, essentially converting what could be a successful campaign into a data-driven failure.

Accuracy in analytics and data sets is one of the features that makes server-side tagging in GTM so valuable. With server-side tagging, cookies can now be set from the Google Cloud Server, as opposed to the unreliable browser-based cookies that are in use today. With server-based cookies, all browsers will allow longer timeouts, thus allowing your marketing technology to ‘see’ your customers for who they are and for a much longer period of time, leading to more personalized and relevant targeting and communication.

Discover what server-side tagging can do for your brand

With the introduction of server-side tagging to Google Tag Manager, our top three picks of enhanced security, faster site performance, and improved accuracy in analytics are just the tip of the iceberg. Want to learn more about what migrating to a server-side tagging platform can do for your brand?

Wednesday, 01 September 2021 19:50

Google Analytics: The Ultimate UTM Guide

UTM Tagging Guide

UTM Inforgraphic TrioniaWelcome to our comprehensive guide on UTM tags, tailored specifically for digital strategists and marketers who are keen to elevate their analytics game. In this guide, we will dissect the world of UTM parameters to equip you with the knowledge necessary for diligent campaign tracking. Our aim is to enhance your understanding with straightforward explanations and practical advice, all in a professional yet relatable manner. Would love to hear your comments about tips and tricks you have used with using UTM parameters with your marketing.

 

What are UTM Tags?

UTM tags, also known as UTM parameters, are simple code snippets added to the end of a URL to track the performance of campaigns and content. UTM, which stands for "Urchin Tracking Module".  This comes from Urchin Software Corporation, which was acquired by Google to become Google Analytics!  These tags enable Google Analytics to capture granular details about where traffic comes from, offering insights into the effectiveness of your marketing efforts. 

The UTM tracking capability in Google Analytics is a great way to understand your website traffic and marketing effectiveness – the built in reports provide a great way to answer the questions that are typical for learning how a campaign performed and learn how to improve future campaigns.  Some of questions you can answer are:

  • How did our campaign perform? 
  • By new users, by conversions, by conversion rate...? 
  • Compared to prior campaigns?
  • What ad performed best?
  • What size, call to action, image variant...  worked best?
  • What time of day worked best (or worst)?
  • What channel attracts new visitors?  Drives user engagement?  Leads to clients?

In GA4 we can answer these questions using the built in Reports and the Explore reports.  For example the Acquisition report below we have selected the "Session source / medium" dimensions and the "Session campaign" secondary dimension - this report provides us a view of the detailed traffic sources as well as information about our Campaigns in particular our email campaigns:

The ultimate utm guide - GA4 acquisition report with session source, medium and campaign dimensions shown.

And from the Acquistion report we can dive into more detail about the 'Content' of the links in an email - using the utm_content tag which in turn populates the "Session manual ad content" field.  This field shows how each link in our email performs.  This utm_content tag can be extended to include information about an Ad variant, including colors, size, imagery...  To allow you to validate the performance of various ads.

explore report utm email content

It is these types of insights and more that show the benefit of understanding how people respond to campaigns and ads.  

Providing this useful information to Google Analytics is done using the 'UTM' parameters.  These parameters are a set values that can be tagged to each ad, when a user clicks on the ad Google Analytics automatically process the parameters so they are available in the Acquisition reports and other built in reports.  This provides insights and understanding of visitor and donor behavior that will drive continued improvement of all marketing efforts.

What are the UTM Parameter Definitions?

The original five UTM parameters you can use to track your marketing campaigns are:

  1. `utm_source`: Identifies the source of traffic, such as a search engine, newsletter, or other referring site.
  2. `utm_medium`: Denotes the medium used to share the URL, like email, CPC, or social.
  3. `utm_campaign`: Specifies the individual campaign or promotion.
  4. `utm_term`: Used primarily for tracking keyword data for paid search campaigns.
  5. `utm_content`: Helps to differentiate similar content, or links within the same ad.

Each parameter provides valuable data points to understand how users interact with your digital strategy initiatives.

We will provide more detail about each parameter in the examples and with links in the appendix.

The way to think about these parameters is to consider how they will answer your marketing questions and how to best utilize Google Analytics to answer these questions.  Trionia’s best practices incorporate this into our recommendations.  We also provide resources at the end of this 

What are the GA4 Default Channel Settings?

Google Analytics 4 (GA4) is the latest generation of Google's analytics offering, introducing a host of new features and changes. Understanding default channel groupings in GA4 is crucial for accurate data interpretation.

In GA4, default channels are predefined categories of traffic. When setting up UTM tags, aligning them with these default channel groupings will ensure consistent and understandable reporting metrics. Channels like 'Direct', 'Organic Search', 'Social', 'Email', and 'Affiliates' are some of the defaults that your tagged URLs will slot into for a streamlined analysis.  For the latest list see this Google Analytics Anser - https://support.google.com/analytics/answer/9756891?hl=en

Channel

Rules

Direct

Source = (direct) & Medium = (not set) | (none)

Organic Search

Medium = organic

Organic Social

Source matches a regex list of social sites

OR

Medium = social | social-network | social-media | sm | social network | social media

Paid Social

Source matches a regex list of social sites

OR

Medium matches regex ^(.*cp.*|ppc|retargeting|paid.*)$

Email

Medium = email

Affiliates

Medium = affiliate

Referral

Medium = referral

Paid Search

Ad Distribution Network != Content

Medium = cpc | ppc | paidsearch

Cross-network

Campaign Name contains "cross-network"

Cross-network includes Demand Gen, Performance Max and Smart Shopping.

Paid Shopping

(Source matches a list of shopping sites

OR

Campaign Name matches regex ^(.*(([^a-df-z]|^)shop|shopping).*)$)

AND

Medium matches regex ^(.*cp.*|ppc|retargeting|paid.*)$

Other Advertising

Medium = cpv | cpa | cpp

Display

Ad Distribution Network = Content

Medium = display | cpm| banner

 

What are the UTM Tagging Best Practices?

To glean the most out of your UTM-tagged URLs, it's essential to adhere to some best practices:

  • Consistency is Key: Be consistent with naming conventions to avoid skewed data.
  • Case Sensitivity: Understand that UTM parameters are case sensitive; 'Facebook' and 'facebook' would be tracked separately.
  • Short and Clear Labels: Use labels that are easy to decipher for organized reporting.
  • Tools for Simplicity: Utilize UTM builder tools to ensure accuracy and save time.
  • Avoid Sensitive Information: Never include sensitive or personal information in UTM tags.
  • Use Campaign Naming Hierarchies: Structure your campaign names systematically for easier analysis later on.

By sticking to these practices, your UTM data will be both meaningful and actionable.

Bing Ads

Use auto-tagging to ensure that you can track your Bing traffic.

https://help.ads.microsoft.com/#apex/ads/en/56762/2

Display Ads

The following recommendations will place the Display ads in the 'Display" default channel as well as show the exact placements for further analysis of the ad results.

Campaign Name

Campaign names are most useful when they are descriptive name.  Campaign names can also be used across channels to determine the overall impact of larger communication/marketing efforts - for example "new product awareness" used in paid search could also be used in display and email campaigns.  (Could include media name in the campaign.)

Source

A best practice is to use the source seen in organic and referral traffic - for example "nyt", "cnn" "hbo".

Medium

Recommend using the Google values seen in the prior table.  

Content

Again descriptive names are most useful.  Two additional pieces of information to consider adding here is the media outlet and banner size.  For banner size - such as 300x250, 300x600, 728x90...  The result is a content parameter that looks like this - "kitten-picture-ver-a|media-people|300x250".

Keyword

Not used for this channel.

The resulting URL would look something like this:

https://www.example.com/my-landingpage?utm_content=kitten-picture-ver-a%7Cmedia-people%7C300x250&utm_medium=banner&utm_source=nyt&utm_campaign=product-awareness-spring-2019 

Social Ads

Regular posts to social media can be tagged to provide more information than is provided by default - Source and medium.

Campaign Name

Tying together campaigns used in other channels to social media communication help to understand how these channels work together - for example we can use the same campaign - "product-awareness-spring-2019".

Source

Continue to use the placement of the posts - such as facebook.com, t.co (twitter), linkedin.com.

Medium

When the posts are being paid for it helps to differentiate this in the reports Trionia recommends using "display" for the medium.  Choose one different from the medium used for Banner Ads to simplify differentiating these values.  

Content

Since social media posts are normally a combination of text and images a short title that also describes the image used is recommended.  Something like: "product-highlights|top-reasons-to-switch"

Keyword

Not used for this channel.

A URL for a sample post:

https://www.example.com/article/top-three-reasons-to-switch?utm_content=product-highlights%7Creasons-to-switch&utm_medium=banner&utm_source=facebook&utm_campaign=product-awareness-spring-2019

For social media shorten the link to eliminate the chance that the parameters are removed by the social media outlet - the bitly (http://bitly.com) or the google (http://goo.gl) shortener are two good choices.

Email Links

Tracking emails can be improved by tying to the Campaigns used in the other channels campaign goals. The content parameter can contain information about each link in an email to reflect the topics and images that promote user interaction.  (Some of this may be in place already - on analytics information was reviewed to create this document.)

Campaign Name

Tying together campaigns used in other channels with email communication help to understand how these channels work together - for example an email that includes a link to the Product details or Frequently Asked Questions can be a part of an overall campaign for product awareness.

Source

Continue to use the source of the emails.  (Consider switching to lower case - if this is done, care will need to be taken to compare to historical data.)

Medium

The medium of 'email' is perfect for this channel.  

Content

This parameter is perfect for describing the email subject.  EMails also contain additional articles and links, the content parameter is ideal for tracking these as well.  So the following "september-2016-monthly-update-m" could be changed to - "sep-2016-update-subject", "sep-2016-update-product-faq", "sep-2016-update-product-features", 

Keyword

Not used for this channel.

A URL for a sample post:

https://www.example.com/article/landing_page?utm_content=sep-newsletter&utm_medium=email&utm_source=weekly-email&utm_campaign=product-awareness-spring 

General Best Practice

  1. Do not use different sources or mediums with Google Ads campaign - stick with the built in values.  
  2. Use lowercase for all UTM terms – Campaign, Source, Medium and Content.  Google Analytics considers ‘Facebook’ and ‘facebook’ to be two different sources – which is clearly not the intent.  To minimize the chance of user errors, a filter should be created in the Google Analytics views to change all these fields to lowercase as well.  Of course, if this is done - care must be taken when filtering to view historical information.
  3. Use dashes, underscores or the pipe symbol ("|") to separate words in the UTM parameters – spaces can also be used.  Avoid special characters – like &, @,… - these will break your links.
  4. Do not use UTM tags on internal links – so for example the clicks on the interstitial links. These are already measured by the existing Google Analytics code and can be viewed in the content reports as well as the Page Analytics plugin for the Chrome browser.
  5. DO NOT CLICK on your own UTM Links - as this will permanently change your analytics.

Further Resources

The Google UTM Builder Link -

https://ga-dev-tools.appspot.com/campaign-url-builder/ 

Blog post by Annie Cushing - https://www.annielytics.com/guides/definitive-guide-campaign-tagging-google-analytics/ 

RaffleCopter blog post on UTM Naming Conventions - http://blog.rafflecopter.com/2014/04/utm-naming-conventions/

Thursday, 23 April 2020 18:30

Remarketing Lists with Google Analytics

Remarketing Strategy using Google Analytics

I first answered this question What is the most successful strategy you used for remarketing using Google analytics? - Quora.  In this article I wanted to provide more detail.  This article will step through the nuts and bolts of creating a remarketing list and we will also dive into the strategy in more detail then was covered in Quora.

Creating Remarketing Lists in Google Analytics

Google Analytics uses Segments to create remarketing audiences.  So we will talk about building segments - but first let's think about the strategy we want for creating our audiences and then build segments to match. 

Remarketing Strategies

In marketing we should always be thinking about our audience(s).  And the advantage of web analytics is we learn more about audiences by looking at their behavior on our website and interaction with our marketing channels.  With a well configured Google Analytics implementation we will know what campaigns people came from, the pages and page categories seen and all their conversion activity.  If we have ecommerce setup we will also know our visitors product impressions, add to cart, cart funnel behavior and more...  With video or scroll tracking we can see how users are consumming our content.  All if this will allow us to understand our user's behavior and allow us to better tailor our communication with these users.

So using behavior information we can develop audiences for our remarketing campaigns. 

Here are a few types of users to consider:

  • Add to Cart - no conversion;
  • Watched a demo video;
  • View product detail - no conversion;
  • Regular newsletter or blog reader;
  • Responded to a campaign but did not convert...

For each of these audiences we want to develop an approach that will work for them - sometimes just a reminder is all that is needed; other times a more concrete incentive is needed - a free trial, webinar, demo, coupon, ...  Think of the approach or test the approach to determine what works best for your organization.

Building Segments

Google Analytics has the ability to define segments based on a combination of criteria. You have access to most of the dimensions and metrics within Google Analytics to define your segment.  So based on your overall remarketing strategy think of the combination of dimensions and metrics that will define your Segment and in turn your Audience.  

You may also want to use the Dimension and Metric Explorer to learn more about the available combinations - select the check box, "Only show fields that are allowed in segments", to view the metrics and dimensions.

segment dimension metrics explorer

Once you have the right Dimensions and Metrics - you can build your segment.  At the top of almost every Google Analytics report you will see the "+ Add Segment" link.  Click on this to open the Segment-Builder User Interface.

add segment

Within the Segment Builder you have some pre-defined segments already available - Select the Sytem link in the left hand menu to view these:

system segments

The System Segments will provide some good ideas for segments as well - for example Combining "Converters" with "Mobile Traffic"...  You can view the criteria in each segment by hovering over the segment with your mouse or by selecing the "Edit" link from the "Actions" dropdown.

Or you can start from scratch to builld your own segments - First thing you will want to do is give your segment a good name.  A consistent naming conversion for your organization is helpful - we use a short hand for the organization and then a clear name for the segment.  So say we want a non-converter for my Kayak store - the name would be this:

  • JayKayak - Non-Converter - User

Once you have the name, then the Builder provides pre-defined groups of dimensions and metrics that you can use - when you use these remember that they all are "ANDs" so every criteria you select has to be true for your segment.

You can also use the "Advanced - Conditions" tab of the builder. 

create segment new 

Build Segments - Advanced Conditions

The Advanced Conditions tab of the segment builder allows you to combine dimenstion and metrics to define your segments.  The conditions can combine criteria with AND and OR boolean conditions.  The Summary on the right hand side indicates the percentage of sessions or users defined by your segment during that current time frame.  For example below we have defined a Segment that has added to cart - Product Adds greater than 0 - and have not made a pruchase -  Transactions equal to 0.  (A benefit for this definition of an audience is that users that make a purchase will be automatically dropped from the list - so you will not continue to market to those who have already made a purchase.) 

new segment addtocart nonconverter

Build Segments - Sequences

Another feature of Segments is defining them by a 'sequence' of user actions.

 sequence segment - user path diagram

 

This behavior can be converted to a User based sequence that will span one or more sessions.  Here is a sample of what this looks like:

sequence segment google demo account 

This segment has been built in the Google Analytics Demo Account - feel free to experiment in this view to learn more about segments.

Sharing Segments

Say you have built this segment and now you want to share with co-workers - there are two approaches.  The first is to use the 'Share' seen the Segment Actions dropdown:

google analytics - segment sharing

You then are given a link to share with others - 

 google analytics - share a segment link

The person you share this with can then import into any or all of their Google Analytics views. 

Here is the link to try it now:

https://analytics.google.com/analytics/web/template?uid=VRjsCcL9Q9CEEFvsSa2U4Q

This is a simple way to quickly share segments - however, any changes made to the segment will not be seen in any copies made from this link.  Luckily there is another way to share segments with 'Collaborators' in the same Google Analytics view

Back in our Segment Builder in the upper right hand corner is the link to 'Change' the view visibility:

 segment share view

This allows Collaborators to share the segment with other Collaborators in that view.  (This is one of the reasons it is useful to make all users Collaborators - so they do not end up recreating segments that are already available.  Or worse yet creating 'almost' the same segment - with the resulting confusion with mis-matching results.)

segment view sharing

That wraps up our introduction to Segments - in this article we have been focused on getting to Audiences.  But as you have undoubtably realized - Segments are an amazing tool for analyzing user behavior, session behavior, product / category metrics, ... the list is endless.

Creating Remarketing Audiences

So now that we have our Remarketing Strategy and have Built one or more Great Segments - we want to create and share our Audiences. We are on the home stretch - just a few simple steps ahead:

  1. Make sure our Google Analytics and Google Ads accounts are linked;
  2. Create an Audience; and
  3. Choose your Audience Destination

Link to Google Ads

If you are planning to remarket you may have already completed this step - but for completelness it is included below.  An important first step is the user linking the accounts must have "Admininstrator" level access ot Google Analytics and Google Ads.  (Sometimes when two organizations are responsible for each - one person can be given administrator rights to enable the link and then the right can be disabled.  The link will continue to work.)

In the Google Analytics Admin level - in the Web Property area - click on the "Google Ads Linking" - then elect a "+ New Link Group".

google ads linking new link group

On the next screen we will select the Google Ads account(s) we want to link to this Google Analytics property:

link google analytics google ads

And then on the next step we will select the Google Analytics View(s) to complete the linking:

link google analytics google ads step2

Once this has been accomplished we can link our Audience(s) to the Google Ads and Google Analytics accounts.  Still in the Google Analytics Admin - Web Property links we click on the "Audience Definitions -> Audiences" link to create our Audience.  The firs time through it will look like this:

audience link google ads

Now we have our first Audience!!!  Adding new audiences is easy now that everything is in place.   

On the Segment Page - for Actions - select Build Audience:

build audience from segment

Now in the Google Analytics Administrator - Web Property click on the "Audience Definitions -> Audiences" link and then we will have the "+ New Audience" button:

audience page new audience

and then we can "Import Segment":

 audience page new audience step0

to reach this screen - We have filtered on "Training" segments.  You will see all your segments here:audience page new audience step1

After selecing our segment it is imported to this screen.  We can make further defintions to our Audience here - we can see the number of members of the Audience over the past 7 days (this is a test audience...).  We can also update the Membership Duration to 540 days (about a year and a half...).  We can also setup our Lookback Days for your Audience - choices are 7, 14 and 30 days.  The number of days selected will determine which sessions are used to evaluate our Audience.  So if we use 7 days and our user had viewed the Google Brand Campaign more than 7 days ago they would not be in this audience.  The final attribute is Eligibility - which other integrations this Audience is available to be utilized.

Don't forget to add a descriptive name - we use similar naming conventions as we discussed in Segments.
audience page new audience step2

Now we define the Audience Destination - we will see our integrations available here.  In this case we are using the Google Ads link we created before.

audience page new audience step3

And that is that!  We have defined our Remarketing Strategy - built Segments to define our users and then created Audiences from these Segments!  You will find remarketing a valuable tool for reaching users interested in your brand's products and services.

There are a lot of other additional resources on Remarketing Audiences and audience strategy - hope this helps you get started.

audience page new audience step4

Google Analytics Remarketing Reference

 

 

 

 

 

 

 

 

 

GTM Video Tracking using MediaElement.js

MediaElement.js is one of the most popular video players around especially with WordPress websites.  Check out the latest player statistics here at Built With.

Tracking your video player usage can give you great insight into the videos you are hosting - what topics, creators, length ... of videos people watch.  And how these video views relate to your organization's overall website goals.

Before we begin - credit where it is due - David Vallejo at Thyngster wrote an agnostic tracker for JWPlayer.  We are going to use this same agnostic approach to our MediaElement.js tracking.  The beauty of this is that the Tags and Triggers will work for either player.  (For example, when you have a client using both players on a website - or maybe three players!)

HTML Code

We based this code on David's code for the dataLayer updates and the MediaElement.js API for the events.  Here is the complete code below - and then we'll step through each part.

<script>
(function(){
var i = 0;
// Define at which percentages you want to fire an event
var markers = [25,50,75,90];
var playersMarkers = [];

function findObjectIndexById(haystack, key, needle) {
    for (var i = 0; i < haystack.length; i++) {
        if (haystack[i][key] == needle) {
            return i;
        }
    }
    return null;
}

while (true) {
    var mediaElement = document.getElementsByTagName('video')[i];
    if (!mediaElement.player.id)
        break;
    
    playersMarkers.push({
      'id': mediaElement.player.id,
      'markers': []
    }); 

    mediaElement.addEventListener('play',
        function(e){
            dataLayer.push({
                "event": "video",
                "player_id": this.player.id,
                "interaction": "Play",
                "video_url": this.getSrc(),
                "duration": this.getDuration(),
                "width": this.width,
                "height": this.height,
                "position": this.getCurrentTime(),
                "resolutions": 'not set', // sadly not available is MEJS
                "volume": this.getVolume(),
                "player_type": 'not set'
            });   
        }, false);
  
    mediaElement.addEventListener('ended',
      function(e){
            dataLayer.push({
                "event": "video",
                "player_id": this.player.id,
                "interaction": "Complete",
                "video_url": this.getSrc(),
                "duration": this.getDuration(),
                "width": this.width,
                "height": this.height,
                "position": this.getCurrentTime(),
                "resolutions": 'not set', // sadly not available is MEJS
                "volume": this.getVolume(),
                "player_type": 'not set'
            });   
      }, false);
  
    mediaElement.addEventListener('pause',
      function(e){
            dataLayer.push({
                "event": "video",
                "player_id": this.player.id,
                "interaction": "Pause",
                "video_url": this.getSrc(),
                "duration": this.getDuration(),
                "width": this.width,
                "height": this.height,
                "position": this.getCurrentTime(),
                "resolutions": 'not set', // sadly not available is MEJS
                "volume": this.getVolume(),
                "player_type": 'not set'
            });   
      }, false);

    mediaElement.addEventListener('volumechange',
      function(e){
            dataLayer.push({
                "event": "video",
                "player_id": this.player.id,
                "interaction": "Volume Change",
                "video_url": this.getSrc(),
                "duration": this.getDuration(),
                "width": this.width,
                "height": this.height,
                "position": this.getCurrentTime(),
                "resolutions": 'not set', // sadly not available is MEJS
                "volume": this.getVolume(),
                "player_type": 'not set'
            });   
      }, false);

    mediaElement.addEventListener('timeupdate',
      function(e){
        var percentPlayed = Math.floor(this.getCurrentTime()*100/this.getDuration());
        var playerMarkerIndex = findObjectIndexById(playersMarkers,'id',this.player.id);
       
        if(markers.indexOf(percentPlayed)>-1 && playersMarkers[playerMarkerIndex].markers.indexOf(percentPlayed)==-1)
        {          
            playersMarkers[playerMarkerIndex].markers.push(percentPlayed);
            dataLayer.push({
                "event": "video",
                "player_id": this.player.id,
                "interaction": "Progress " + percentPlayed + "%",
                "video_url": this.getSrc(),
                "duration": this.getDuration(),
                "width": this.width,
                "height": this.height,
                "position": this.getCurrentTime(),
                "resolutions": 'not set', // sadly not available is MEJS
                "volume": this.getVolume(),
                "player_type": 'not set'
            });             
        }       
      },
	false);  
    i++;
}    
})();
</script>

The initial lines of this JavaScript is used to initialize the Media Element Player(s) on the page and the Percent Progress updated in the dataLayer.


var i = 0;
// Define at which percentages you want to fire an event
var markers = [25,50,75,90];
var playersMarkers = [];

function findObjectIndexById(haystack, key, needle) {
    for (var i = 0; i < haystack.length; i++) {
        if (haystack[i][key] == needle) {
            return i;
        }
    }
    return null;
}

Let's run down how each variable / function is used in the code:

  • i is used to scroll through each video Media Element player on the page.
  • markers - sets the percentage progress to set the dataLayer.  To add new or remove existing percentages edit this variable.
  • playersMarkers - this is an array of objects that stores the player's id and percentage that has been set.  
  • findObjectIndexById - is a function used to search for the index of a key using the needle input.  It is used to maintain the playersMarkers array for each player and the percent progress (markers) set in the dataLayer.

Now for the start of the 'while' loop.

while (true) {
    var mediaElement = document.getElementsByTagName('video')[i];
    if (!mediaElement.player.id)
        break;
    
    playersMarkers.push({
      'id': mediaElement.player.id,
      'markers': []
    }); 

Well it starts with a 'while(true)' so we are going to continue to loop through this code while this script is loaded.

  •  mediaElement is our current 'video' element - it is where we will access the player and all the player values via the MediaElement API.  If you wanted to track MediaElement Audio - simply change the 'video' to 'audio' and the dataLayer events to 'audio' and you are now tracking audio files as well.  (Sure someone out there will figure out a good way to do this in a single file!)
  • Next in the if statement we check to see if the mediaElement player has been initialized - if not we break out of the code.
  • playersMarkers.push - adds the player(s) id to the array and initializes the markers for that id with an empty array.

The next parts of the code are blocks for the MediaElement API events - each one looks like this:

<script>
    mediaElement.addEventListener('play',
        function(e){
           // do some good stuff here
        }, false);

We will add listeners for each event we want to track - this is for the 'play' event.  This code will track for each of these events:

  • Play - when ever someone clicks on the play button.  (The position (currentTime) is also sent back so you can differentiate the first 'play' with position = 0 from a play at other points.
  • Ended - when the player reaches the end.
  • Pause - when the user clicks on the player's pause button.
  • Volume Change - when the user raises or lowers the volume for the video player.
  • Time Update - this is the event the code checks for the progress and sets the dataLayer when we reach a progress point in our markers array.

Now let's break down the dataLayer push:

dataLayer.push({
   "event": "video",
   "player_id": this.player.id,
   "interaction": "Volume Change",
   "video_url": this.getSrc(),
   "duration": this.getDuration(),
   "width": this.width,
   "height": this.height,
   "position": this.getCurrentTime(),
   "resolutions": 'not set', // sadly not available is MEJS
   "volume": this.getVolume(),
   "player_type": 'not set'
});   

Again we are using the agnostic dataLayer updates from David's JWPlayer GTM Tracker post so send back the same variables - with values from the MediaElement player.  You will see that the MediaElementPlayer does not support all the data available in the JWPlayer - so we have put in everybody's not favorite 'not set' value.  They are:

  • event - we use video for all updates - we can then create a custom event trigger to fire on 'video'.  (Again a tracker for an Audio player could have an 'audio' event value. 
  • player_id - the id for that player.  (There can be multiple players on a page.)
  • interaction - the interaction for the cooresponding MediaElement event - so play for play, pause for pause, progress % for timeupdate...
  • video_url - the URL where the video is hosted.  (You may want to write a bit of JavaScript to remove the query string parameters prior to reporting.)
  • duration - the time in seconds to watch the full video.
  • width - width of the player in pixels.
  • height - height of the player in pixels.
  • position - the current position of the player in seconds when the dataLayer is updated.
  • resolutions - not available in the MediaElement player API.  (Or I could not find it - suggestions welcome!)
  • volume - a value between 1 and 0 for the current volume when the dataLayer is updated.
  • player_type - same as resolutions not available in the MediaElement player API.  (Or I could not find it - suggestions welcome!)

There is quite a bit more information you could included in this dataLayer update from the MediaElement API - so feel free to add your favorite variable(s) as well.

A quick note on the code in the timeupdate event:

        var percentPlayed = Math.floor(this.getCurrentTime()*100/this.getDuration());
        var playerMarkerIndex = findObjectIndexById(playersMarkers,'id',this.player.id);
       
        if(markers.indexOf(percentPlayed)>-1 && playersMarkers[playerMarkerIndex].markers.indexOf(percentPlayed)==-1)
        {          
            playersMarkers[playerMarkerIndex].markers.push(percentPlayed);

The first line calculates the percent played using the video Duration and CurrentTime. Then it uses the findObjectIndexById to check to see if we have recorded a dataLayer event for this player and percentage combination. If not our statement is true in the if statement. And then we update the playersMarkers for that player ID - playerMarkerIndex with the percentPlayed. This nifty logic ensures we only send back a percentPlayed once for each marker and each player.

GTM Sample Implementation

This dataLayer update is agnostic so can be used for a Google Analytics event, Conversions (say on 90% progress...), you name it.  To wrap up this post I will include a sample Google Analytics Event with the Variables, Trigger and Tag.

Variables

All the data is in the dataLayer so really simple series of dataLayer variables:

 GTM MediaElementTracker Position DataLayer

GTM MediaElementTracker VideoStatus DataLayer

GTM MediaElementTracker VideoURL DataLayer

Data Layer Variables with the exact names from above... So pretty easy! 

And to stick with the easy theme - our Trigger:

GTM MediaElementTracker Video Trigger

and then we can send this back to Google Analytics with this tag:

GTM MediaElement Player Google Analytics Video Tracking Tag

In this example we are removing the Query String parameters from our Video URL using this simple JavaScript Variable:

GTM MediaElement Player Video URL No Query String JavaScript

Summary

Hope you found this useful and that it also gives you ideas on how to extend this or other useful scripts out on the web!  Would love to hear from you about how you used this and any future topics you would like to see.

All the Best!

 

 

 

Scroll tracking as a useful gauge of your audience and their interest in website content.  GTM scroll tracking is supported with built in triggers and variables.  

So it is time to update an old blog article - the twist we will add is custom dimension to track users who scroll through your page quickly (Scanners) who take time to fully read your content (Readers).  How do we tell a scanner from a reader - we pick an approximate time to read - 30 seconds, 60 seconds... and use that in our implementation.  This idea is all based off of Justin Cutroni's great article - Advanced Content Tracking with Universal Analytics.

scroll reader scanner

Scroll Triggers

GTM scroll tracking trigger

The built in Scroll Depth trigger allows us to track scrolling by percent or by pixel.  (Similar to the YouTube video tracking trigger.)  In this example we have set the value of 25, 50, 75 and 100% for the depth our trigger will fire.

We also can set when we want to enable this trigger - in this case we have selected the built in Window Load event (gtm.load).  And you could fire this on every page - but in this case we are primarily interested in the blog articles so we have set to some pages.  Since our blog articles all start with '/blog' we are all set.

Scroll and Timer Variables

First we will configure the built in scroll variables.  The three below are:

  • Scroll Depth Threshold - this holds the numeric value of the users scrolling - so it could be percent or pixels depending on the Scroll Depth trigger settings.
  • Scroll Depth Units - can have a value of Percent or Pixel to indicates the Scroll Depth Threshold measurement units.
  • Scroll Direction - allows for either vertical scroll depths or horizontal scroll depths.  Imagine a horizontal slide show...

 GTM scroll tracking variables

We also want to track who is reading or scanning our articles.  However, there is not a built in scroll tracking timer wo we need to create one using basic JavaScript and create in a HTML Tag:

GTM scroll tracking timer

We fire this tag on the pageview event - but if you wanted to get fancy it could be setup to start on the Scroll Threshold Depth = 0.

<script>
var timerValue = 0;
// Create a timer that updates every second
intervalId = setInterval(function(){
  timerValue += 1;
}, 1000);
</script>

And then to access the timer value variable in our tags we create a JavaScript variable:

GTM scroll tracking timer variable

(You may want to rename this variable in the JavaScript and here to avoid it conflicting with any other variable names...  the problem with Global Variables!!!)

And then a Custom Javascript variable to calculate the User Reader Type Custom Dimenension:

GTM scroll reader type variable

The logic is when the user has scrolled to the end of the article - did they scroll quickly defined as less than 60 seconds or take longer than 60 seconds.  We'll define the first user a Scanner and then second type of user a Reader.  And then we will include this in our GA Settings variable to send this custom dimension back with our scroll event.

Here is the code:

<script>
function() {
 if ({{Scroll Depth Threshold}} === 100) {
   if ({{JS - Timer Value}} >= 60) {
     return 'Reader';
     }
   else {
     return 'Scanner';
   }
 }
}
</script>

If you change the {{Scroll Depth Threshold}} to a different value - say '90' don't forget to update this check here.

 

Include this new 'JS - Reader Type' in the correct custom dimension. You can see that below in our Custom Dimension #1 - but your implementation may vary.

GTM scroll ga settings variable

GTM Scroll 

Everything is now in place for our Google Analytics Event tag.

GTM scroll ga event tag

  • Tag Type is a Universal Analytics
  • Track Type - Event
  • Category - Scroll Tracking, but you can set this to whatever makes sense for your reporting
  • Action - Page URL here but sometimes Scroll Depth Threshold makes sense, again this depends on your reporting.
  • Label - Scroll Depth Threshhold sometime people also like to include the Scroll Unit of percent or pixel
  • Non-Interaction Hit - the variable here is set to false - we are defining this as an Interaction.  Keep in mind that interaction will change your bounce rate - so a user that comes to a page and scrolls to the first threshold will not be a bounce.
  • Google Analytics Settings - we use our GA Settings Variable which includes the Reader Type variable for our custom dimension.

 

 

Time to update an old post on tracking YouTube Videos with the built in Google Tag Manager variables and triggers.  Google has made it very easy to track videos when they are embedded on your website.

Variables

We can start in any order we prefer so let enable the variables first.  First let's configure the built in variables.  We only select the ones we want - it helps a little with performance and there is no need to clutter our workspace with unused variables:

Google Tag Manager Configure Video Variables

The variables we will configure provide this information:

  • Video Provider - in this case it will always be 'youtube' since this is a youtube tracking variable.
  • Video Status - this is the status of our video used by the trigger and available for our tag.  So 'play', 'pause', 'progress', 'complete', 'pause', 'seek', and 'buffer'
    • The 'progress' status is for percent or time progress.
    • 'pause' indicates the user has clicked on the Pause button - you can use the current time or percent to see when people are clicking this button.
    • 'seek' indicates when people click to move back or forward in your videos.  Again the current time or percent will indicate where people have moved to in your video.
  • Video URL - the YouTube URL for the embedded video.
  • Video Title - The title of the video in YouTube.  I like to use this in a Google Analytics event 
  • Video Duration - the total duration of the video in seconds.
  • Video Current Time - this is the current time in seconds when the video status is updated.  So at 'play' it will be 0 seconds, at the 'pause' and 'seek' statuses you can use this variable to see when people are pausing or skipping.
  • Video Percent - the percentage at a specific status.  The 'progress' status will fire at your predefined percentages (or times).
  • Video Visible - 'true' when the user is viewing the video.  (Not the same as an element visible variable - which is true if the video is visible within the browser window.)

Trigger

Then we will want to created our trigger:

Google Tag Manager Configure Video Trigger

In the Trigger there are a lot of interesting options.

  • The Capture options let us choose when this trigger will fire.
    • Start records when the start button is clicked.
    • Complete when the video is watched to the end.
    • Pause, Seeking, Buffering will fire when a user clicks on the pause button, clicks to scroll forward or back in a video (Seeks) and if the video is buffering when playing.
    • Progress - can fire on percent progress or duration time in seconds progress - we typically prefer percentage as this will work for long and short videos without having to alter the trigger.  But if say all your videos are 40 minutes or 30 seconds the time thresholds may work well for you.
    • Add JavaScript API support - this is provided in case the YouTube API is not loaded on the webpage already.  The trigger and variables require this API to function properly.
    • All Videos / Some Vidoes - this radio button will allow you to track all videos or just specific videos or groups of videos.  The Some Videos provides the standard GTM variables and criteria to fine tune your tracking.

Tag (and one more Variable!)

So now we have everything set to send information back to Google Analytics - but we have one more variable to create.  We want to combine our Status and Percent into a single variable to send back in the Google Analytics Event field.  A table lookup variable comes to the rescue here:

GTM Video Tracking Status Variable

So you can see in this variable Video Status for GA we are returning the Video Percent value and adding the '%' symbol for 'progress' status.  IOtherwise we are returning the Video Status value.  If we are using Video Time Thresholds instead of Video Percent we would change this variable to return the Video Current Time (which is in seconds).

Now we can create our tag:

 GTM YouTube Video Tracking GA Event Tag

We are using a Google Analytics event tag to send back our YouTube tracking.  For our category we use 'video' so all our videos can be viewed in a single main category.  In your case you may want different categories - it will all depend on how you want to report your video view metrics.

Next we use our new 'Video Status for GA' variable for our Event Action.  And then for the Event Label field we send back the Video Title and Video URL.  (If you show the same video on different pages - you may want to include the Page URL in the Label field in place of the Video URL.)

A Preview of our GTM contain for a quick test should confirm that this works.

Monday, 02 December 2019 20:12

How to delete Goals in Google Analytics?

Short Answer - You cannot.  Goals cannot be deleted in Google Analytics.  Well there goes the bounce rate for this article!

Before you hit the back button to look for a 'better' answer let's review the options.

This might also be a perfect time to review your overall approach to tracking website goals and key performance indicators.  This article from Avinash Kaushik Digital Marketing and Measurement Model will help you think through how to align Google Analytics goals with your overall website and business goals. 

Google Analytics Views can have up to 20 Goals.  These goals cannot be deleted but there are steps you can take to make the most of what Google Analytics has to offer. 

Let's assume we have a couple goals like this:

Google Analytics Can I Delete Goals

So what are our options?  Well there are a few things you can do - disable the goals that are no longer useful, create a new view or repurpose goals .

If we have not yet reached the 20 goal limit we can disable our old non-recording goals and create new goals.  If we have reached our limit then maybe it is time to start fresh with a new view and new goals.  And in certain cases maybe we can repurpose an existing goal (but read first to make an informed decision).

Disabling Goals

We can turn them off so they do not record the goals any longer.  It is a simple process open up the Google Anlaytics -> Admin -> View - Filters and click on the Recording switch to off.  This will clean up all the Google Analytics reports that show goal information:

Google Analytics Can I Delete Goals? How to turn off recording.

Create a New View

When you are out of goals in a view then creating a new view is an excellent approach.  At the same time other updates can be made as well - filtering out internal traffic, linking to Google Ads, Search Console and other Google Tools.  Maybe linking other websites using sub-domain or cross-domain tracking is on the list too!  Basically any of the View configurations that will help improve data overall can be done as a part of configuring a new Google Analytics View.

Wait what about my historical data!?  Well yes that can be a pain to have to make this change, You can always go back to your earlier view for historical data - using the API or Data Studio to show both the old and new data.  And again it is a great time to make a clean start.  And you will be amazed at how quickly the time passes. 

Create New Goals

Once you know what you want to record for your goals consider all the goal types available - the two we use the most are Event Goals and Destination Goals.

Here is a the Event Goals details page:

Google Analytics Can I Delete Goals Event Goal

We can use the Event Category, Action, Label and Value as a part of our goal conditions.  We also have the conditions of Equals to, Begins with and Regular Expression - so a lot to work with here for our goal creation.

One great way to use goals is to capture the goal detail in the Event - so on a registration form (as we show in our 'repurpose' example below) capture detail about the location, price, user details.  This can be stored in the Event fields or create custom dimensions for this information.  And then with the Top Events reports or custom report will allow you to view the detail information.  And your Goal will provide the 20,000 foot level KPIs.

and of course do not forget about our stand by Destination Goal:

Google Analytics Can I Delete Goals Destination Goal

We have the same conditions as our event goal.  So again a lot of flexibility built into Google Analytics.

There are also the Duration, Pagesper Session and Smart Goals - we do not use these as often.  But the detail to create them is available in the Google Analytics Help pages.

Repurpose Goals

Another approach is to change or repurpose an existing goal.  This will allow us to maintian our view history.

IMPORTANT NOTE Google does not recommend this approach.  The reason is that the historical information stil reflects to old goal configuration so users of the data can be confused by the old and new goal data showing in a report.  We will illustrate this repurposing - but starting a New View is our go to recommendation.

Let's show how to do this with an example, we initially created a goal for an Event in New York City, but we host events all over the world.  We would run out of goals very quickly - what we decide is to create a new goal for all our regstrations - so starting with this:

Google Analytics Can I Delete Goals correct old destination

We repurpose our goal details to this:

Google Analytics Can I Delete Goals correct destination updated

We changed the goal name from "New York Registration" to "Website Registrations" so we will know exactly what we are seeing in the future.  We also change the destination from "/thank-you-nyc" which would only work for New York events and made it generic.  Now any page that starts with "thank-you" will record this event.  (There are multiple alternatives to goals - for example a generic event goal could be created while recording the city information in the event as well.)

Important Note: This goal will only record the "Website Registrations" from the time you update this goal - so the historical data will still show NYC Registrations  

 Google Analytics Can I Delete Goals correct destination annotation

Summary

So now you know what to do if you run out of goals.  But more importantly - stepping back to develop a measurement plan that focuses on a Key Performance Indicators will helps us avoid this issue completely.

With these new higher level goals we will see an overall indication of website health.  

Google Analytics Can I Delete Goals Acquisition New Goal

And using the Google Analytics reports we will aslo be able to dive into the detail to view the effectiveness of our various Channels, Campaigns, Ad Groups:

Google Analytics Can I Delete Goals Acquisition New Goal AdGroup

With that conversion rate we need to put a little more money in our Rental House Ad Group!

 

 

Page 1 of 2