Tuesday, March 28, 2023

13 Local Search Developments You Need to Know About from Q1 2023

Wooden building blocks on a map

Can you believe we’ve already sped through the first quarter of the new year? So much has happened, and on the strength of the warm reception this nascent local search quarterly review received in 2022, I’m going to continue the series this year. Thank you for being a reader. Let’s dive right into the most interesting new things we’ve seen in the first three months of 2023!

A new local search ranking factor!

Joy Hawkins' tweet showing substantial ranking gains for a business that implemented pre-defined Google Business Profile services.

Joy Hawkins and her Sterling Sky squad discovered something truly new this February: selecting pre-defined Google Business Profiles services from the list that Google offers some categories of business can have a tremendous positive impact on local pack rankings. Joy’s dream team is working to see whether custom-written services have a similar effect. For now, if Google shows you a choice of ready-made services (not to be confused with service areas) in your NMX interface and they relate to your business, definitely add them! By my count this brings us up to 5 GBP factors we strongly believe directly impact rank: title, URL, categories, reviews, and now, pre-defined services.

The ABCs of…ABC

Homepage of Apple Business Connect showing business Place Cards on mobile phones.

In crunchy spherical fruit news, Apple launched Apple Business Connect to make it easier for local businesses to get on the map, because, of course, you want to reach those 137k iPhone users. Mike Blumenthal has the best write-up on the new ABC features, and Moz Local customers get a collective pat on the back because their info is already being distributed to Apple Maps hassle-free. I hope to have a column coming out soon on Apple’s launch, but in the meantime, local SEOs are seeing this as one more signal (amid all the AI chat buzz) that there could be a few cracks of competitive opportunity in the Google local monolith. It can be worth major money to win even a point away from Google’s market share, and this is an interesting time in search.

BBB as trusted source in troubleshooting

Ben Fisher's tweet showing Google asking for your BBB link in a troubleshooting form.

In other acronymic headlines, Stefan Somborac and Ben Fisher spotted Google requesting a link to your BBB listing in one of their assistive help forms. You may encounter this when reporting problems with your listings and need to go find yourself on the Better Business Bureau site. The Better Business Bureau has not always earned good press in local search circles, but this move from Google signals that they clearly trust the longstanding organization. Might be a good time to look at how you’re rated there.

GBP products in Google Shopping results

Colan Nielsen's tweet showing that manually-added Google Business Profile products are displaying in Google Shopping.

At first, there was uncertainty as to whether this was a new feature when Colan Nielsen spotted it, but on the strength of the “wows” from the local SEO community, Barry Schwartz did a write-up on this phenomenon of products that were manually added to Google Business Profiles showing up within the search engine’s large shopping interface. In the past, I had only seen products added via the Merchant Center appear this way. Communication of local inventory remains a major hurdle for independent businesses, and this change from Google is a good incentive to be sure you’re adding products to your Google Business Profiles with help, if you need it, from my handy tutorial.

Shelfies spotted in NYC

Local pack for search

This March, when I wrote about the nifty idea of shelfies (photos of store shelves you upload to GBP to display the breadth of your inventory), I had yet to see Google altering 3-pack visuals to feature them based on my search language. Kudos to Mike Blumenthal for capturing a live instance of this behavior for “backpacks nyc” and note that the local pack images show many products instead of a single item. I’m still not seeing this in my west coast environs, but am even more convinced now that local businesses should be taking shelfies.

NMX Profile Strength leaves us feeling a bit weak

Darren Shaw screenshots the New Merchant Experience, highlighting the new Profile Strength metric. He expresses frustrating that it is really just a pitch for paying for Google Ads.

Darren Shaw’s tweet captures the real-time letdown of finding a novel New Merchant Experience feature…only to discover it seems like a sales tool for Google Ads. Apparently, in order to get a good Profile Strength score, you need to pay. Colan Nielsen perfectly summarizes the awkwardness that is happening for agencies as a result of this debut:

Colan Nielsen says his agency is telling concerned clients to ignore the Profile Strength feature.

Google’s rollout of the NMX was not popular, and I don’t know how it is affecting local business owner engagement with the local product, but if this metric is meant to inspire more commitment from users to completing their free profiles, it’s odd to mix it up with a paid product. A red herring, a primrose path, a bait-and-switch, gammon and spinach? Hardly a brilliant success if agencies are telling their clients to ignore this “feature”. And speaking of things that were once free…

Local Service Ads: A whole lot going on

Homepage of Local Service Ads

Matt Casady wrote an excellent article over at LocalU about dentists becoming eligible to “pay to play” via LSA. If you’re marketing a new practice or helping one compete in a dense market, you can purchase the visibility you need to fill the patient roster. This sounds like good news, at a glance, but it’s also part of the ongoing saga of local business visibility becoming less “free” at Google’s house. At last count, 70 categories have become eligible for LSA and Google just keeps adding to the list.

LSA isn’t just a budgetary woe for underfunded SMBs, but a hotbed of very concerning spam. As my friends at NearMedia point out in the foregoing article, LSA’s review requirements are a temptation to engage in review spam, and both fake businesses and fake review content are ending up getting recommended by Google in this program. If you’re thinking of paying Google for leads, please read Ben Fisher’s alarming piece on LSA arbitrage and spam, complete with real-world examples of some very deceptive ads. At this point, I don’t trust Google’s “guarantee” any more than I do the local packs…I’ve just seen too much fraud to pretend that such content is uniformly trustworthy. Not to say that Google isn’t making some efforts, including:

Emergency brakes during spam attacks

Screenshot of Google document outlining new posting restrictions

Another doff of the cap to Colan Nielsen for sharing a new Google doc explaining why and how they may suspend user generated content (UGC) including reviews, images, and videos during upticks in prohibited behavior. For example, if a business becomes major controversial news and begins to receive a large number of reviews from non-customers, Google can pull the emergency brake for a period of time to defend the brand (and the quality of the index).

This capability is not new, but the documentation of the practice is noteworthy. The problem is, it’s no guarantee that Google will protect you from a spam attack. Remember that review spam may not always consist of a bunch of obviously negative reviews. There’s the erosion tactic of leaving a lot of 4-star reviews to downgrade the 5-star rating of a business, and another trick I only recently encountered of spammers initially leaving a high-star review and then sneakily changing it to a low-star one. All good reasons to continuously monitor your reviews, using software if you find this task too time-consuming. And be prepared to act quickly with this step-by-step Mike Blumenthal tutorial if your business is sabotaged

Two scoops of juicy justifications

Damian Rollison captures a local pack in which the listings have two justifications instead of the typical single one.

Damian Rollison brings us some better news about UGC this quarter, in the form of double local business justifications (some of which stem from reviews) appearing on listings. Justifications are textual snippets embellishing local business listings, like the, “My whole family uses them for car repairs,” shown above.

In my 2021 column, Local Justifications are a Big Deal and You Can Influence Them, I documented the different types of justifications I saw, including reviews, websites, posts, services, menus, in-stock, and sold here. At that time, however, all justifications I encountered in my study were single. Damian’s find is exciting because of the large amount of screen space being given to a double justification, with its dual conversion pitches. Have you written a Google post lately (actually, they are confusingly called “updates” now, so have you updated your GBP with an update, lately?). Double justifications would be well worth the effort, if you’re lucky enough to get them.

Immersive views for big buildings

Google's new immersive view in Google Maps shows an aerial view of large buildings like the Getty Museum in Los Angeles.

When I was a child, my family had a coffee table book called Above London which showcased aerial photography of the capitol. Now, everyone and their cousin can buy a drone to get these kinds of shots, but lovers of new things will appreciate this tweet from Punit of the 360 Map View that Google then talked about as “immersive view” at their memorable Paris announcement. Looking up the Getty Museum in LA on Google Maps showed me that many big buildings in the area have this treatment. If your local business is contained within a landmark edifice, you could get this eagle’s eye view of where you work.

In non-Google news

Screenshot of major report from the Institute of Local Self Reliance on the negative impacts of dollar stores.

Yelp has really struggled of late to compete with Google for local mindshare, but the fellows at Near Media drew my attention to a new report from the National Bureau of Economic research finding that restaurants which get listed on Yelp see a 5% increase in sales. In fact, even if your first reviews aren’t great, you still get a bump in diners. The restaurant business is HARD and that 5% could mean a great deal.

Actually, success is always the great challenge for nearly any local business, and that brings me to my last tidbit: the new, must-read report from the Institute of Local Self Reliance on the impact of dollar stores in the US. I have read countless articles over the past few years from towns and cities where dollar stores replaced all local variety and residents are stuck with little fresh food, dismal wages, and a loss of community identity. In 2022, nearly half of the businesses that opened in the US were some type of dollar store - an unprecedented figure, and these exemplars of the race to the bottom are the exact opposite of what independent businesses are working so hard to build.

I said this was non-Google news, but I’ve come to see Google Business Profiles as some of the best armor an SMB owner can don in the fight against lowered standards of living across the country. Use your profiles, and your website, and your social media to get the word out that your business is unique, local, ethical, green, family-owned, and a key contributor to the economic localism that makes the difference between a good place to live and a difficult place to be. Keep going, and I’ll be rooting for you in Q2!

Monday, March 27, 2023

Identify Featured Snippet Opportunities – Next Level

Featured snippets offer a fantastic opportunity for increased traffic and visibility for your site. There is a lot to say about this SERP feature and a lot that has already been said:

So what can I possibly add to the conversation? Well, let’s take a look at how Moz Pro can help with identifying opportunities to gain (or steal) featured snippets within your existing toolkit. Then you can take the infinite wisdom of folks like Crystal and Britney to elevate your content to new heights (and SERP features).

A Refresher on Featured Snippets

Before we dig in, let’s take a brief moment to talk about what featured snippets are, just to refresh our memories. Featured snippets are a type of SERP feature which seek to answer a query using a snippet from a webpage. When a searcher makes a query, Google may attempt to answer that query by pulling out a portion of a site’s content to display directly in the results.

Sometimes, as seen in the example above, Google will even highlight the most relevant part of the blurb they’ve extracted.

Featured snippets can come in a variety of formats including paragraphs, numerical lists, bulleted lists, and more and can be identified by the inclusion of a source link at the bottom of the feature. These features are not to be confused with answer features which do not include a source link and typically have a slightly different format.

Now that we’ve refreshed our memories on what featured snippets are, let’s dive into how we can use Moz Pro to identify opportunities to snag them.

Moz Pro Campaigns

Moz Pro Campaigns offer a variety of data views and tools you can use to scope out featured snippet opportunities. To start, we’re going to take a look at the Rankings Overview section.

Rankings

Within the main Rankings tab, you can see and monitor your tracked site’s rankings for all your tracked keywords. Anywhere your site has acquired a featured snippet will be noted as a rank of #1, with a featured snippet icon beside it which looks like a pair of scissors.

Pro tip: In the above screenshot I’ve opted to label these keywords as “featured snippet” so I can keep an eye on them and identify if I lose a featured snippet due to a competitor overtaking me or by Google changing the SERP for those keywords to no longer include a snippet.

If we hop over to the Competition tab of our rankings section, we can start to spot opportunities to steal some of this prime real estate in the SERP. Just as we saw in the Rankings tab, any keyword where the #1 has earned a featured snippet will be indicated by that scissors icon. This means we can sort our tracked keywords by our tracked competitor’s rankings to identify where they are earning those SERP features and where I’m ranking in comparison. This can help me spot featured snippets within striking distance by showing me a side by side comparison.

Any keyword where we’re already ranking on the first page and there is a featured snippet present could be an opportunity for me to reformat and fine tune our content to scoop up that feature.

SERP Features

Now that we’ve identified opportunities related specifically to your competitors, let’s broaden our scope a bit. The SERP Features section of your Campaign can offer additional insight into opportunities for featured snippets outside of competitor rankings.

Within this section of your Campaign, the tool will note how many of your tracked keywords include a featured snippet in the SERP as well as how many of those your site has earned.

This can offer a great opportunity to investigate and identify featured snippet opportunities outside of your competitor rankings. We can filter by featured snippet to see which keywords include this SERP feature and then identify keywords where our site is not currently featured. This is indicated by a grey featured snippet icon. For keywords where our site is currently ranking but not included in the featured snippet, we may see an option to expand the Insights column.

By expanding this drawer we can see what site the current featured snippet is being pulled from along with the exact URL. We can then use this information to identify areas of opportunity for our own content. Can we possibly provide a better answer to the query? What kind of markup and formatting is the current snippet’s post using? What can we do to elevate my own content?

Pro tip: The SERP features section of your Campaign can be exported to CSV, as well. Within the export, any time a SERP feature is present but your site is not included, this will be indicated by TRUE. If your site is included in the SERP feature, it will be noted as Included.

Keyword Explorer

Now that we’ve taken a look at how we can use Moz Pro Campaigns to identify and monitor featured snippet opportunities, let’s look at a few ways we can use Keyword Explorer to supplement that information. Whether you’re doing keyword research for a new client, looking to identify featured snippet opportunities for your site, or you’re needing content ideas to build from, the Keyword Explorer tool is an invaluable addition to your tool kit.

First, let’s walk through a workflow to help identify existing opportunities for featured snippets. Britney Muller also touched on this workflow in her Whiteboard Friday episode “Featured Snippets: What to Know & How to Target.

1. In Keyword Explorer, enter your URL into Explore by Site

From within the Keyword Explorer > Explore by Site you have the option to enter a root domain, subdomain, subfolder, or exact page to see keywords you are already ranking for. The subdomain and subfolder options can be particularly helpful if you are doing research for a specific vertical of your business or section of your site. For example, you may be looking to capture featured snippets for your blog’s subfolder.

2. Filter your results by rank

After entering in your URL and clicking Analyze, you’ll have the option to view the Ranking Keywords. From this list, filter by Ranking to see only the keywords for which you’re ranking on the first page (positions 1-10).

3. Add keywords to a Keyword List

Now we have a list of keywords that could have the potential for a featured snippet opportunity. Let’s dig a little deeper. While it can be incredibly helpful to know what keywords you’re ranking #1 for (and it may be worth adding those to a Campaign to track and monitor over time) these may not present many new opportunities for your site. Google’s deduplication of featured snippet results in the SERP - meaning that if a site has earned the featured snippet, that same URL will not be listed in the remaining SERP results - means that if your site is included in the featured snippet, it is identified as position #1 in the SERP. So let’s find and select the keywords for which our site is ranking 2 to 10 and add them to a Keyword List in Keyword Explorer.

Pro tip: If your site is ranking for a large number of keywords it can be helpful to export your Ranking Keywords to CSV. You can then filter and sort by rank and search volume to identify your strongest opportunities and add them to a Keyword List via copy & paste.

4. Find keywords with Featured Snippet opportunities

Now that we have a list of potential keywords, let’s narrow it down further. Within our Keyword List, we can filter by SERP Feature to see only the keywords which have a featured snippet in the SERP.

We can then take these keywords and add them to a Campaign, do further research on them, or see what content is currently featured in the SERP and identify ways to improve our own content.

Pro tip: You can use the Rank Check feature to see what page on your site is currently ranking on the first page of the SERP for these keywords and export that data to CSV.

Explore by Keyword

Up next is a workflow to help us identify new opportunities and possible content ideas for featured snippet inclusion. We’ll be using Keyword Explorer again but we’ll be switching to the Explore by Keyword section.

1. In Keyword Explorer, enter your seed keyword into Explore by Keyword

Within Keyword Explorer > Explore by Keyword we have the ability to enter in a seed keyword or term and explore the SERP, keyword metrics, and Keyword Suggestions. In this example we’ll be scouting content ideas and featured snippets for a blog post all about homemade ice cream.

2. Click on Keyword suggestions

After entering “homemade ice cream” into the tool and clicking Analyze, we can click into Keyword Suggestions to see additional keyword ideas along with their relevancy and monthly volume.

3. Filter to see keyword suggestions that “are questions”

Considering that featured snippets are typically added to SERPs when Google is attempting to directly answer a query means that when writing a blog about homemade ice cream, we will want to know what people are asking about homemade ice cream. Within Keyword Suggestions, we can filter to display keyword suggestions which are specifically questions.

Filtering this way will allow us to see what people are asking, and how often they are asking it, in an attempt to nail down content ideas.

4. Select keywords and add to a Keyword List

Once we’ve identified some topics and questions that may be relevant to our new blog, we can select them using the checkboxes on the left and add them to a Keyword List for further analysis.

5. Find keywords with Featured Snippet opportunities

Finally, we’re going to revisit the last step from our previous workflow and filter our Keyword List by SERP Feature to see only the keywords which have a featured snippet in the SERP.

We now have a list of topic ideas and questions to consider answering in our new post all about homemade ice cream. This can help to inform our content along with the structure and markup for our posts. For example, we may decide to write a step-by-step process for how to make ice cream at home. Or we may publish a recipe for vanilla ice cream. Or we could even write a post all about the best ingredients to use when making an ice cream case to elevate our flavors. Regardless of what we decide to publish, we can now apply the tactics and strategies outlined by Crystal Carter and Britney Muller for featured snippet optimization to our shiny new list of topics.

Conclusion

Featured snippets aren’t going anywhere anytime soon — if anything, we seem to be seeing more and more varieties of them as time goes on. Identifying opportunities to optimize existing content or create new content for inclusion in them can lead to increased visibility (and possibly traffic) for your site. I hope you now feel prepared to go use the Moz Tools to scope out those prospects. With these actionable workflows in your toolkit, you’ll be able to rise to the top!

Wednesday, March 22, 2023

The ROI of Digital Accessibility

In a recent AudioEye survey of 500 business leaders and web professionals, 70% said that “cost” was their main concern when it came to digital accessibility. Many of the respondents also thought they would have to rebuild their website from the ground up in order to deliver an accessible browsing experience.

This perception of digital accessibility as a cost center without an easy remedy is one of the reasons that just 3% of the internet is accessible to people with disabilities, despite the 1.3 billion people globally who live with a disability.

In this post, I discuss three benefits of digital accessibility — and hopefully, make a case for why inclusion isn’t just the right thing to do, but a huge business opportunity.

Purple illustration of a hand holding a gavel over a human symbol.

Three reasons to prioritize digital accessibility

Many business leaders are aware of the risk of non-compliance with the Americans with Disabilities Act (ADA) and other accessibility legislation. Over the last few years, there has been a record number of digital accessibility lawsuits. More companies are receiving demand letters or being taken to court over alleged violations under the ADA. And when that happens, other business leaders pay attention.

What business leaders don’t always consider is the opportunity that digital accessibility represents, whether it’s reaching more potential customers, building a more inclusive organization, or improving the browsing experience for all users — not to mention search engines and voice assistants.

1. Digital accessibility is not an edge case

Illustration of two piles of monetary bills. On the left, $1.9 trillion the income of people with disabilities. On the right, over $10 trillion the combined income of their friends and family.

One of the biggest misconceptions about digital accessibility is that it’s some sort of edge case. In fact, people with disabilities are the largest minority in the United States.

In the United States, one in four adults lives with some type of disability. That number goes even higher when you include temporary disabilities, like broken limbs or short-term impairments following surgery or medical treatments.

According to the Global Economics of Disability 2020 report, people with disabilities control $1.9 trillion in disposable income, globally. That number reaches over $10 trillion when their friends and family are included.

By designing for accessibility, you can make your website and digital experiences work better for everyone.

2. Accessible design is good for everyone

At its core, digital accessibility is all about eliminating barriers that can prevent people from browsing your website.

By following the best practices of accessible design, you can help ensure that everyone can interact with your digital content — regardless of age, disability, or any other factor.

For example, the World Wide Web Consortium’s (W3C) Supplemental Guidance to WCAG 2 includes best practices for clear and understandable content, such as:

  • Avoiding double negatives, such as “Time is not unlimited.”

  • Using short sentences with one point per sentence.

  • Putting the key takeaway or objective at the start of a paragraph.

  • When possible, using bulleted or numbered lists.

The goal of these recommendations is to remove confusion for people with dyslexia and other learning disabilities. But it could just as easily be a general writing best practice.

Every user can benefit from simple, direct language that removes friction and gives them a clear next step. It’s the foundation of any conversion-optimized website — and it just happens to overlap with the best practices of accessible design.

3. Digital accessibility supports discoverability

There’s also a clear overlap between accessibility and discoverability. For example, sites with clear, descriptive headings — the same kinds of headings that make navigation and comprehension easier for people with disabilities — are also easier for search engines like Google to crawl.

Because of this, there’s strong evidence that Google rewards accessibility when ranking websites. In fact, its Webmaster Guidelines — which outline the best practices that help Google to find, index, and rank your site — read like accessibility guidelines — and often correlate directly with WCAG.

Accessible websites are also beneficial to users who access websites with voice search. According to the Google Mobile Voice Study, 41% of US adults and 55% of teens use voice search daily. Businesses with websites that are optimized for voice search, have a better chance of being discovered and used by potential customers.

Making the business case for digital accessibility

Illustration of monetary bills in front of a web page.

The first goal of any digital accessibility initiative should be to deliver an inclusive experience to everyone who visits your website. Not only is it the right thing to do, but it can help you reach a market that’s traditionally been underserved.

However, it’s important to note the other benefit of building an accessible website: greater conformance with accessibility standards like the Web Content Accessibility Guidelines (WCAG), which are used to assess a site’s compliance with the ADA.

Based on recent guidance from the Department of Justice, it’s clear that businesses of all sizes are expected to meet accessibility standards like WCAG in order to comply with the ADA.

When you calculate the ROI of digital accessibility, you should factor in that the cost of defending a digital accessibility lawsuit — or even settling a demand letter — can often surpass the cost of making your website accessible.

By taking a more proactive approach to digital accessibility, you can comply with the law while also turning a requirement into an opportunity to grow your business and deliver an inclusive experience to every customer.

As you invest in digital accessibility, it’s worth measuring your progress over time. To get started, you can use a free accessibility checker to assess your website’s accessibility — and then see how it improves as you implement accessibility best practices.

Monday, March 20, 2023

How to Avoid Duplicate Conversions and Recreating the Conversion Funnel for GA4

As you’re probably all too aware at this point, GA4 is coming. Old versions of Google Analytics will be switched off for pretty much everyone come June 2023.

While GA4 is improving all the time, there are quite a few things that people are used to seeing in old versions of Analytics which, at the very least, take a bit of creativity in the new world.

One example is how conversions are handled. In the old versions of Google Analytics, a conversion could only fire once per session. In GA4 conversions are just another kind of event, so it’s possible for a conversion to fire multiple times in one session.

Problem is, you might be very interested if someone signs up via your contact-us form once. But that person might reload the thank-you page, or sign up for something else via a different form on the site. That doesn’t mean you necessarily want to track two conversions.

Speaking of signing up via different forms, on some websites, users may wind up on the same thank-you page having taken very different routes to get there. If we don’t have that much control, and we’re having to rely on thank-you page views to track conversions, it can be hard for us to separate out different kinds of conversions.

In old versions of GA you could use funnels with a “required” step. You might have one goal with a funnel requiring your event page, another goal with a funnel requiring a different page, and rely on them to give you different conversions. There also isn’t an obvious way to do this in GA4.

In this post, I’m going to take you through how to:

  • Avoid double counting in GA4.

  • Automatically ignore suspicious conversions (like people landing direct on the conversion page).

  • Recreate the kind of funnels we expected in Universal Analytics (in fact we’ll make them better).

I’ll take you through a few bits in GA4 and others using Google Tag Manager. The GA4 approach is more straightforward, but the Tag Manager is more robust and can help you make sure that all of your conversion pixels are showing roughly the same information (because we’re long past the point where GA is the only place we’re recording conversions).

Managing conversions in GA4

This section is about changes we can make purely through the GA4 interface. As long as you’re sending your page views conversion events to GA4 you should be able to use these tactics without any code changes.

However: There are some limitations of doing things through GA4, for example it can mean that your GA data doesn’t line up with conversions recorded via other platforms.

Avoiding double-counting

Julius Fedorovicius (of Analytics Mania fame) has produced a fantastic guide to making sure that conversions are only recorded once per session.

You should have a read but broadly:

  • You create a custom audience based on a sequence that begins with “session_start”

  • You fire an event when someone enters that audience

  • You use that event as your conversion.

No surprise that Julius has come up with a really smart way to handle the problem of double-counting:

If you’ve created Segments in Universal Analytics Audience sequences in GA4 look very like the sequences we used to create for Segments. However, the old Segments were just a way of visualizing data, whereas Audiences in GA4 are a way of grouping data. We can use Audiences to create something new.

That distinction is important because we can do cool things like fire custom events when someone enters an audience (which Julius makes use of in this solution).

Universal Analytics Segment sequence creator

GA4 Audience sequence creator

The limitations of using Google Analytics audiences

This isn’t really a limitation as far as GA goes but it’s a consideration nonetheless. Julius’ solution is great for making sure we’re not double-counting conversions in GA, but GA probably isn’t the only way we’re recording conversions.

The average site probably has a bunch of separate conversion tracking pixels and those could end up double-counting conversions.

For example: Facebook and Google both describe how they avoid double-counting conversions, but their solutions largely rely on exactly matching transaction IDs, and even if they’re handling it okay, there’s a bunch of smaller fish out there that are also offering conversion tracking and can need a bit more hand-holding.

If we want to make sure that we’re only recording one conversion per session, it’s useful to make sure all of our conversion tracking is working in a similar way. Tag Manager is a great solution for that (I describe a solution in the Tag Manager section below).

You can also run into problems if, for example, your confirmation page is somehow indexed or bookmarked by users — people landing directly on it can lead to weird unexpected conversions. We can also use Tag Manager to guard against that a little bit.

Recreating the conversion funnel

Sticking with the GA4 interface for now, we can also adapt the AnalyticsMania approach to create our funnel-based conversions too by adding additional steps to the sequence.

For what it’s worth, conversion funnels are not the ideal way to categorize conversions. If you can use anything more direct (like the id of the form they’ve filled out, a separate thank-you page) then that’s a much more reliable way to categorize conversions. That said, we don’t live in a perfect world, and sometimes there isn’t the option to completely rebuild your conversion process.

In Fedorovicius’ example we just have two steps in our audience sequence:

  1. Session_start
    Indirectly followed by

  2. Conversion

Which basically means “someone lands on the site and then at any point during their session, they convert”.

To recreate the goal funnels you might be using in Universal Analytics - we can just add another step to the sequence. For instance:

  1. Session_start
    Indirectly followed by

  2. Visiting our event_page
    Indirectly followed by

  3. Landing on our thank you page/converting

That should mean we can create one conversion which is: Users who went through our event page and then converted.

And another conversion which is: Users who went through our sponsorship page and then converted.

There are some limitations here though, for example, what if someone:

  1. Landed on the site

  2. Visited our event page

  3. Then visited our sponsorship page

  4. Converted using the form on either.

They would fulfill the criteria for our event conversion and the criteria for our sponsorship conversion. We’d record a conversion for each and we’d end up double-counting after all.

This is also a limitation of the old Universal Analytics funnels: Just because a step in the funnel was required doesn’t mean the user can’t wander off around the site between that step and their final conversion. So, if it’s any consolation, this isn’t any worse than old Universal Analytics funnels (but we can still do better).

The problem with using “directly followed by”

You might say “well that’s easily solved — at the moment the sequence says is indirectly followed by and we can just change that to is directly followed by”.

Surely that would mean that someone is on the sponsorship page and goes directly from the sponsorship page to the thank you page, right?

Unfortunately that’s usually not what “directly followed by” means because there’s all kinds of things that can get recorded in analytics which aren’t page views.

For example if someone lands on the sponsorship page, and then scrolls down and lands on the thank you page, the thank you page view doesn’t directly follow the sponsorship page view. It goes:

  • Page view: sponsorship

  • Scroll

  • Page view: thank you

So “directly followed by” isn’t an easy solution.

How about “within x minutes”?

GA4 has a really cool feature in the sequence builder where we can set a timer in-between steps. Even outside of tracking conversions within a session we can use it to keep track of cool things like people who came to our site, didn’t convert that time, but came back and converted within the next couple days.

Jill Quick has been talking a bunch about how powerful these options are.

We could use this to say something like: person landed on our event page and then landed on our thank you page within 10 minutes.

But as I’m sure you’ve guessed, that ends up being a kind of arbitrary cut off, maybe someone spends some time thinking about how to fill out our form, or maybe someone really quickly goes to one of our other pages and converts there. This could be better than the basic funnel, but we could also end up ignoring completely legitimate conversions.

So what do we do?

Using GA4 sequences for this is kind of fine, as I say above it’s certainly not worse than Universal Analytics, but we could do better with Google Tag Manager.

Managing conversions in Google Tag Manager

These approaches require you to run all your tracking via Tag Manager. Though even aside

from this, if you’re not already using Tag Manager, I’d advise you to look into it!

Since we need to keep track of what’s happened to a user across multiple pages, these solutions are also going to make use of cookies. In case that fills you with dread, don’t worry:

  • I’m going to walk you through how to create and delete these cookies (it takes a little Javascript but it’s copy-paste and easier than you think!)

  • These aren’t the kinds of cookies designed to give away people’s information to other services.

To reiterate what I say above: While this approach takes a bit more effort than just doing things through Google Analytics it allows us to do two things:

  1. Make sure all of our various tracking tags are firing in the same way

  2. Have more fine grained control, particularly if we’re trying to categorise different paths to conversion.

Avoiding double-counting

To recap what we want to do here, we want to make sure that if someone visits our site and converts we fire a conversion. However, if they revisit a thank you page, or go through a different conversion, we don’t fire a second conversion that session.

To do that, we’re going to:

  • Set a cookie when a user converts.

  • Make sure that the cookie automatically disappears after 30 minutes of inactivity (this is the default timeout for GA4 sessions but if you think that’s too short you can set it to whatever you want).

  • Every time we go to fire a conversion, check if that cookie is present and, if it is, don’t fire the conversion.

That should mean that if someone comes to our site and converts, we’ll set the cookie, and that will stop us from firing any more conversions (GA4 or otherwise) until the user has taken a little time away from the site.

Setting a cookie in JavaScript

The first thing you need to know is that we can use Tag Manager to run any JavaScript we want. The second thing to know is that we can use JavaScript to set cookies.

So first: Go to Google Tag Manager, create a new Tag and select the Custom HTML type

Give the tag the name “[Tag] setCookieConverted” and in the html content paste:

<script>

// Get time 30 minutes from now (this is because the default GA session time out

// is half an hour and we want our cookie timeout to match)

var minutesToAdd = 30

var currentTime = new Date(); // Get current time

var newDateObj = new Date(currentTime.getTime() + minutesToAdd*60000); // Add our minutes on

// Set the domain your're working on, this is because we want our cookies to be

// accessible in subdomains (like test.example.com) if needed

var yourDomain = "example.com"

// Set a cookie called ‘converted’ with the value being ‘true’ which expires in 30 minutes

document.cookie = "converted=true; path=/; domain="+yourDomain+"; expires="+newDateObj+";"

</script>

It should look like this:

The custom HTML tag will add the content there to the page, and as soon as the page detects a new script (the one we’ve written) it’ll run that script.

What our script does is:

  • It finds the current time, and what time it’ll be in half an hour.

  • It uses that, and your domain, to set a cookie called “converted” which can be read by any page on your website.

When you go to save your tag it’ll probably say “No Triggers Selected”.

For now we’re going to click “Add trigger” and choose the “All Pages” trigger.

This is purely so that while we’re putting this together we can easily test it..

Reading our cookie value

Tag Manager has a built-in way to read cookie values using variables. So go to the variables section, create a new variable called “convertedCookie” and set the Cookie Name as “converted”.

Now, if you click the “Preview” button and open up your site we can start to look at what value the convertedCookie variable pulls through for you.

Click into the “Variables” tab and you should see convertedCookie somewhere in the list. Here’s an example with other cookies blocked out so you know what to look for.

So now we can use the value of that variable in Tag Manager as part of our logic.

Using conversion cookie in our conversion logic

Everyone’s conversion setup will be the different so this might not match what you’re doing exactly but if you’re considering using GTM I’m assuming you are firing conversions something like this:

  1. You have a trigger based on some condition (probably either a custom event or a pageview)

  2. You have a tag (or multiple tags) that send your conversion information whenever that trigger is activated.

What we’re going to do is tweak your trigger to add another condition.

Imagine that your trigger was previously firing on every thank-you page visit:

What we’re going to do is add a second condition to the trigger:

convertedCookie does not contain true

While this example uses the thank you page path, it doesn’t have to, it can be anything.

Once you make this change, you can go and test your conversion. Because you have another tag adding the converted cookie on each page view, your conversion shouldn’t fire when it normally would.

Now we just need to change our converted cookie so that it only appears after someone has converted.

At the moment we’re setting the “converted” cookie on every page view, so we’ll never get any conversions.

We need to update that so:

  • We set a cookie when someone converts.

  • Every time we load a page, if the person is marked as “converted” we reset the cookie (I‘ll explain).

Setting a cookie only when someone has converted

First: we need to remove the trigger from [Tag] setCookieConverted so it doesn’t fire at all.

Then we go to whatever tag we’re using to send our conversion, open up “Advanced Settings”, click “Tag Sequencing” and select “Fire a tag after”.

Then we select our setCookieConverted tag and check “Don’t fire if conversion tag fails”.

This should mean that whenever we send our conversion, we’ll automatically then activate our cookie tag and mark the user as converted.

So now our logic is:

  • If someone converts, we check if there is a cookie saying they recently converted already.

  • If they don’t have that cookie we send a conversion.

  • Then we automatically set that cookie.

To test this, you can either clear the cookie or wait for it to expire. Here are instructions for how to clear cookies in Google Chrome (which you’re probably using if you’re working with tag manager).

Now, if you got into GTM preview and click around you should be able to look at your variables and see that convertedCookie is back to being ‘undefined’.

If you convert, you should see that both tags fire — your conversion tag and your setCookieConverted tag.

But if you convert again (reload the page, re-fill the form, whatever you’ve got to do) you should see that neither tag fires.

Congratulations! You’re filtering your conversions to avoid recording a conversion more than once for someone in a 30 minute window.

We just want to make one last tweak now.

Refreshing the cookie if it has been set

Our cookie has a 30 minute expiration. That means it’ll stick around for 30 minutes and then automatically be deleted from the browser. But what if someone hangs around on our website for more than half an hour, reading a blog post or something, and converts again?

To help deal with that, we’re going to add another trigger which checks if the user has recently converted, and if they have, refreshes the cookie with each new page load.

Head back to [Tag] setCookieConverted

At this point it should have no firing triggers. We’re going to add one back in.

Click the blue plus sign in this screen, and again in the next screen that comes up, we’re going to create a new trigger.

In the new trigger, we set it to fire only on page views where convertedCookie contains true.

So this gets a little bit circular, but basically:

  • When someone converts we set a “converted” cookie for the next half hour.

  • Every time someone loads a page, if they have a “converted” cookie we reset that cookie for another 30 minutes.

  • If at any point the user doesn’t load a new page for 30 minutes, the cookie will expire, which means our refresh won’t be triggered.

You can test this by clicking around your site with the GTM preview. Once you’ve converted, the [Tag] setCookieConverted should fire on every new page load.

Wrapping up

All you need to do now is make sure that all of your conversion tags use that same trigger (the one that has the condition that convertedCookie isn’t “true”). Once that’s set up, they should all behave the same — only recording one conversion per session unless someone clears their cookies or just hangs around on one page for a very long time.

What if we find we’re getting weird conversions where users haven’t visited any other pages on the site?

I have worked with sites in the past where:

  • There’s useful information on the thank-you page and users have been keeping it open/coming back to it.

  • Confirmation pages have been indexed in Google or people are finding their way to the conversion page some other way.

That can lead to weird tracked conversions that don’t correspond to actual conversions. While these problems should be solved at source, we can also clear up our analytics using the steps in “Creating a conversion funnel” below.

Creating a conversion funnel

This builds on the cookie meddling we’ve done in the last section, so if you haven’t read that bit, it’s worth taking a look!

If you’re here not because you want a specific funnel but because you want to deal with weird conversions where users just land straight on the conversion page - don’t worry you follow these instructions exactly the same, you just set the trigger for every page except your conversion page (I’ll take you through that).

Setting a “path” cookie

Just like the “converted” cookie before, we’re going to create a new cookie that records the location of the current page.

Create a new Tag called [Tag] setCookiePath, choose “Custom HTML” and add the following JavaScript

<script>

// Get time 30 minutes from now (this is because the default GA session time out

// is half an hour and we want our cookie timeout to match)

var minutesToAdd = 30

var currentTime = new Date(); // Get current time

var newDateObj = new Date(currentTime.getTime() + minutesToAdd*60000); // Add our minutes on

// Set the domain your're working on, this is because we want our cookies to be

// accessible in subdomains (like test.example.com) if needed

var yourDomain = "therobinlord.com"

var pagePathName = window.location.pathname // Get location of current page

// Set a cookie called ‘converted’ with the value being ‘true’ which expires in 30 minutes

document.cookie = "conversionPath="+location+"; path=/; domain="+yourDomain+"; expires="+newDateObj+";"

</script>

It should look like this:

This will save a cookie that records the location of the page. The first time it’s loaded it will create a new cookie with that information, every time after it’ll replace the value.

We’ll use this to make sure that whichever funnel page our user interacted with last is the one we record.

Triggering on your funnel pages

In creating our “funnel” we’re assuming that there are certain pages a user passes through in order to convert. So we’re going to set this to trigger only when one of those funnel pages is involved.

In your [Tag] setCookiePath tag - click to add a new trigger and create a new trigger.

We’re going to configure our tag to activate on every user click. This means that if a user is hopping between different funnel pages, each one will overwrite the cookie as they click around but only the one they interacted with last will be the one that sticks around in the cookie value.

Getting our funnelCookie

As in the double-counting instructions, create a new variable. But this time, call it funnelCookie and set the “Cookie Name” to conversionPath.

Once you’ve done that you should be able to test by using preview, going to any old page of your site (as long as it’s not one of your funnel pages) and checking funnelCookie in the Variables (it should be undefined).

Then go to one of your funnel pages, you should be able to see the cookie change.

As you visit other pages on the site, funnelCookie should stay the same, unless you visit another funnel page.

Changing our conversions based on the funnelCookie

Now, there are smart things you could do here with extracting the value of funnelCookie and putting that into a variable in your conversion tag but the setup for every tag will be different and I want to give you an option for if you’re not able to do that.

This will create a little bit more mess in your Tag Manager account because you’ll be duplicating some of your trigger and conversion tags.

First, let’s go back to the conversion trigger we were working on before. It looked like this when we left it:

We’re going to add in another condition:

funnelCookie contains event-page

This means now that this conversion will only fire if the last funnel page our user passed through was the event-page.

After this we can duplicate this trigger, our conversion tags, and, for our other set of conversions, change the funnelCookie value for the trigger.

Maybe instead we make it:

funnelCookiecontains form-page

Now you have two sets of conversions, each of which will fire based on which funnel page the user passed through. From there you can edit the values sent.

A couple caveats

Instead of duplicating our conversion tags it would be much better to pull in the value of the funnelCookie variable and use that to just dynamically change some of the values we’re sending as part of the conversion.

With this approach, you also run the risk of not recording any conversions at all if a user hasn’t passed through one of your funnel pages. That might be what you want, but it’s worth bearing that risk in mind in case you think people might take legitimate-but-unusual routes to conversion.

While I can’t take you through the process of updating all of your conversion tags, one option to make this information more ready for filling out conversion tags (and to optionally set a fallback in case you want to avoid losing conversions) is to use a lookup table like this, where you take the funnelCookie value and categorise the values.

Then instead of adding the funnelCookie value in your trigger, you keep the trigger the same and pull in the lookup table value.

Triggering on any page except your conversion page

If you’re not concerned about constructing page funnels but you want to make sure that users have visited at least one page before converting. There are a couple changes:

  • You trigger [Tag] setCookiePath based on any Page View that isn’t your confirmation page


  • You don’t bother creating different conversion flows, you just have one flow, but you still add a funnelCookie requirement which says that your funnelCookie has to be some page rather than undefined

Conclusion

Hopefully this has helped you get an idea of how to get more control of the conversions being recorded on your site, whether that’s entirely through GA4 or using the power of Tag Manager.

Happy tracking!

Friday, March 17, 2023

You're Measuring Your Branded SERP Wrong – Whiteboard Friday

Controlling the consumer experience of your brand is key to how people see it and how they interact with it. For SEOs, the part of brand experience that we control the most is the SERP, yet traditional ways of measuring brand reach on the SERP often fall short.

Today, Dominic talks through an example of how they fall short, and how we can do better.

infographic outlining better ways to measure your branded serp

Click on the whiteboard image above to open a high resolution version in a new tab!

Video Transcription

Howdy, Moz fans. I'm Dominic. I am the founder of Piped Out, and I'm here to talk to you about measuring your brand. If you have a product, controlling the consumer experience of that brand is very, very important. How do they see it and how do they interact with it?

As SEOs, the bit of that brand experience that we control the most are the SERPs, but traditional ways of measuring that often fall short. We're going to talk through an example of how they fall short and how we can do better. So I'm going to use the example up here of cyberpunk.net. There was a video game that came out a little while ago called Cyberpunk 2077. I'm just picking this as an example of a product that had some real brand reputation problems.

It did not have a good launch. So if you were an SEO working for them, how might you've gone about controlling and measuring how well you were controlling their brand experience? Over here we've got our SERP. Our SERP is we've got some fairly standard blue link results where we've got a title and a meta description. We've got some other richer elements, things like a video block down here anda People Also Ask block. We've got a knowledge block over to the side. If we're looking at this in a rank tracker, we'd go, okay, so for cyberpunk.net, the primary domain that we control, here's our rank, and over time we've moved from five to four, fantastic.

Outside of brand, this is not a terrible way to do it. This is, of course, for a single keyword because we can see the sort of fluctuations there. If we have multiple keywords, we'll have an aggregate so that it will become an average. It's probably going to look a bit smoother. Maybe we've got something like bucket ranks sitting behind here, so the number of keywords that rank position one, number of keywords that rank position two, and we've got that to give us a bit of a richness over time.

But fundamentally, this is still a very simple picture for a branded SERP because, firstly, what we need to think about is how people have looked at SERPs has changed a bit over time. As SERPs have gotten richer, people like Nielsen have seen how we no longer just read straight down. We now ping pong around a bit more. We're willing to interact with more of the SERP. On a branded SERP, this assumption here, Google has domain crowding, so ideally they're trying not to show too many of each domain on each particular SERP.

But on a branded SERP, your goal is not to rank with one URL. Your goal is to rank with many URLs, and you have the ability to rank with many URLs unlike normal. For a branded term, like, for this example, it could be "Cyberpunk 2077." It could be something slightly more loaded, like "is cyberpunk good." It could be something slightly less loaded, like "is cyberpunk out." All of these are branded terms, where I think the publisher has a really good chance of appearing for multiple places.

So the green one, right at position four or five, is our cyberpunk.net. But actually we also own position three. That's our publisher domain, the people who published the game. So you've got the game website and the publisher thing. We also might want to count this as a win for us. We've got a journalist who's a really good, basically, champion for our brand. They really like the game, and they've written a really positive article that's down here.

There's one up here in red. This is a negative article. This is someone who is not having such a good time with it. We might have our Twitter account and any other number of things, the YouTube accounts, all of these other bits that we could be getting onto our branded SERP. If we're just measuring by rank, we're only ever going to get one single number to sum up all of this richness. It's just not good enough for brand. So how can we do better?

How do we take this? So firstly, what we need is a rich SERP data model. You can get this from anywhere. In practice, what we do at Piped Out is we use a service called DataForSEO, which is an API that gives a very rich SERP data model. We'd highly recommend. But there are plenty of services that offer this, and it really doesn't matter which one you pick. What's important is that you have a rich enough SERP data model to get all the ins and outs of each of these little SERP features.

So I don't just have the People Also Ask box as a single block. I have each individual question in the People Also Ask box with the title that ranks and then the URL that is below that. Same thing for the video. I need a rich enough SERP data source that for the video element, I don't just have the URL, I also get the source for a video block. Google has a little source there, and that's actually the name of the account.

When you go and get all that rich data, you can then define what is yours or what you want to be yours. We don't technically own this positive article, but we might count it as ours. So you can go and build up this definition of like all of the different things that you think are valuable. You then take this SERP data model and you say, okay, and you calculate the size for each of these things.

So how much is this size in pixels? This is an ordinary SERP block, so it's probably about 180 pixels tall. So you calculate the height of all of these different elements that you own, and you can turn that, and you could do area as well, but height for a more basic version, and you could turn that into this, the percentage of owned SERP measured by pixels. What percentage of this SERP do you own?

Again, our definition of ownership is whatever we want it to be. This is enabled by having a very rich SERP data source. Now, we are getting a little bit of something here, which is that with rank, we obviously know five is better than four. We lose a little bit of that context when we come with something like this, which is that obviously ranking down here is not as good as ranking up here. But when we're measuring size and all of these different elements, again, we can't literally have all of them there.

So we have to have some sort of compromise for how do we measure importance without going just back to rank. I think an excellent compromise is to measure above the fold and first page, so the percentage of the pixels of the SERP that you own above the fold on desktop and mobile and on the first page by desktop and by mobile. So the idea is that you have a graph that looks something like this, where we can say, "Okay, for our site, for cyberpunk, for the set of keywords that we're looking at, we own a growing percentage of the mobile pixels above the fold. Great, we're controlling our brand experience."

That gives us essentially a good idea of how what we're doing as SEOs is controlling that branded SERP. Then when you're doing brand projects and you're trying to enrich and fill on this domain, you're getting your results. You're correctly measuring your results rather than having a very simplified picture where you can't do this. Technically, like I said, this practically looks like finding a rich SERP data source.

In our case, at Piped Out, we take DataForSEO and we pump it into BigQuery. But again, it could be anything. Lots of great SERP API data sources do this. STAT might also do this. Don't know. Go ask STAT because it's a Moz product and this is a Moz blog. That's pretty much it.

Go get that data source, use it to build these sort of dashboards, and you can get better insight into how well you're controlling your brand. Thanks and we'll see you next time.

Video transcription by Speechpad.com