was successfully added to your cart.


Google’s Mobile-First Algorithm: What Does It Mean?

By | SEO | No Comments

Before you read any of this, understand that what’s in this post is not guaranteed to be fact. Much of this information is anecdotal based on phenomena I’ve encountered. In my defense, almost anything you read about this topic is somewhat anecdotal – none of us have a picture perfect idea of how Google’s internal processes work. I welcome and encourage you to leave questions and comments.

In November of 2016 Google’s Webmaster Blog announced the long term goal of moving toward a mobile-first search index. This could have a fundamental impact on search rankings, although it remains to be seen whether it’ll truly be impactful, or go the way of the first mobile-friendly algorithm update, which had minimal impact overall.

How It All Works

First, let’s do a basic recap Google’s process for crawling and indexing web pages. While we don’t know the intimate details, we at least have a high level understanding of how the process works.

Google’s web crawlers (bots) periodically crawl websites and index the content. They follow links to find additional pages and take into account on-page optimization like titles, H headings, body content, images, video, etc.

There are two versions of Googlebot – one for desktop and one for mobile. Similarly, there are two different indexes (also desktop & mobile). At present, the desktop index is the primary index to determine where a page will rank in search results. Traditionally, desktop has been the primary traffic source and was responsible for the majority of searches. Now Google is claiming the split has shifted in favor of mobile.

Exactly how Google rectified differences between the two indices is not well known. For example, a page that provides a phenomenal desktop experience could easily provide a very poor mobile experience if it’s not responsive. When that’s the case, what does Google do? Does it index and rank the page in desktop search results, but not on mobile?

Doing so would provide a very inconsistent searching experience across devices. Imagine if you ran a search on your phone then replicated it later on desktop and you were presented with a completely different set of results? That would be confusing, right?

Mobile Penalizes Desktop

It has been my experience that even though the mobile index is not the primary, it does directly influence desktop rankings. Several months after going responsive, an education client I worked with saw big increases in desktop rankings after the second mobile algorithm update in 2016 (in addition to big increases on mobile).

This backs the theory that in an attempt to present a consistent user experience, Google links the two indices, and mobile, the “secondary” algorithm could have a significant impact on desktop. In effect, we believed their non-responsive site was limited on desktop because their mobile experience was poor. When the algorithm rolled out, we saw big increases on mobile and in order to preserve the cross-device user experience, that necessitated big increases on desktop too.

Influential Pages Can Overcome Algorithms

It has also been my experience that a poor mobile experience does not automatically disqualify a page from ranking well on mobile OR desktop, if the page is sufficiently relevant or influential. Large swathes of IRS.gov are not mobile responsive but continue to rank well on both desktop and mobile.

They have to – it’s a critical government website that millions of people rely on. Despite the poor user experience, Google can’t penalize these pages too much. It would create serious issues if they did and searchers couldn’t find them. So Google continues to rank them, which may be a function of how frequently they’re cited on other sites (have many backlinks they have).

Making Pages Mobile-Friendly

How does Google rectify the fact that it’s ranking non-responsive pages? In September  2016, Google quietly updated Chrome with a feature that gave users the option to “make a page mobile-friendly.” Perhaps recognizing that the user experience of these pages was lackluster, Google offered users of its browser the option to change that.

Un un-responsive IRS page. Note the “Make page mobile-friendly” CTA:

After clicking “Make page mobile-friendly:”

It’s a band-aid fix to an underlying problem, but it does work well on the client-side. As a site owner, I might not be so convinced, depending on how Chrome renders the site. If important CTAs or contact forms are relocated in manner that’s not optimal, it could impact conversion rates.

Moving to a Mobile-First Index

It’s clear that Google has been incrementally pushing sites to provide a better experience. The mobile-first index is just the next step in a long series of steps to provide a better user experience.

What’s the impact going to look like?

It’s hard to say. This is a huge shift – it may be rolled out in phases like the two mobile-friendly algorithm updates were. The first phase may be less impactful to test the waters.

Google’s John Mueller did state that mobile pages should have all the same features as desktop pages, which makes a strong case for a responsive site rather than dedicated m. sites or dynamic serving sites, but it’s impossible to know for sure.

Despite the initial Fall 2016 announcement, Gary Ilyes has indicated the timeframe for release is now sometime in 2018. So there is time to make changes, not that Google has provided any formal criteria or us to follow.

AMP Pages

Perhaps most perplexing is that Google has simultaneously been pushing AMP pages over the past year – AMP pages are a lightweight HTML framework that results in lightning fast load times, at the expense of more advanced functionality (CSS and Javascript execution have significant constraints).

Will Google bias its own products and let AMP pages pass the test? Or will reduced functionality preclude them from ranking as well as responsive desktop pages? I’m curious to see how Google will accommodate these pages.


We know very little, so it’s difficult to determine how this update will affect dynamic or dedicated m. sites, which seem to be the most at-risk. Responsive sites could see a negative impact, if mobile functionality or navigation isn’t consistent with desktop. Despite being the secondary index, desktop may play a larger role than mobile did. It would be smart for Google to weight the secondary desktop index heavier than it did the secondary mobile index, at least when the update initially rolls out.

Questions? Comments? Tweet at me (@BerkleyBikes) or drop a comment here!

Why You Should UTM Tag Google My Business Listings

By | Local SEO, SEO

Google My Business Listings can drive a lot of organic traffic for businesses with a localized focus. Adding UTM tags to the website URLs within those listings is considered a best practice for optimizing GMB profiles.

What Benefit Do UTM Tags Have?

Without UTM tags, a page could be receiving organic traffic from two places and you wouldn’t have any idea which was the biggest driver:

  1. Standard organic results.
  2. Google My Business profiles (knowledge graphs, local map packs, Google Maps)

Adding UTM tags lets you differentiate between them and understand the impact local map packs may have. For example, if the local map pack was driving the majority of traffic, then you’d want to spend more time ensuring that you’ve optimized GMB profiles, citations, etc. in order to improve local map pack rankings.

If the majority of traffic does not come from GMB listings, then it might be an early indicator that the site doesn’t rank well in those map packs, or it may be a sign that the map packs don’t play that big a role in a given industry.

Only by determining where traffic is coming from can you determine where you need to focus your efforts the most.

Traffic Breakdown/Impact

Adding UTM tags to 25 of a client’s Google My Business listings recently revealed some unexpected insights. More than 50% of organic traffic to those locations came through a Google My Business listing.

We did not anticipate that much traffic coming from the listings. We estimated 20-30% as a generous estimate. Needless to say, this revealed a lot of revelations – improving the on-page optimizations would limit our ability to really drive results, unless we also focused on local SEO too.

It’s also worth noting that in this particular vertical, it makes perfect sense that mobile has a higher percentage of traffic from GMB listings. In this particular industry, the locations are places you’d typically drive to shortly after finding the location.

Implementing UTM Tags in Google My Business Listings

First, you have to devise a UTM tagging scheme. This is the scheme I recommend:

  • Source: g-local (subjective, you can pick what you want).
  • Medium:  organic (required – anything else will prevent the traffic from appearing in the organic channel report).
  • Content: [specific location name]
  • Campaign: [regional location name]

If you’re tagging multiple listings at the enterprise level, the content and campaign categories are very helpful to identify specific locations and also regional markets. The client in this scenario operates in 8 regional markets with 25 locations spread across them.

It’s also worth noting that it’s good to keep these as short and abbreviate whenever possible. The GMB interface has a 256 character limit on URLs, so if your site’s URLs are long already, adding multiple UTM tag fields will push you past the limit very quickly.

Measuring Impact

It’s definitely recommended to do this before starting any local SEO efforts, because this will give you a baseline for how much traffic comes through various listings before you optimize them. Measuring map pack rankings is all and well, but traffic is the real metric you should be measuring. Doing this will also let you determine how well GMB traffic converts and if it makes a difference compared to traffic from standard organic results.

Questions? Tweet me @BerkleyBikes or comment here.

What Is Data Sampling in Google Analytics?

By | Analytics, SEO

Google Analytics lets you segment and filter data in hundreds of different ways. When you think about what GA does and how much granular data it logs, it’s downright astonishing. It’s even more astonishing that this data is readily available and can be viewed within the Google Analytics interface without needing to request custom reports.

However, there is a limit to how much data can be processed. When you pull a large date range, or look at a busy month and try to segment by landing page, device, location, etc – you’re requesting Google Analytics to process hundreds of thousands of data points. When you consider that Google Analytics is deployed (for free) across millions of websites, it’s easy to see how the amount of processing power required could quickly spiral out of control.

So what happens?

Instead of saying “report unavailable” or “too much data to process,” Google Analytics uses data sampling. It takes looks at a much smaller cross-section of the data and assumes it is an accurate sample of the entire dataset.

Picture this: you want to know how much sleep you get in a year. Instead of tracking how much sleep you get every night for 365 days, you log how many hours you sleep in one week and multiply that by 52 weeks. The assumption is that the one week you track is a pretty typical week, representative of the way you sleep most of the time.

What’s the problem?

That one week may not be representative of the way you sleep all year. Maybe you sleep more in the winter and less in the summer. Maybe your work schedule varies and that affects how much you sleep on a week-by-week basis.

Sure, you could take a larger sample size – track 4 weeks and then multiple by 13 instead of 52. The larger the sample size, the more likely it is to be accurate. But it’s still not perfect because you’re making assumptions that those other 48 weeks follow the same pattern as the four you’re measuring.

How Does Data Sampling Apply to Google Analytics and SEO?

Tracking how much you sleep probably isn’t that critical, but when you’re making marketing decisions that cost tens or hundreds of thousands of dollars, you want to be sure you’re using accurate data. You can avoid data sampling, if you’re mindful of it and recognize when it’s happening. Google Analytics does let you know when the report you’re looking at is based on sampled data, but it’s very non-descript, located in the top right corner with nothing to draw your attention to it.

“This report is based on 100% of sessions” indicates the data is not sampled.

Anything lower than 100% is the percent of visits that the report is based on. The lower the number, the smaller sample size.

How Much Does Data Sampling Skew The Numbers?

Let’s look at some test cases. In both of them I used an Organic-only Google Analytics View, with a mobile traffic segment applied and a date range of 1 year (1/1/16 to 12/31/16). This is a very common setup, that allows you to report on metrics relevant to mobile device performance over a 1 year period.

In the two test cases below, the dataset was pulled in two ways:

  1. Monthly numbers were pulled in 1 data export for a 12 month date range.
  2. Monthly numbers were pulled in 12 data exports for 1 month date ranges.

Data Sampling Test Case #1: Sessions

In this report we’re just looking at sessions (visits) for a high level overview. This is a very straightforward report – finding out how many visitors came to the site on mobile devices and trying to establish a month-by-month trend.

The unsampled default report shows a total of 338,827 visits during this time period. After adding the mobile segment, the sampling rate was listed as 27.33% – meaning the sample size was only 27.33% of the total visits.

The graphs below show the variance between the single data pull and the 12 data pulls. In this example, the sampled data is over-reporting by 0.99%.

That may seem minor, but look at the individual months – the variation is much wider on a monthly-to-month basis – anywhere from -20.16% to +18.77%. More than half of the 12 months in the year were off by more than 10%.

Data Sampling Test Case #2: Goal Conversions

In this report we’re drilling down into goal conversions which are more important in many cases – these might represent actual customers or leads.

The unsampled default report shows a total of 6,341 goal conversions during this time period and the sampling rate is still 27.33% because we haven’t changed the segment we’re using. In this case, the overall numbers are only slightly worse – over-reporting by 2.44% instead of 0.99%.

However, the monthly variance is MUCH worse. Look at August: over-reporting by a whopping 39.04%! September and October aren’t much better, over-reporting by 28.97% and 25% respectively.

Both of these reports are completely inaccurate and worthless for establishing seasonal patterns, or year-over-year performance by month. The only way to get accurate data is to use unsampled data, either with smaller date ranges, or using the API.

When Does Sampling Occur?

Data sampling does not occur in default reports, but adding segments or filters will trigger sampling. It doesn’t necessarily matter what segments or filters are added – they could be based on landing pages, devices, mobile vs. desktop, etc. It also depends on how many sessions are within the date range. A site that gets 500,000 visits per month will encounter data sampling much sooner than a site that gets 50,000 hits a month.  

How To Avoid Data Sampling in Google Analytics

For one, use a smaller data range. Smaller date ranges reduce the number of visits, which reduces the likelihood of sampling. If you’re trying to look at a larger date range, exporting data in smaller batches is the way to go. This can be tedious if you’re trying to use the Google Analytics interface, which is why I recommend using the Google Analytics/Sheets API. The Google Analytics/Sheets API is incredibly easy to use and does actually reduce the sampling rate itself. It’s also much faster for exporting multiple datasets at once.

You can also set up Google Analytics Views specific to certain data sets. Views exclude data before it even gets into the interface. The session limit is still the same, but when you add filters/segments, you’re doing so with a smaller amount of data points, so sampling doesn’t occur as quickly. I always set up an Organic-specific View so that I can look at organic data by itself – that helps avoid the session limit when segmenting landing pages by URL structure, for example.

The last choice is to upgrade to Analytics 360. This is Google’s premium version of Standard Analytics, and lifts the sampling threshold from 500,000 sessions (at the property level) to 100 million sessions. It’s worth noting that Analytics 360 costs well over $100,000 – far outside the reach of many companies who aren’t big enough to afford it, but do get enough traffic for data sampling to be a common occurrence.


  • Sampled data is not accurate data.
  • Never use sampled data for reporting or analysis.
  • Sampled data can be eliminated by choosing smaller date ranges, the Google Analytics/Sheets API.

As always, tweet me @BerkleyBikes or comment here with questions.

Embedding & Optimizing YouTube Videos on WordPress

By | SEO, Video

If you’re making videos for YouTube and you also have a website, you may want to create landing pages for each of the videos you make. Chances are you do some amount of SEO and creating landing pages will help you get more mileage (and more views) of that content.

People visiting YouTube directly is just one way to acquire video views. YouTube videos can also rank in organic search results just like pages. Similarly, a landing page is one additional opportunity to rank for targeted keywords, and embedding a corresponding video on a landing page can result in more video views from people who click on the web page itself and then view the video on the site.

For the purpose of this post, I’ll assume you’re already familiar with keyword research and how to optimize YouTube videos for SEO purposes.

Adding the Embed Code to WordPress: Easy Way

1. Copy the YouTube URL.

2. Log into WordPress.

3. Edit your Page/Post.

4. Paste the URL right into the Visual editor, wherever you want the video to appear on the page.

5. The YouTube player should render almost immediately.

6. Publish!

Adding the Embed Code to WordPress: Harder Way

There’s no reason to do it this way, but if you really want to, here’s a more manual way to embed a YouTube video. Go to the YouTube video in question and underneath the video title, click the Share menu option.

From there, click on the tab that says “Embed” and copy the iFrame code. This is the code you’ll be using to embed the video on a WordPress post or page.

Log into WordPress and edit the post or page in question. From there, go to the Text editor by clicking on that tab in the top right corner. This will show you the page’s copy in HTML form.

Paste the embed code wherever you want the video to appear.

Optimizing YouTube Embeds with Schema

If you want to take your embed game to the next level, add VideoObject Schema markup to the page or post. My preferred way is rather manual and here’s why: I have not been able to find a plugin that will add Video schema (lots of plugins do other fields except video) AND doesn’t create some hideous gray box at the bottom of my post page (as some plugins do). Since Video Schema is for search engines specifically, there’s no need for humans to see the markup and it may as well be hidden.

Types of Video Schema

Of the three different types of Schema markup, JSON is my preferred type and Google lists it as their preferred type as well. Google hasn’t indicated there’s any disadvantage to using Microdata or RDFa, so there shouldn’t be any difference using those if that’s your preference.

Crafting JSON Video Schema

I have not yet found a Schema generator that will generate JSON schema, likely because of its added complexity over Microdata. Nevertheless, it’s not that hard and can be done using a code editor (if you don’t have one, Notepad is fine).  

Critical fields are as follows:

  • Name
  • Description
  • Thumbnail URL
  • Upload Date
  • Duration
  • Embed URL

Here’s what completed Video Schema might look like:

Test your Video Schema

Once your Schema is ready, run the markup through Google’s Structured Data Testing Tool (make sure to select ‘Code Snippet’) and look for errors. If there are none, proceed, otherwise look at what Google flags and make edits to correct it as needed. Keep an eye out for rogue semi-colons or curly quotation marks.

Adding Schema to a WordPress Page or Post

A common pitfall is to add the Schema directly to the post/page using the Text editor. I don’t recommend doing it that way. It’s too easy for the Schema to get inadvertently edited or wiped out entirely if changes are made to the page.

Instead, I recommend adding the Schema using custom fields. Torquemag has a great write up on how to add a custom field for Schema markup with minimal work.

Once you setup custom fields, you can add your Schema markup into the custom fields box below the editor and then update or publish the post once complete.

Test Your Video Schema Once Live

I always re-test my Schema markup once the page is live or updated. It may be unnecessary, but does add an extra layer of assurance and lets me know there was no user error between my initial test and when I published the page. The likelihood of this happening is reduced by using custom fields in place of inserting Schema directly into the editor.

Adding YouTube Transcripts

YouTube transcripts can be critical for SEO purposes because they’re a text-based version of the video in a fully crawlable form. The question becomes: how to integrate them with a landing page?

My recommendation (and what I do) is this: If you already have page content written and it covers an identical or similar topic to your video, there’s no need to add a transcript to the landing page. If you do insist on adding one, you may want to do it via an accordion that collapses and expands – this way the layout and flow of your written content isn’t impacted, but the transcript is still readily available and the user experience is preserved.

If you don’t have landing page copy written, consider adding the transcript in its entirety. That’s an easy way to add crawlable, text-based content, without the extra effort of writing an entire new page of content.

Your site, your videos and your audience should help you determine which method to go with. On pages where I have both original written content and a video, I allow visitors to choose the user experience that works best for them.

The Impact of Optimizing Embedded YouTube Videos

It’s hard to determine and show the impact of these optimizations. From an anecdotal standpoint, I can say that I’ve had good success getting both pages AND YouTube videos to rank in organic search results, in some cases right next to each other.

One of my posts about redirect chains made it into the first position of the video carousel, with my normal organic result immediately above it.

If you have questions, feel free to tweet me @BerkleyBikes (preferred) or comment here.

How To Track Showcase IDX Conversions in Google Analytics

By | Analytics

Real Estate clients using the Showcase IDX WordPress plugin are in luck – the plugin has exceptional functionality that’s great for SEO and website analytics too. In this post, I’ll show you how to setup conversion tracking for two things:

  1. When a site visitor creates a Showcase IDX account.
  2. When a site visitor contacts the client through the Showcase IDX interface.

Since these are both critical actions that a site visitor would take on the way to becoming a customer, we’re going to set up both of these as goal conversions in Google Analytics so that we can determine what channel they’re coming from and analyze the efficacy of different campaigns. Full disclosure: Showcase IDX has an excellent tutorial on how to do this, but I’ve added a few extra details that I found helpful.

New Registration (Account Signup) Conversion Tracking

When a site visitor creates an account within the Showcase IDX platform, Showcase IDX labels this as a “New Registration.” Out of the box, the platform sends an Event to Google Analytics, removing any need for custom event configuration. All you need to do is set up a goal conversion based on the Event.

First, go into Behavior > Events > Top Events and you should see “Showcase IDX” listed as an Event Category. If you don’t see it immediately, widen the date range that you’re analyzing – it’s possible that there weren’t any registrations during a smaller date window.

Click on “Showcase IDX” and you’ll see one or two Event Actions listed. These will either be “New Registration” or “New Message.”

Clicking into these will give you some additional details but for now we’re focusing on setting up Goal Conversions.

Now go into Admin and in the “View” column, click on “Goals. ” This is where we’ll set up new goals.

At the top, click the red “New Goal” button (you can see I already have Contact Form Submissions and Mobile Click to Call goals set up).

From here, Goal Conversions are configured in three parts: Goal setup, Goal description and Goal details. First, make sure “Template” is checked and then select “Create an account” as the goal template for New Registrations. Click the blue “Continue” button at the bottom.

By choosing the Create an account template, the goal will be named “Create an account” by default. I prefer to be more descriptive and have renamed it Account Creation (Showcase IDX). Make sure to next check the “Event” box under Type. Then click Continue.

This is the most important part. Remember the Event Category and Event Actions that we looked at before? Now we’re going to put them to use. Under the Category box, enter ShowcaseIDX exactly as it’s seen in the Top Events report.

Under the Action box, enter New Registration. This will ensure that only Events fitting this specific criteria are tracked as Conversions. 

Lastly, click Save. You’ve now setup Goal Conversion tracking for new Showcase IDX registrations.

New Message Conversion Tracking

I also recommend setting up a separate Goal Conversion for new messages that are sent through the Showcase IDX platform. This Goal Conversion is even lower in the funnel than New Registrations because prospective customers are going one step further and reaching out.

The process is mostly the same with some small differences. In the Goal setup phase, select “Contact us.”

In the Goal description phase, I’ve chosen to rename the Goal as New Message (Showcase IDX).

In the Goal details phase, you keep the same Category (“ShowcaseIDX”) but change the Action to “New Message.”

Once you’ve created and saved both of these goals, remember to verify they’re setup correctly by doing a few test submissions. Make sure you’re taking into account any filters for IP address, or Google Analytics opt out browser extensions that would eliminate any test submissions from appearing in the interface.

I often test submissions using my phone on data mode (not wifi) – this simultaneously bypasses any IP filters that I have setup in Google Analytics as well as browser extensions. Also keep in mind that while a user can trigger multiple Events within a single website session, Google Analytics will only record one Goal Conversion. If a single visitor sends several messages during a single site visit, GA will only register one Goal Conversion.

If you have any questions, tweet me @Berkleybikes, or comment below (Twitter is preferred for faster responses).

Finding & Optimizing Click Through Rates For SEO

By | SEO | No Comments

Click through rate is not specifically an SEO concept – it really applies to any type of digital advertising – but we’re going to look at it through an SEO lens.

What Is Click Through Rate?

Click through rate is the number of times that somebody clicked on something divided by the number of times that thing appeared. Most of time you’re going to look at those two numbers in terms of clicks and impressions with clicks being the number of times somebody clicked and impressions being the number of times it showed up. In the scheme of SEO, click through rate is going to be the number of times that someone clicked on your web page divided by the number of times that your web page appeared in search results.

Finding Click Through Rate Data

How do you get CTR numbers and how do you know what your click through rate is? The answer is Google Search Console. It provides all these numbers for you and it’s free to sign up which I’ll show you how to do in another video/post. Let’s dig in a little bit and look at some of the ways that we can look at click through rate, clicks and impressions in Search Console.

Once you’ve logged into Search Console, in order to get any type of click-through rate data, you have to go to Search Analytics and click on that.

That will bring up the default set of data which is going to be focused on clicks and queries. Clicks will be the number of clicks to the site and it’s going to look at it on a per keyword basis. For the purpose of click-through rate this isn’t that beneficial because we know that the meta description is going to appear for most of the keywords that are driving clicks to the site and it’s not keyword specific so we’ll be better off to look at it at a page level.

Clicking on the CTR box will show an aggregate CTR trend line and you can also look at the aggregate CTR value (for all the pages on the site). What’s more helpful is if you scroll down,  scroll to the rightmost column and look at CTR data on a page by page basis.

If you want to benchmark data, you can pick a particular date range – there are a couple presets – or you can do custom if you want to look at the click-through rate for a particular month, for example.

There’s a couple other things in here you can do as well – you can add filters for country, filters by device – that may give you some insights into where you’re underperforming on a geographic or device basis and then that may inform the way that you run tests.

You can export data into an Excel-friendly CSV by scrolling down to the bottom of the page and clicking “Download.”

Overall I think Google Search Console is a really underrated tool and this gives you some really crucial data that most people probably don’t look at as much as they should and may help you optimize your meta descriptions to get more traffic.

How To Use CTR Data

Now that you know your click-through rates, or at least you know how to go get them and where to find them, the next question becomes: what to do with this information? Obviously a higher click-through rate is better because the higher the click-through rate the more traffic you’ll get but the question becomes how do you improve the click through rate?

Improving CTR with Titles & Metas

One very simple answer is being ranked better. Obviously higher ranked pages get a higher click-through rate than lower ranked pages because positions one, two and three are generally positions that receive more traffic.

That’s very easy to say “well yeah just get your page ranked better” but not always as easy as it sounds because especially in competitive industries we know that can be very difficult. Another way that you can actually influence a click through rate without being ranked better at all is to tweak the title tag and the meta description. The meta description in particular because since it’s not a ranking factor, it’s not as risky to change what’s in it because it’s less likely to have a negative impact on rankings.

Improving the meta description can improve the click-through rate without actually being ranked any better which is remarkable when you consider that new meta descriptions are really easy to implement.

Testing Different Optimizations

Meta description tests you may want to run might include different CTAs and different language that are more actionable. Benchmarking performance data will allow you to compare different optimizations over time and see which one had a higher click through rate.

What Should The Click Through Rate Be?

One question you might have is “what’s the right number, what should my click-through rate be?” and there’s not really a great answer to that. It really depends on your business and the industry, your site.

There are some numbers out there where people have done studies and said that in certain industries X is a pretty typical click through rate, but it’s hard to tell how accurate those studies are. My general attitude is “let’s just look at where you’re at now and try to improve that and constantly get better at it.”

I think that’s more productive – it’s easier to try to be better than you were than to try to aspire to a number that you may not know to be accurate.

CTR: Branded vs. Non-Branded

Also worth noting that click-through rate can be looked at in a lot of different ways depending on the type of keyword. For example we know that branded keywords are going to have a much higher click through rate. If someone is searching for a particular brand they’re more likely to click on that than they are a more generic keyword.

CTR Based On Funnel Position

Keywords in different parts of the funnel are also likely to have different CTR. Keywords that have words like ‘cost’ or ‘signup’ in them – these searchers have likely done their research and they’re ready to buy. Consequently, they’re probably more inclined to click on a search results because of that.

If you have any questions feel free to leave a comment or tweet me @BerkleyBikes. Definitely subscribe to my YouTube channel if you want to see more videos/posts like this one.

How To Setup & Verify Bing Webmaster Tools

By | SEO, Technical SEO

If you’ve read my instructions on how to verify Google Search Console, you may be wondering how to do the same for Bing Webmaster Tools. Or maybe you aren’t, because you never really thought much about Bing Webmaster Tools, in which case: read on.

While you may not pay much attention to Bing as a search engine, you’re doing yourself a disservice if you don’t set up and verify Bing Webmaster Tools. Just last year, Bing Webmaster Tools helped me troubleshoot an indexation issue with an enterprise-level education client – an issue that could have cost them thousands of lost site visits had we not used Webmaster Tools to identify it so quickly.

Bing Webmaster Tools offers almost all the same functionality as Google Search Console and while you may not use it nearly as much (or at all) it should be included in your standard setup process.

Creating a Webmaster Tools Account


First you’ll need to create a Webmaster Tools account, assuming you don’t have one already. Go to https://www.bing.com/toolbox/webmaster and click “Sign Up”

You’ll be prompted to fill in the necessary info, before clicking “Create Account”

Once you’ve created an account, you’ll see a screen that looks like this. Add the URL of your site and click “Add.”

Adding an XML Sitemap

Next Bing will ask you to add a sitemap. You should do this, so find your XML sitemap and paste that URL into the Sitemap box.

Verifying the Profile

There are three ways to verify the profile:

XML File

Download the Bing XML file and upload it to the domain’s root folder, effectively creating the URL YOURSITE.com/BingSiteAuth.xml. You’ll need to do this via FTP, so if you don’t have server access, this will be difficult or even impossible.

Meta Tag

The second option involves adding a meta tag to the homepage of your site. This is a simple line of HTML not unlike a meta description. If you’re using a CMS that offers a section for custom HTML, you can enter it there in order to push it live on the page.

Note: This meta tag needs to be left in place in order to Webmaster Tools to continue to be verified.

Hosting Provider: CNAME

The third listed option allows you to log into your hosting provider and add a CNAME record. This is likely the most sure-fire, permanent way to verify the profile but may also be the most difficult. If you can’t log into your hosting provider, this option is not helpful.

Bing Webmaster Tools Verification on WordPress

Bing WMT Verification on WordPress is painfully easy.

You should already have one of two SEO plugins installed: Either A) Yoast’s WordPress SEO plugin or B) All In One SEO Pack. Both are really freaking good plugins and you’re doing yourself a disservice if you don’t have one of them installed on your WordPress site.

Verifying Bing Webmaster Tools with Yoast’s WordPress SEO Plugin

In the WordPress backend, go to SEO > Dashboard > Webmaster Tools. Yes there is also a Search Console menu item. No, that’s not where you actually verify Google Search Console OR Webmaster Tools.

Here you’ll see three different form fields. Go back and look at the HTML meta tag I mentioned earlier in this post, copy the value and enter it here. Once you’ve done that, click ‘Save Changes’ then go back into Webmaster Tools and click verify (using the HTML tag method).

Verifying Search Console with All In One SEO Pack

For those using All in One SEO Pack, the process is not much different. Go to All In One SEO > General Settings and scroll all the way down to the ‘Webmaster Verification’ section, where you will see the same two fields for Google and Bing Webmaster Tools.

Once you’ve done this, KEEP SCROLLING DOWN. With so many features on one page, it’s easy to miss the ‘Update Options’ button, which is critical to make sure your settings get saved.

Verification Completion

Once you’ve completed one of these three methods, go back into Webmaster Tools and make sure you click the ‘Verify’ button. Then you’ll have access to all of the Webmaster data that Bing provides!

How To Verify Google Search Console (Webmaster Tools)

By | Analytics, SEO, Technical SEO | 2 Comments


Creating a Google Search Console profile is actually quite easy, with the possible exception of the pesky verification part. Nevertheless, it’s not that difficult, and I’ll show you how to do in record time. There are 5 ways to verify a Search Console profile. Your site configuration, tracking setup, user permissions, etc. will determine which one is best for you. I’ll explain them all here, starting with my preferred methods. If you’re doing this on WordPress, skip to the bottom of the post, I’ve got specific instructions just for you.

Google Analytics

Google Analytics is a fairly easy option, assuming three things:

  1. You’re using asynchronous (analytics.js) tracking code.
  2. Tracking code is placed in the <head> section.
  3. You have ‘edit’ user permissions.

If any of these three things raises a red flag, the GA verification option is not for you. If you pass the criteria, click the red Verify button and you’re off to the races. If you’re using Google Tag Manager, this method is a no-go, but you can use the GTM method in the paragraph after this.

Google Tag Manager

If you’re using Google Tag Manager, you can’t use the GA method, but there’s an option specifically for you. Needless to say, there are criteria for this also:

  1. You have to be using the container snippet.
  2. You must have ‘manage’ user permissions for that container.

If you don’t fit those criteria, keep moving. If you do, click ‘Verify’ and you’re done.


The HTML tag is simply a meta tag (a single line of HTML code) that gets added to the homepage and voila, verifies the site/profile. Depending on the CMS, this may be very easy to do (in WordPress it’s a pinch). You can either do this yourself if you have CMS access, or ask a web developer or marketing manager to implement it. How you do this depends on what CMS you’re using. It’s likely you have a custom HTML field or something similar where the tag can be added. The tag needs to go in the <head> section of the homepage.

Once you’ve verified it has been added, go back into Search Console and click the big red ‘Verify’ button. Even after you’ve succeeded, leave the HTML tag on the home page, or the property will revert back to unverified status.

HTML File Upload

The HTML file upload is similar to the HTML tag, but instead of a line of code, you’re adding a small HTML file to the root domain. To do this, you’ll effectively need the ability to add files to the root folder on the hosting provider. FTP access is ideal, but if you’re a marketer, you probably don’t have that. If possible, ask the web developer to add it. Once you’ve done this, visit the URL created by the file to ensure it’s in the root folder and not a subfolder.

Domain Name Provider

This method is listed as Google’s recommended method – possibly because it’s the most secure? In any case, Google will prompt you to log into the provider where you bought your domain name (for example, GoDaddy or NameCheap).

If you have access to the domain name provider – that’s fine. However (and speaking from experience) it’s much more likely that you don’t have access to this, which makes it a moot point. I’ve only used this method to verify a Search Console profile once, and it was on my own site. On the hundreds of other GSC profiles I’ve created over the years, I’ve never had access to the domain name provider. With clients, getting access to that may involve going through a compliance department or IT team, which, as you can imagine, takes far more time than it’s worth. There are simply easier ways!

Search Console/Webmaster Tools Verification on WordPress

If you’re trying to verify Google Search Console or Bing Webmaster Tools on WordPress, you’re in luck, because it’s ridiculously easy. I’ll assume you already have one of two SEO plugins installed. Either A) Yoast’s WordPress SEO plugin or B) All In One SEO Pack. Both are really freaking good plugins and you’re doing yourself a disservice if you don’t have one of them installed on your WordPress site.

Verifying Search Console with Yoast’s WordPress SEO Plugin

In the WordPress backend, go to SEO > Dashboard > Webmaster Tools. Yes there is also a Search Console menu item. No, that’s not where you actually verify Search Console.

Here you’ll see three different form fields Go back and look at the HTML tag I mentioned earlier in this post, copy the value and enter it here. You can also enter your Bing Webmaster Tools Verification (you have that too, right?)

Once you’ve done that, click ‘Save Changes’ then go back into Search Console and click verify (using the HTML tag method).

Verifying Search Console with All In One SEO Pack

For those using All in One SEO Pack, the process is not much different. Go to All In One SEO > General Settings and scroll all the way down to the ‘Webmaster Verification’ section, where you will see the same two fields for Google and Bing Webmaster Tools.


Once you’ve done this, KEEP SCROLLING DOWN. With so many features on one page, it’s easy to miss the ‘Update Options’ button, which is critical to make sure your settings get saved.

That’s essentially it. With 5 different options to verify GSC, you’re sure to find at least one option that works for you, and verifying by more than one option is always a nice failsafe if you have the option available to you. Questions? Comment here or hit me up on Twitter (@BerkleyBikes)

Additionally, don’t forget to setup Bing Webmaster Tools so that you can get the same insights from Bing.

Contact Form 7 Event Tracking with Google Tag Manager

By | Analytics | 143 Comments

If you fit the following criteria, this article is right for you:

  1. You use the Contact Form 7 plugin on your WordPress site.
  2. You want to set up contact form submissions as a Goal in Google Analytics (or even just as an Event).
  3. You have Google Analytics deployed on your site using Google Tag Manager.

If you’re not using Google Tag Manager, the tutorial on Contact Form 7’s site is really quite good. However, if you’re using Tag Manager, I haven’t found a resource that will help you much, so I created one here. It’s really quite easy, there are several simple steps:

Step 1: Create a GTM Tag that pushes a Data Layer event when mail is actually sent (and includes the form ID).

Step 2: Create a GTM Trigger that looks for the Data Layer event when mail is sent, and triggers a second tag.

Step 3: Create a GTM Tag that sends events to Google Analytics based on the Data Layer event.

Step 4: Create a form ID Data Layer Variable.

Step 5: Set up a Goal Conversion in Google Analytics based on the Event.

Ninja Forms

Step 1: Log into GTM and Create Tag #1

When the click the “Submit” button on a Contact 7 Form, it fires a form submission event. Unfortunately, it fires this event regardless of whether the required fields have been filled out – the form may not have actually sent, but the event is still triggered.

Fortunately, the plugin does fire DOM events for several different scenarios and these DOM events distinguish between successful form submissions and unsuccessful form submissions. What does that mean? These are the DOM events as described on the Contact Form 7 website:

  • wpcf7invalid — Fires when an Ajax form submission has completed successfully, but mail hasn’t been sent because there are fields with invalid input.
  • wpcf7spam — Fires when an Ajax form submission has completed successfully, but mail hasn’t been sent because a possible spam activity has been detected.
  • wpcf7mailsent — Fires when an Ajax form submission has completed successfully, and mail has been sent.
  • wpcf7mailfailed — Fires when an Ajax form submission has completed successfully, but it has failed in sending mail.
  • wpcf7submit — Fires when an Ajax form submission has completed successfully, regardless of other incidents.

The middle one is key: wpcf7mailsent. As described, this trigger fires when the form has actually been submitted and mail has actually been sent. We’re going to use Javascript to create a Data Layer event. Log into GTM and either select the “New Tag” box or navigate over to the “Tags” section and create one there. Create a new GTM tag (I’ve called mine wpcf7mailsent) with the following configuration:

Tag Type: Custom HTML

Add the following code:

Triggering: All Pages

What this does is listens for the wpcf7mailsent DOM event and fires an event into the Data Layer called “wpcf7successfulsubmit.” It also captures the form ID in the Contact Form 7 shortcode and pushes it into the Data Layer too (in the screenshot below, that ID is “1192”).

Next we’ll set up a Trigger that uses this Data Layer event to trigger the Google Analytics Events that the Goal Conversion will be based on.

Step 2: Create a GTM Trigger

Next, create a Trigger for the Tag you’ve just created. I named mine Contact Form 7 Trigger.

Trigger Type: Pick Other – Custom Event from the default list. We’re going to use the event we created in Tag #1 as the trigger event.

Event Name: wpcf7successfulsubmit

This Trigger Fires On: All Custom Events

This uses the custom Data Layer event we created in Step 1 to trigger a Google Analytics event tag which we’ll setup in Step 3.

Step 3: Create Tag #2

Log into GTM and either select the “New Tag” box or navigate over to the “Tags” section and create one there. Name the new tag whatever you want (I’ve chosen the oh-so-descriptive “Contact Form Submission”).

Fill out the following fields as such:

Tag Type: Universal Analytics

Tracking ID: Your tracking ID. I have mine set up as a variable, which explains why it says {{GA Tracking Code}}

Track Type: Event

Next you’re going to set the Category, Action, Label and Value for the Event we’re creating. If you’re not familiar with these, there’s more information in Google’s Analytics Help page for Events.

Category: You can set this as whatever you want and that’s what it’s going to show up as in Google Analytics when you go to the Events report. I named mine contact-form.

Action: Again, the choice is yours. I’ve selected successful-form-submission-mailsent.

Label: If you want to track different forms separately, you need to set this as {{CF7-formID}} and follow the rest of these instructions closely.

Value: I did not add a value.

Non-Interaction Hit: This is also your decision and the True/False answer will effectively change your bounce rates when the hit is fired. In essence, if someone lands on a page and completes a form submission then leaves without viewing other pages, that would be considered a bounce unless you choose False. I think someone who completes a form submission then leaves should not be considered a bounce, but that’s different for everyone. (Read more about bounce rates.)

More Settings & Advanced Settings: If you’re an analytics whiz, there are advanced settings in here that you may want to configure. However, I did not change any of them.

When you’re done, you’ll end up with something like this:



Step 4: Create a Form ID Data Layer Variable

In Step 2 we pushed the shortcode’s ID into the Data Layer. When the form is submitted, the form IDs are pushed into the Data Layer (see below) and we need to capture them and get them into GTM and into our Google Analytics Events.


Add a new user-defined Variable called CF7-formID. Set the Data Layer Variable Name as CF7formID (case sensitive).


Step 5: Setting up the Goal Conversion(s)

Next, go into Google Analytics and navigate to Admin > View > Goals. Click +New Goal and set it up as such:

Goal setup: Select Custom

Goal description:

Name: Call it whatever you want. Consistent with the spirit of this how-to, I’ve called mine Contact Form. 

Type: Select Event.

Goal details: 

Category: Equals to > contact-form (or whatever YOU named it in GTM)

Action: Equals to > successful-form-submission-mailsent (or whatever YOU named it in GTM)

Label: Select the form ID of the form you want to track. If you don’t want to track different forms separately, you can leave this blank. Mine was 1192.

Value: You can add another variable here if you want, like page URL, etc.

Use the Event Value as the Goal Value: If you had a value attached to each event, you could set that up here. Since I did not, I will not.

Now click ‘Save’ and you’ve set up the Goal Conversion and appropriate tracking. If you want to set up other goals for different form IDs, just repeat the process but change the Label in the Goal Conversion.

If you’re having issues making this work, please see my troubleshooting guide first, and if you’re still not successful, contact me and I may be able to take a look.

Ninja Forms Conversion Tracking

See how to set up similar tracking for Ninja Forms using GTM and GA.

How to: Learn the Google Analytics API with G Sheets

By | Analytics, SEO | No Comments

Listen, I get it. You’re not a developer and neither am I. The letters A-P-I probably give you palpitations. BUT, if you’re using the Google Sheets add-on, the Google Analytics API is really simple. Seriously.

What follows here is a beginner’s introduction that shows how to start using the API. This is for non-technical types and will start at square one. Full documentation is available at Google’s Implementation Guide.

Step 1: Getting Google Sheets Set Up

First, log into a Google account that has access to the Google Analytics account you normally use. Go to Drive and open a new Google Sheet, then go to the menu bar and select Add-ons > Get add-ons.

Next, search for Google Analytics and you’ll find this add-on:

Go ahead and click the +Free button to add it to your Google Sheet. When the authorization prompt pops up, click Allow at the bottom right.

Step 2: Getting Your Report Configuration Set Up

When you create a report the first time, the add-on does offer a user-friendly interface with drop down menus, etc, to help you set up your first report. You can access this by going to Add-Ons > Google AnalyticsCreate new report. I’m not going to use that, because ultimately, you’ll be making changes in the Sheet itself and it’s more valuable to understand what each of these fields does.

Now that you’ve got the add-on installed, go to Add-Ons > Google Analytics > Run reports. You’ll see this pop-up indicating the report failed, which is expected – we haven’t configured anything yet.

The point of doing this is: the add-on has now populated all the configuration fields that we’ll be working with to get it set up properly.

All those fields probably look confusing, but we’ll start breaking them down one by one and you’ll see it’s not that complex to pull basic data.

Step 3: Configuring Individual Fields

Report Name

When you run the report, the add-on is going to create a new tab in your Google Sheet with the information you’ve selected. Report Name simply tells the add-on what to name that tab. You can call it whatever you want, I’m calling it JAN.

Important Note: When you re-run the report multiple times, it will replace the data in the tab you’ve created. If you change the Report Name, it will create a new tab, preserving the old one. If you run the report and then delete the Report Name, it will keep the existing tab and preserve the data without creating another tab.


Enter core.

View (Profile) ID / ids

Go into the Google Analytics view you want to pull data from. Click over to Admin and select View Settings under View.

Copy the View ID number.

Paste this into the Google Sheet with ga: in front of it.

Start Date

This is no different than setting the data range in Google Analytics. Add the start date in a normal date format.

End Date

Same as the start date, just pick your end date. Make sure it’s a date in the past, and a day with complete data. For example, if it’s March 5th, don’t pick a date range of 3/1/17 – 3/31/17. Also, don’t pick a date range of 3/1/17 – 3/5/17 because that day isn’t over yet and you’ll have incomplete, sampled data (Learn more about data sampling).

Last N Days

You can also pick a fixed number of days prior to the current day. I don’t use this field, but if you did, you’d simply enter an integer for the number of days you wanted to report on. For clarity, I suggest removing the start/end date, but the add-on does appear to override those dates if the Last N Days field is populated.


This is the important stuff you really want to measure and you can have multiple metrics in here. You can use the Dimensions & Metrics Explorer to find Metrics to use. Since this is a basic guide, we’ll stick to simple ones.

  • ga:sessions – Pulls the number of sessions.
  • ga:goal1Completions – Pulls the number of Goal 1 Completions.
  • ga:goal2Completions – Pulls the number of Goal 2 Completions.

These will all get entered into the same cell.


Using the GA interface, you have the option to define the primary dimension, and you can do that here too. Popular choices might be:

  • ga:landingPagePath – Find landing pages responsible for sessions and goal completions.
  • ga:medium – Find the number of sessions and goal completions by channel (Organic vs. Referral vs. Paid, etc.)
  • ga:sourceMedium – Find sessions and goal completions by source & medium (Google Organic vs. Bing Organic vs. Google CPC, etc.)

We’ll keep it simple and go with landing pages. If you want to measure those by a specific medium, we’ll add that in a few paragraphs below this.


Really simple. How do you want the data sorted? Obviously, you can only sort by one dimension, so pick the dimension of your choice from above and enter it in this cell. GA’s default is to sort by sessions from high to low, and if you want to do that, enter a minus sign before the metric.


You can start to get really complex here, and if you use filters when you normally look at data in GA, you’ll need to add those here. For now, we’ll use a basic filter to look at organic traffic only.

This ensures we’re only pulling sessions, goal completions and landing pages from the organic medium.


Segments are arguably the most complex field of this report. There are multiple ways you can create segments, and the criteria for building them can be found in Google’s core reporting documentation.

In short, they can follow a syntax similar to this, where you’d have a segment for sessions from Canada:

For simplicity, I won’t use a segment in this walk-through.

Sampling Level

I never pull sampled data because it doesn’t paint the whole picture. Because of that, I opt for the higher precision setting and I suggest you do too.

Start Index

This option allows you to only show results from a specific starting point. For example, if you were pulling landing pages and wanted to ignore the top traffic-driving page (like the homepage) you can set this to ‘2’ and it will ignore that top result. I don’t use this much.

Max Results

The maximum value is 10,000, so no real reason to set it lower than that.

Spreadsheet URL

If you want to export the results into a separate sheet, you can enter the URL here.

Final Review

Once you’ve filled out all the fields, your configuration will look something like this:

Step 4: Run the Report

Once you’ve filled out all the fields, go back to Add-Ons > Google Analytics > Run reports. The sheet will render a new tab with the name you entered in the first field.

The resultant tab will look like this:

Check cell B6 and make sure it says ‘No’ – this will indicate whether you have sampled data or not. If you do, pick a smaller date range or narrow your area of focus to ensure your data is not sampled.

Step 5: Create Additional Reports

One of the benefits of using this is that you can run multiple reports simultaneously and pull data faster than you ever could using the web interface.

If you want to create another report, simply add data in the columns to the right of your first report. This is a super easy way to pull the same data over multiple months.

Step 6: Analyzing the Data and Building Reports

What’s next is up to you. The API is simply a faster way to get a lot of data out of GA and into a spreadsheet. From there, you can elect to build reports directly in Google Sheets, Google Slides or Google Docs. You can also export the data into Excel or build a PowerPoint.

I tend to prefer building reports in Docs or Slides using data that lives in a Google Sheet. That way it can be easily updated and is accessible to multiple editors who might be compiling the report.


As always, comment here or tweet at me if you have any questions.