6 Google Analytics Reports That Will Bring Every SEO Lots of Cheer! by @annaleacrowe

6 Google Analytics Reports That Will Bring Every SEO Lots of Cheer! by @annaleacrowe

6 Google Analytics Reports That Will Bring Every SEO Lots of Cheer! by @annaleacrowe

The holidays are all about tradition and bringing cheer to your family, friends, and clients. For me, that applies to the Google Analytics metrics I have come to know and love when sending my clients their monthly reports. For most of us, the holidays are the all-too-short-lived time where families gather ’round a tree, get and give gifts we may or may not use, and eat a harvest of homemade food. For others, the more data-driven geeks like myself, that slew of holiday treats takes second place to the festive findings of my Google Analytics dashboards.

Whatever you’re looking forward to this holiday season, I’ve got some easy Google Analytics reports for my SEO marketing friends that will make your extra two-and-half days off a little more om. Ahead, find 6 Google Analytics reports that brought me lots of cheer for this year during this cornucopias gourd filled fall season. Hint: You may want to add these to your wishlist!

Before I dive into the details of Google Analytics reports, I wanted to share an overview of factors and metrics I consider before building my report. These vary from person-to-person and brand-to-brand.

Before We Begin

First, what metrics align with your overall business goals? Google Analytics reports give you an overview of your website and business health. What metrics are important to your client? Here is a snapshot of what I take into consideration for the majority of my clients:

  • Organic Traffic tells you the number of users who have visited your site organically (unpaid) whether through Google, Bing, or another search engine.
  • Referral Traffic tells you the number of users who have visited your site outside of search engines. Referral traffic is also a good identifier of how your content and brand visibility is performing off-site.
  • Organic Conversions tells you how your content, landing pages, and user experience are performing.
  • Referral Conversions tells you the sites you are getting the most external traffic from. Yes, you can do this with UTM parameters, but referral conversions give you a wide scoping view.

Next, take a look at the timeframe you want to monitor. For example, I monitor reports on a 28-day period so each month is consistent. And, the same goes for quarterly. I use 90-day period for my quarterly reports.

Lastly, how do you plan to track your SEO growth? I prefer to track my progress week over week to compare a chosen period against the previous year. But, others prefer a snapshot view with no previous history data to compare.

Now, let’s dig in a little deeper to discover what SEO reports I use regularly to track my performance and show proof in SEO value.

1. Year-Over-Year Organic Traffic

How to Build This Report:

1. Go to Acquisition > All Traffic > Organic Search

yoy organic traffic_Google Analytics

2. Click Customize in the top left corner of the screen.

3. Create a new custom report named “Organic by Month.” The Metric Groups should read “Sessions,” “Goal Conversion Rate,” and “Goal Completions.” While “Month of Year” should be selected in Dimension Drilldowns. And, lastly, the Filters should include “Medium” + “Exact” + “Organic.”

yoy organic traffic custom report_Google Analytics

4. You should get a month-over-month (MoM) comparison.

MoM comparison in Google Analytics

5. Export each year to Google Sheets and combine the two sheets.

6. Then, you can create a Google chart to begin identifying trends and patterns year-over-year. Here is the Google Sheet template I used. 

analytics year over year organic search in google sheets

What This Report Tells You:

The loss of organic traffic fear is real, especially when it comes to your personal website or client’s site. Surely, the best practice is to monitor your data regularly, checking real-time data, analyzing new vs. return visitors, or referral traffic. But once you see your organic traffic slowly drip into a downward pattern, are you sure you were monitoring the right data?

Unfortunately, “out of sight, out of mind” does not apply to tracking your organic traffic. Was the drop from seasonality? Or, did a competitor launch a new campaign?

As you can see from the example above, traffic is above the previous year, but it does decrease toward the end of the year. This helps us to normalize traffic each year. And, you can compare this year’s traffic as a percentage of last year’s traffic.

Here’s an example below:

Google Analytics Organic YoY Percentage Reports

The decrease in traffic has its surprise drops; it’s not very regular. There’s a significant decrease in May and again in October, which could be seasonality or SEO visibility. Regarding SEO visibility, this could be a change in J-SON, PPC, or keyword positioning. I’d suggest digging deeper to identify the concerns for your client.

Bonus Tip:

If you want to take your organic traffic year-over-year reports to the next level, upload your data from above into Distilled Forecaster tool. This tool will help you predict future traffic levels based on your historical data. And, it will help you map out your on-site technical SEO recommendations. For example, if you’re planning to redo the metadata in Q1 of next year, your changes may affect the overall site traffic.

Distilled_Forecaster SEO Organic traffic

2. Scroll Depth Tracking

How to Build This Report:

  1. Your website must already be connected to Google Tag Manager.

2. Open Google Tag Manager, click “Add a New Tag.”

GTM Add New Tag

3. In Tag Configuration, click “Custom HTML.”

Custom HTML Tag Configuration in GTM

4. Copy and paste this code by Rob Flaherty.

<script>
/*!
 * @preserve
 * jquery.scrolldepth.js | v0.4.1
 * Copyright (c) 2014 Rob Flaherty (@robflaherty)
 * Licensed under the MIT and GPL licenses.
 */
;(function ( $, window, document, undefined ) {
   
  "use strict";
 
  var defaults = {
    elements: [],
    minHeight: 0,
    percentage: true,
    testing: false
  },
 
  $window = $(window),
  cache = [];
 
  /*
   * Plugin
   */
 
  $.scrollDepth = function(options) {
     
    var startTime = +new Date;
 
    options = $.extend({}, defaults, options);
 
    // Return early if document height is too small
    if ( $(document).height() < options.minHeight ) {
      return;
    }
        
     // Get some information about the current page
    var pageTitle = document.title;
        
    // Establish baseline (0% scroll)
    sendEvent(pageTitle,'Baseline');
 
    /*
     * Functions
     */
 
    function sendEvent(action, label, timing) {
      if (!options.testing) {
 
        if (typeof(dataLayer) !== "undefined") {
          dataLayer.push({'event':'ScrollDistance', 'eventCategory':'Reading', 'eventAction': action, 'eventLabel': label, 'eventValue': 1, 'eventNonInteraction': true});
 
          if (arguments.length > 2) {
            dataLayer.push({'event':'ScrollTiming', 'eventCategory':'Reading', 'eventAction': action, 'eventLabel': label, 'eventTiming': timing});
          }
        } else {
 
          if (typeof(ga) !== "undefined") {
            ga('send', 'event', 'Reading', action, label, 1, {'nonInteraction': 1});
 
            if (arguments.length > 2) {
              ga('send', 'timing', 'Reading', action, timing, label);
            }
          }
 
          if (typeof(_gaq) !== "undefined") {
            _gaq.push(['_trackEvent', 'Reading', action, label, 1, true]);
 
            if (arguments.length > 2) {
              _gaq.push(['_trackTiming', 'Reading', action, timing, label, 100]);
            }
          }
        }
 
      } else {
        $('#console').html(action + ': ' + label);
      }
    }
 
    function calculateMarks(docHeight) {
      return {
        '25%' : parseInt(docHeight * 0.25, 10),
        '50%' : parseInt(docHeight * 0.50, 10),
        '75%' : parseInt(docHeight * 0.75, 10),
        // 1px cushion to trigger 100% event in iOS
        '100%': docHeight - 1
      };
    }
 
    function checkMarks(marks, scrollDistance, timing) {
      // Check each active mark
      $.each(marks, function(key, val) {
        if ( $.inArray(key, cache) === -1 && scrollDistance >= val ) {
          sendEvent(pageTitle, key, timing);
          cache.push(key);
        }
      });
    }
 
    function checkElements(elements, scrollDistance, timing) {
      $.each(elements, function(index, elem) {
        if ( $.inArray(elem, cache) === -1 && $(elem).length ) {
          if ( scrollDistance >= $(elem).offset().top ) {
            sendEvent('Elements', elem, timing);
            cache.push(elem);
          }
        }
      });
    }
 
    /*
     * Throttle function borrowed from:
     * Underscore.js 1.5.2
     * http://underscorejs.org
     * (c) 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
     * Underscore may be freely distributed under the MIT license.
     */
 
    function throttle(func, wait) {
      var context, args, result;
      var timeout = null;
      var previous = 0;
      var later = function() {
        previous = new Date;
        timeout = null;
        result = func.apply(context, args);
      };
      return function() {
        var now = new Date;
        if (!previous) previous = now;
        var remaining = wait - (now - previous);
        context = this;
        args = arguments;
        if (remaining <= 0) {
          clearTimeout(timeout);
          timeout = null;
          previous = now;
          result = func.apply(context, args);
        } else if (!timeout) {
          timeout = setTimeout(later, remaining);
        }
        return result;
      };
    }
 
    /*
     * Scroll Event
     */
 
    $window.on('scroll.scrollDepth', throttle(function() {
      /*
       * We calculate document and window height on each scroll event to
       * account for dynamic DOM changes.
       */
 
      var docHeight = $(document).height(),
        winHeight = window.innerHeight ? window.innerHeight : $window.height(),
        scrollDistance = $window.scrollTop() + winHeight,
 
        // Recalculate percentage marks
        marks = calculateMarks(docHeight),
 
        // Timing
        timing = +new Date - startTime;
 
      // If all marks already hit, unbind scroll event
      if (cache.length >= 4 + options.elements.length) {
        $window.off('scroll.scrollDepth');
        return;
      }
 
      // Check specified DOM elements
      if (options.elements) {
        checkElements(options.elements, scrollDistance, timing);
      }
 
      // Check standard marks
      if (options.percentage) {        
        checkMarks(marks, scrollDistance, timing);
      }
    }, 500));
 
  };
 
})( jQuery, window, document );
jQuery.scrollDepth();
</script>

GitHub has some additional data on coding your scroll depth.

2. Choose how to display your scroll depth. Some users prefer percentages (10%, 25%, 50%, 75%, 100%) and others choose labels like Article Loaded, Start Reading, Content Bottom, etc. This particular code uses percentages, but you can change the naming conventions if needed. Here is the scroll tracking code for that by Justin Cutroi:

<script>
jQuery(function($) {
    // Debug flag
    var debugMode = false;

    // Default time delay before checking location
    var callBackTime = 100;

    // # px before tracking a reader
    var readerLocation = 150;

    // Set some flags for tracking & execution
    var timer = 0;
    var scroller = false;
    var endContent = false;
    var didComplete = false;

    // Set some time variables to calculate reading time
    var startTime = new Date();
    var beginning = startTime.getTime();
    var totalTime = 0;
    
    // Get some information about the current page
    var pageTitle = document.title;

    // Track the aticle load
    if (!debugMode) {
        ga('send', 'event', 'Reading', pageTitle,'Article Loaded', {'nonInteraction': 1});
    } else {
        alert('The page has loaded. Woohoo.');    
    }

    // Check the location and track user
    function trackLocation() {
        bottom = $(window).height() + $(window).scrollTop();
        height = $(document).height();

        // If user starts to scroll send an event
        if (bottom > readerLocation && !scroller) {
            currentTime = new Date();
            scrollStart = currentTime.getTime();
            timeToScroll = Math.round((scrollStart - beginning) / 1000);
            if (!debugMode) {
                ga('send', 'event', 'Reading', pageTitle,'Start Reading', timeToScroll, {'metric1' : timeToScroll});
            } else {
                alert('started reading ' + timeToScroll);
            }
            scroller = true;
        }

        // If user has hit the bottom of the content send an event
        if (bottom >= $("#authorTemplate").scrollTop() + $("#authorTemplate").innerHeight() && !endContent) {
            currentTime = new Date();
            contentScrollEnd = currentTime.getTime();
            timeToContentEnd = Math.round((contentScrollEnd - scrollStart) / 1000);
            if (!debugMode) {
                 if (timeToContentEnd < 60) {
                    ga('set', 'dimension1', 'Scanner'); 
                } else {
                    ga('set', 'dimension1', 'Reader'); 
                }
                ga('send', 'event', 'Reading',pageTitle,'Content Bottom', timeToContentEnd, {'metric2' : timeToContentEnd});
            } else {
                alert('end content section '+timeToContentEnd);
            }
            endContent = true;
        }

        // If user has hit the bottom of page send an event
        if (bottom >= height && !didComplete) {
            currentTime = new Date();
            end = currentTime.getTime();
            totalTime = Math.round((end - scrollStart) / 1000);
            if (!debugMode) {
                ga('send', 'event', 'Reading', pageTitle,'Page Bottom', totalTime, {'metric3' : totalTime});
            } else {
                alert('bottom of page '+totalTime);
            }
            didComplete = true;
        }
    }

    // Track the scrolling and track location
    $(window).scroll(function() {
        if (timer) {
            clearTimeout(timer);
        }

        // Use a buffer so we don't call trackLocation too often.
        timer = setTimeout(trackLocation, callBackTime);
    });
});
</script>

3. Choose how you want the scroll depth to work. Do you want to send an event after the user scrolls 200 pixels? You can change the value to whatever works best for you. If you’re comfortable with coding, you can edit this in code in this area above (just be sure to select the remaining areas):

ga('send', 'event', 'Reading', pageTitle,'Article Loaded', {'nonInteraction': 1});

4. Under “Triggers,” add “All Page View.”

GTM triggering for scroll depth tracking
6. Go to Variables > New (under User-Defined Variables) > Data Layer Variable. Then, add eventCategory. And repeat this step for eventAction; eventLabel; eventValue.

GTM variables data layer variable

data layer variable in GTM

7. Head back to the Tags > New > Google Analytics (choose depending on Classic or Universal). It should look something similar to the below:

google analytics tracking code in GTM

9. Under that same Tag, go to Triggers > Custom Event. Then, give it a name.

GTM custom events scroll depth

To make sure your GTM code is firing view, go to Behavior > Events > Top Events > Scroll Tracking in Google Analytics. It should look something like this:

event tracking percentages in Google Analytics

If this sounds like mumbo-jumbo to you, then stick to something like Crazy Egg’s Scrollmap tool.

What This Report Tells You:

Let’s just come out and say it — do you know if people are reading your content? Or, looking at all your products?

Once you add Scroll Depth tracking, you can identify if users are making it to the bottom of your page. Scroll Depth tracking is essential if you have a one-page website or a super long great homepage. Knowing your scroll depth can help structure and prioritize relevant site information at the top if the majority of users aren’t scrolling down. For example, if your higher priced products are at the bottom, you may want to reorganize them to mingle with the lower priced items. Scroll Depth tracking allows you further develop your pages with proper content placement.

Bonus Tip:

You want to pair Scroll Depth tracking with other metrics like advanced click event tracking, pageviews, bounce rate, time on page, and other engagement metrics to track interactions and performance. You can set this up with micro conversions in Google Analytics. Your goal should look something like this:

Now, you can see that every session (or visit) that a user scrolls more than 75% is now recorded as a conversion. This tells me these users are engaged in site design and content.

3. Micro Conversion Tracking

How to Build This Report:

  1. Identify your micro conversions. This is different for every site. I would suggest creating micro conversions if you have downloadable files, a newsletter, create an account or an add to cart function. You may need to create a ‘Thank You’ page to begin tracking these conversions. Here’s an example from SEJ.
  2. Set up goal tracking in Google Analytics. Again, depending on your micro conversion, this process will be different.

Analytics Set Up Goals

  1. Verify your goal and watch the numbers start rolling in.

What This Report Tells You:

Micro conversion tracking shows you the steps a user takes before converting. It will allow you to see patterns that users frequently do before they purchase your product or contact you.

Measuring micro conversions are just as important as measuring macro conversions (the purchase). The more know what the users are doing before they buy, the more you can give them and optimize your site further.

Here are a few examples of micro conversions:

  • Comment on an Instagram post
  • Sign-up for your newsletter
  • Read a blog post
  • Download a size chart

Here are some ideas of macro conversions:

  • Purchasing a product
  • Contacting us

Micro conversions help lead you down the conversion funnel more accurately. Glenn Gabe talks more about conversion goals in Google Analytics.

Bonus Tip:

Once you have a good grasp on micro conversions, start assigning a dollar value to the micro conversions.

For example, if 100 users are signing up for your newsletter and 50 users to watch your product videos, but users who watch your product videos are more likely buy your product, they have a higher conversion rate. Once you have the conversion rate, you can attach an average order value to determine where to spend your budget.

Here’s an example of the formula I would use:

Average value of watching a product video = Revenue generated by users who watched the video / number of videos.

4. Organic Landing Page Traffic

How to Build This Report:

  1. Head over to Google Analytics > Acquisition > Channels > Organic Search.
  2. Add the secondary dimension of “Landing Page.”

google analytics landing page

What This Report Tells You:

When you’re able to match up your keyword terms with your landing pages, you’re able to work around the (not provided) issue. Now, instead of compensating for keyword data, you’re getting a holistic view of how pages on your website are performing. If your click-through rate is low and your bounce rate is high, you may want to consider working with a web designer to update your site. Or, if your bounce rate is high (depending on the site, I’m looking for anything over 75%), then you may want to consider rewriting the page to reflect more accurate search queries.

Bonus Tip:

If you take this a step further by using the “Landing Page” as your primary dimension. Then, add “Page Depth” as your secondary dimension. With this view, you’ll have an even better perception on which pages are driving high-quality traffic. Understanding what pages are pushing users to click around your site more will help you grasp what type of content your users want.

5. Multi-channel Funnels Assisted Conversions

How to Build This Report:

  1. In Google Analytics, go to Conversions > Assisted Conversions.

google analytics assisted conversions
2. Create a new segment including any interaction from Organic Search and excluding the last interaction from Organic Search.

google analytics organic search segment

What This Report Tells You:

Multi-channel Funnel (MCF) reports helping you identify first and last click attribution. In a short version, MCF reports show you what interactions your customers are taking before they complete a goal.

MCF reports are impressive for direct traffic since direct traffic isn’t correctly attributed in the main channel reports. They give you a wider scope of what is happening on your site. As an SEO consultant, I want to know what campaigns are contributing to the success or failure of my client’s website. SEO converts users, but it also assists in conversions, so I want to know what’s working and what’s not, especially for my e-commerce clients. Typically with e-commerce, I won’t see a first-time visitor convert, but with MCF reporting I can more accurately evaluate what channels are working.

When you add the new segment to determine the true value of organic search, you can see the assisted conversions and the assisted conversion value.

Bonus Tip:

It’s important to note that MCF tracking only gives us 30 days while Acquisition reports give you way more data. To fix this, change your default settings to 90 days. It will give you more data to work with and let you look at the bigger picture.

90 days google analytics assisted conversions

6. Organic Traffic Keyword Value

How to Build This Report:

  1. In Google Analytics, go to Behavior > Site Search > Search Terms and export the data. If you have Google Search Console connected, you can also check out Acquisition > Search Console > Queries to connect the dots in your data.
  2. Go to Google Keyword Planner and upload your data under “Get search volume data and trends.”

google keyword search and google analytics

  1. Use the “Suggested bid” to give value to your search terms.

What This Report Tells You:

Giving a dollar value to your keyword terms that are already driving traffic to your site helps your client visualize the worth of your SEO strategy. It’s one thing to tell a client about their domain authority, traffic, and conversions from organic traffic, but it’s a whole other ball game when you can show your blog post positioned around a keyword term brought in the majority of money last month.

Bonus Tip:

To display this data, create a spreadsheet listing impressions, clicks, cost-per-click (from the ‘Suggested bid” above) and total value.

Keyword Organic Value

Your Turn

Okay, you know the drill: It’s the last month before the end of the year, holiday marketing campaigns are rolling in. And yes, this is a thrilling time, but there is a certain level of stress that comes with analyzing the Q4 data. It can be especially stressful for those who aren’t familiar with all the tips and tricks of Google Analytics reporting, which, let’s be honest, was all of us at some point.

These Google Analytics reports are available for free and are perfect for all of my favorite fall holidays. Because, supposedly, holidays are all about giving thanks. From tracking SEO performance to assisted conversions, I am thankful for these Google Analytics reports and all the delicious data they send my way. The reports above are just a few to help you get started.

Thanks so much for reading! I hope that gives you something to be cheerful for this holiday season. I’d love to know what reports and metrics you look at in Google Analytics. What’s important to you? What reports do you clients find most beneficial? I’d love to hear from you in the comments below.

Image Credits

Featured image & screenshots taken by Anna Crowe. Taken November 2016.

Source: SEARCH ENGINE JOURNAL

Style switcher RESET
Body styles
Color scheme
Background pattern
Background image