Back to Top

Responsive Search Ads take center stage – are you prepared?

Responsive Search Ads – RSA for short – are not the new kids on the block. RSAs have been a part of the PPC ecosystem for a few years. That being said, RSAs have been a hot topic in 2022. Why all the hubbub about them now?

This summer, the preceding ad type, Expanded Text Ads, is being deprecated. This puts Responsive Search Ads front and center for advertisers as the singular text ad type for search campaigns. Let’s dig in a little bit deeper on RSAs, the change and how you can maximize your potential with RSAs.

Why RSAs matter

Responsive Search Ads are all about serving the right message at the right time. RSAs are a flexible ad experience that show more customized content to reach your customers. These ads adapt your text ads to closely match what someone is searching for when they search for it.

Further, RSAs can help to reduce bulky operations and save time. Advertisers provide up to 15 headlines and up to four descriptions. All of these components can create over 40,000 possible ad permutations! Find efficiency in evaluating ads through A/B tests and automatically determine what creative content works best with different queries. 

Expanded Text Ad deprecation

The deprecation of Expanded Text Ads is coming in two waves this summer. The first wave was for Google Ads on June 30th. The second wave will be Microsoft Advertising. As of August 29th, advertisers will no longer be able to create new Expanded Text Ads.

On both platforms, previously existing Expanded Text Ads will continue to serve. Note that though you can toggle these ads on and off, you will no longer be able to edit the ads. 

Maximize your potential with RSAs

How can you maximize your potential with RSAs? First and foremost, get started by launching RSAs alongside Expanded Text Ads today if you haven’t already. Here are some additional best practices to consider when working with RSAs:

  • Convert top-performing content from your existing Expanded Text Ads into distinct RSA headlines and descriptions.
  • Ensure there are at least two to three Responsive Search Ads in all of your ad groups.
  • Include top-performing keywords and clear calls to action within your headline and description assets.
  • Create at least 11-15 headlines and use a combination of short and long headlines to maximize character count across all devices.
  • Make the content as distinct as possible:
    • Avoid repetitive language
    • Create unique headlines
    • Consider additional product or service benefits or features
    • Test a clear call-to-action
    • Include shipping and return information
  • Take RSAs to the next level by customizing your assets:
    • Ad customizers
    • Countdown timer
    • Location insertion
    • Dynamic keyword insertion
  • Place the Universal Event Tracking (UET) tag across your website with conversion tracking enabled to provide stronger optimization signals for the RSA algorithm.
  • Review asset strength, combination reports and other details within the Assets tab to optimize your assets with low impressions.

Responsive Search Ads have taken center stage in search campaigns. If you were sleeping on RSAs before, it is time to wake up and take notice. Start creating RSAs to launch alongside your existing Expanded Text Ads today. Happy ad testing, everyone!

The post Responsive Search Ads take center stage – are you prepared? appeared first on Search Engine Land.

Reblogged 1 week ago from

21 PPC lessons learned in the age of machine learning automation

What you’re about to read is not actually from me. It’s a compilation of PPC-specific lessons learned by those who actually do the work every day in this age of machine learning automation.

Before diving in, a few notes:

  • These are “lessons already learned.”
  • Things change (the platforms giveth, taketh, and sometimes just plain change the way campaigns need to be managed).
  • Below are a mix of strategic, tactical, and “mindset-approach” based lessons.

Lesson 1: Volume is critical to an automated strategy

It’s simple, a machine cannot optimize toward a goal if there isn’t enough data to find patterns.

For example, Google Ads may recommend “Maximize Conversions” as a bid strategy, BUT the budget is small (like sub $2,000/mo) and the clicks are expensive.

In a case like this, you have to give it a Smart Bid strategy goal capable of collecting data to optimize towards.

So a better option might be to consider “Maximize Clicks” or “Search Impression Share”.  In small volume accounts, that can make more sense.

Lesson 2: Proper learning expectations

The key part of “machine learning” is the second word: “learning.”

For a machine to learn what works, it must also learn what doesn’t work.

That part can be agonizing.

When launching an initial Responsive Search Ad (RSA), expect the results to underwhelm you. The system needs data to learn the patterns of what works and doesn’t. 

It’s important for you to set these expectations for yourself and your stakeholders. A real-life client example saw the following results:

  • RSA Month 1: 90 conversions at $8 cost per.
  • RSA Month 2: 116 conversions at $5.06 cost per.

As you can see, month two looked far better. Have the proper expectations set!

Lesson 3: Old dogs need to learn new tricks

Many of us who’ve been in the industry a while weren’t taught to manage ad campaigns the way they need to be run now. In fact, it was a completely different mindset. 

For example, I was taught to:

  • Think of the “ad as a whole” as opposed to thinking about individual snippets and the possible combinations and how they might combine to make creative that performs. 
  • A/B testing using the Champion/Challenger methodology where the “control” is always the top performing creative and you can only alter one specific element at a time otherwise you have no idea what actually caused the performance shift. Now, in a high-volume campaign, machine learning may determine that one assembly of creative snippets performs better for an audience subset while another variation performs better for a different one.

Lesson 4: Stay on top of any site changes

Any type of automation relies on proper inputs. Sometimes what would seem to be a simple change could do significant damage to a campaign.

Some of those changes include:

  • Change to the URL on a “thank you page”
  • Addition of another call to action on the landing page
  • Plugin or code that messes up page load
  • Addition or removal of a step in the conversion path
  • Replacing the hosted video with a YouTube or Vimeo embed

Those are just a few examples, but they all happened and they all messed with a live campaign. 

Just remember, all bets are off when any site change happens without your knowledge!

Lesson 5: Recommendations tab

The best advice to follow regarding Recommendations are the following: 

  • Take them with a critical eye. Remember this is a machine that doesn’t have the context you do. Give the recommendations a look. 
  • Be careful where you click! It’s easy to implement a recommendation, which is great unless you make an unintentional click.

Lesson 6: Closely watch Search Impression Share, regardless of your goal

Officially defined as “the impressions you’ve received on the Search Network divided by the estimated number of impressions you were eligible to receive,” Search Impression Share is basically a gauge to inform you what percentage of the demand you are showing to compete for. 

This isn’t to imply “Search Impression Share” is the single most important metric. However, you might implement a smart bidding rule with “Performance Max” or “Maximize Conversions” and doing so may negatively impact other metrics (like “Search Impression Share”).

That alone isn’t wrong. But make sure you’re both aware and OK with that.

Lesson 7: Stay on top of changes (to the ad platforms)

Sometimes things change. It’s your job to stay on top of it. For smart bidding, “Target CPA” no longer exists for new campaigns. It’s now merged with “Maximize Conversions”.

Smart Shopping and Local Campaigns are being automatically updated to “Performance Max” between July and September 2022. If you’re running these campaigns, the best thing you can do is to do the update manually yourself (one click implementation via the “recommendations” tab in your account).

Why should you do this?

  • Eliminate any surprises due to an automatic switchover. There probably wouldn’t be any, but you never know and it’s not worth the risk.
  • Reporting will be easier as YOU will pick when it happens so you can note it properly
  • There’s a general peace of mind when you are the one to make the update happen at a time of your choosing.

Lesson 8: Keep separate records of your rules

This doesn’t need to be complicated. Just use your favorite tool like Evernote, OneNote, Google Docs/Sheets, etc. Include the following for each campaign:

  • The what (goals, smart bidding rules, etc.)
  • Why (Your justification for this particular setup)

There are three critical reasons why this is a good idea:

  • You deserve to take a holiday at some point and the records are helpful for anyone who may be watching your accounts.
  • At some point, you’re going to be questioned on your approach. You’ll get questions like “Why, exactly did you set it up that way?” Having the record readily available come in handy.
  • It’s helpful for you to remember. Anytime you can get something “out of your head” and properly documented somewhere, it’s a win!

Lesson 9: Reporting isn’t always actionable

Imagine you’re setting up a campaign and loading snippets of an ad. You’ve got:

  • 3 versions of headline 1
  • 4 versions of headline 2
  • 2 versions of headline 3
  • 3 versions of the first description
  • 2 versions of the second description
  • The list goes on…

Given the above conditions, do you think it would be at all useful to know which combinations performed best? Would it help you to know if a consistent trend or theme emerges?  Wouldn’t having that knowledge help you come up with even more effective snippets of an ad to test going forward? 

Well, too bad because that’s not what you get at the moment.

Lesson 10:  Bulk upload tools are your friend

If you run a large volume account with a lot of campaigns, then anytime you can provide your inputs in a spreadsheet for a bulk upload you should do it. Just make sure you do a quality check of any bulk actions taken.

Menu in Google Ads where “Bulk Actions” is located

Lesson 11: ALWAYS automate the mundane tasks

Few things can drag morale down like a steady stream of mundane tasks. Automate whatever you can. That can include:

  • Pausing low performing keyword
  • Pause low performing ads
  • Scheduling
  • Bid adjustments based on success metrics (example Maximize Conversions)
  • Bid adjustments to target average position
  • Bid adjustments during peak hours
  • Bid to impression share
  • Controlling budgets

Lesson 12: Innovate beyond the default tools 

To an outsider, managing an enterprise level PPC campaign would seem like having one big pile of money to work with for some high-volume campaigns. That’s a nice vision, but the reality is often quite different.

For those who manage those campaigns, it can feel more like 30 SMB accounts. You have different regions with several unique business units (each having separate P&L’s).

The budgets are set and you cannot go over it. Period.

You also need to ensure campaigns run the whole month so you can’t run out of budget on the 15th.

Below is an example of a custom budget tracking report built within Google Data Studio that shows the PPC manager how the budget is tracking in the current month:

Lesson 13: 10% rule of experimentation

Devote 10% of your management efforts (not necessarily budget) to trying something new. 

Try a beta (if you have access to it), a new smart bidding strategy, new creative snippets, new landing page, call to action, etc.

Lesson 14: “Pin” when you have to

If you are required  (for example by legal, compliance, branding, executives) to always display a specific message in the first headline, you can place a “pin” that will only insert your chosen copy in that spot while the remainder of the ad will function as a typical RSA. 

Obviously if you “pin” everything, then the ad is no longer responsive. However, it has its place so when you gotta pin, you gotta pin!

Lesson 15: The “garbage in, garbage out” (GIGO) rule applies

It’s simple: The ad platform will perform the heavy lifting to test for the best possible ad snippet combinations submitted by you to achieve an objective defined by you.

The platform can either perform that heavy lifting to find the best combination of well-crafted ad snippets or garbage ones. 

Bottom line, an RSA doesn’t negate the need for skilled ad copywriting.

Lesson 16: Educate legal, compliance, & branding teams in highly regulated industries

If you’ve managed campaigns for an organization in a highly regulated industry (healthcare, finance, insurance, education, etc.) you know all about the legal/compliance review and frustrations that can mount. 

Remember, you have your objectives (produce campaigns that perform) and they have theirs (to keep the organization out of trouble). 

When it comes to RSA campaigns, do yourself a favor and educate the legal, compliance, and branding teams on:

  • The high-level mechanics
  • Benefits
  • Drawbacks
  • Control mechanisms available
  • How it affects their approval process

Lesson 17: Don’t mistake automate for set and forget

To use an automotive analogy, think of automation capabilities more like “park assist” than “full self driving.” 

For example, you set up a campaign to “Bid to Position 2” and then just let it run without giving it a second thought. In the meantime, a new competitor enters the market and showing up in position 2 starts costing you a lot more. Now you’re running into budget limitations. 

Use automation to do the heavy lifting and automate the mundane tasks (Lesson #11), but ignore a campaign once it’s set up.

Lesson 18: You know your business better than the algorithm

This is related to lesson #5 and cannot be overstated.

For example, you may see a recommendation to reach additional customers at a similar cost per conversion in a remarketing campaign. Take a close look at the audiences being recommended as you can quickly see a lot of inflated metrics – especially in remarketing. 

You have the knowledge of the business far better than any algorithm possibly could. Use that knowledge to guide the machine and ensure it stays pointed in the right direction.

Lesson 19: The juice may not be worth the squeeze in some accounts

By “some accounts,” I’m mostly referring to low-budget campaigns.

Machine learning needs data and so many smaller accounts don’t have enough activity to generate it.

For those accounts, just keep it as manual as you can.

Lesson 20: See what your peers are doing

Speak with one of your industry peers, and you’ll quickly find someone who understands your daily challenges and may have found ways to mitigate them.

Attend conferences and network with people attending the PPC track. Sign up for PPC webinars where tactical campaign management is discussed.

Participate (or just lurk) in social media discussions and groups specific to PPC management.  

Lesson 21: Strategic PPC marketers will be valuable

Many of the mundane tasks (Lesson #11) can be automated now, thus eliminating the need for a person to spend hours on end performing them. That’s a good thing – no one really enjoyed doing most of those things anyway. 

As more “tasks” continue toward the path of automation, marketers only skilled at the mundane work will become less needed. 

On the flipside, this presents a prime opportunity for strategic marketers to become more valuable. Think about it – the “machine” doing the heavy lifting needs guidance, direction and course corrective action when necessary.

That requires the marketer to:

  • Have a thorough understanding of business objectives in relation to key campaign metrics.
  • Guide the organization’s stakeholders setting overall business strategy on what’s possible with PPC.
  • See how the tactical capabilities to manage a campaign can further a specific business objective.

The post 21 PPC lessons learned in the age of machine learning automation appeared first on Search Engine Land.

Reblogged 1 week ago from

Google search quality raters guidelines updated today

Google has updated its search quality raters guidelines today, this is an update from the October 2021 update. You can download the full 167-page PDF raters guidelines over here. This version has refreshed language in the new overview section, a refined YMYL section, with more on low-quality content, YMYL, E-A-T, and more.

What is new. Google posted these bullet points on what is new on the last page of this PDF.

  • Refreshed language to be aligned with the newly published Search Quality Rater Guidelines: An Overview
  • Refined YMYL to focus on topics that require a high level of accuracy to prevent significant harm; added a new table of examples and refreshed existing examples
  • Added clarifications to Low and Lowest Page Quality sections to emphasize that the type and level of E-A-T depends on the purpose of the page, and that low quality and harmful pages can occur on any type of website
  • Refactored language throughout to be applicable across all devices types
    Minor changes throughout (updated screenshots; removed or updated outdated examples and concepts; removed user location when irrelevant; etc.)
  • Also, the previous version was a 171-pages, this revised document is 167-pages.

Why we care. Although search quality evaluators’ ratings do not directly impact rankings (as Google clarified in the document), they do provide feedback that helps Google improve its algorithms. It is important to spend some time looking at what Google changed in this updated version of the document and compare that to last year’s version of the document to see if we can learn more about Google’s intent on what websites and web pages Google prefers to rank. Google made those additions, edits, and deletions for a reason.

You can download the 167-page PDF raters guidelines over here.

The post Google search quality raters guidelines updated today appeared first on Search Engine Land.

Reblogged 1 week ago from

Want Your Drip Campaign to Convert? Make Sure it Has These Five Elements.

Drip campaigns are effective and powerful. The reason they work so well is that they’re a soft-selling approach. An email to your subscribers every few days with resources and helpful tips means they can buy when they’re ready. And you’re able to build trust with them in the process.  But what if your drip campaigns…

The post Want Your Drip Campaign to Convert? Make Sure it Has These Five Elements. appeared first on Benchmark Email.

Reblogged 1 week ago from

Neeva shares search rating guidelines for technical queries

Neeva has revealed how it instructs human evaluators to rate its search results, specifically for technical queries. 

Like Google (which, coincidentally, updated their quality rater guidelines today), Neeva uses human raters to assess the quality of its search results.

The guidelines break down into three key areas: query understanding, page quality rating and page match rating. 

Query understanding. This is all about figuring out the intent behind the user’s search query. Neeva breaks down the types of queries into the following categories:

  • How to: User is searching for instructions to complete a task.
  • Error/troubleshooting: Something went wrong, user is searching for a solution.
  • Educational/learning: Who/what/where/when/why.
  • Product seeking/comparison: User is searching for a new product/tool or comparing products/tools.
  • Navigational: User is searching for information on a person or entity.
  • Ambiguous: Unclear what the user is searching for.

Page quality rating. Neeva has broken down pages into three levels of quality: low, medium and high. Advertising usage, page age and formatting are critical elements.

Here’s a look at each:

Low quality:

  • Dead pages
  • Malware pages
  • Porn/NSFW pages
  • Foreign Language
  • Pages behind a paywall
  • Clones

Medium quality:

  • 3+ ads when scrolling / 1 large banner ad / interstitial or video ads
  • Page is 5+ years old
  • Page loads slowly
  • Format of page makes it difficult to extract information
  • Forked github repo
  • Pages behind a login or non-dismissable email capture
  • Question page with no response

High quality:

  • Meet the age criteria
  • Meet the ads criteria
  • Be well formatted

Page match. Neeva has its raters give a score to the match between the query and a webpage, between 1 (significantly poor) to 10 (vital). Here’s that scale:

  1. Significantly Poor Match. Does not load, page is inaccessible.
  2. Especially Poor Match. Page is wholly unrelated to the query. Missing key terms.
  3. Poor Match. Page may have some query phrases, but not related to the query.
  4. Soft Match. Page is related to query, but broad, overly specific, or tangential.
  5. On Topic but Incomplete Match. Page is on topic for the query, but not useful in a wide scope, potentially due to incomplete answers or older versions.
  6. Non-Dominant Match. Page is related to the query and useful, but not for the dominant intent shown.
  7. Satisfactory Match. This page satisfies the query, but may have to look elsewhere to round out the information.
  8. Solid Match. This page satisfies the query in a strict sense. There is not much extra, or beyond what is asked for.
  9. Wonderful Match. This page satisfies the query in a robust, detailed sense. It anticipates questions/pitfalls that might come up and/or adds appropriate framing to the query.
  10. Vital Match. This is a bullseye match. It is not available on all queries. The user has found exactly what they were looking for.

Read the full guidelines. They were published on the Neeva blog, here.

Why we care. It’s always smart to understand how search engines assess the quality of webpages and content, and whether it matches the intent of the search. Yes, Neeva has a tiny fraction of the search market share. But the insights Neeva shared can provide you some additional ways to think about, assess and improve the quality of your content and webpages.

The post Neeva shares search rating guidelines for technical queries appeared first on Search Engine Land.

Reblogged 1 week ago from

Google search quality rater guidelines update: What has changed

Google has made a variety of significant updates to its Search Quality Rater Guidelines.

The most significant overhauls were to Google’s definitions of YMYL (Your Money, Your Life), and the extent to which E-A-T matters as a matter of page quality.

Google provided new, clear definitions for what it means for content to be YMYL, mostly framed around the extent to which the content can cause harm to individuals or society. Google also provided a new table establishing clear examples of what it means for content to be YMYL or not.

In the newest update to the guidelines, Google also explained that for highly YMYL content – E-A-T is crucial above all other factors. Google also explained that it’s possible to have low-quality content on otherwise trustworthy and authoritative sites.

Your Money, Your Life (YMYL) Topics – Section 2.3

Google completely reframed its definition of YMYL (Your Money, Your Life). In the previous version of the Quality Rater Guidelines, YMYL topics were broken down into the following categories:

  • News and current events
  • Civics, government and law
  • Finance
  • Shopping
  • Health and safety
  • Groups of people
  • Other

Google completely removed these categories.

The new version of the Quality Rater Guidelines now defines YMYL by its potential to cause harm. 

Topics that present a “high risk of harm,” can significantly impact the “health, financial stability, or safety of people, or the welfare or well-being of society.”

Google then defines who may be harmed by YMYL content, including the person viewing the content, other people affected by the viewer, or groups of people or society as a whole. This could potentially be in reference to violent, extremist or terrorist content.

Google then defines YMYL topics as either being inherently dangerous (violent extremism), or harmful because presenting misinformation related to the topic can be harmful. For example, providing bad advice related to heart attacks, investments or earthquakes could cause harm to the user.

Instead of listing individual categories that may be considered YMYL, as in previous versions of the guidelines, Google now asks quality raters to think of YMYL in terms of four types of harm YMYL content can cause for individuals or society:

  • Health or safety
  • Financial security
  • Society
  • “Other” 

In another new addition, Google claims that a “hypothetical harmful page” about a non-harmful topic, such as the “science behind rainbows,” is technically not considered YMYL. According to their updated definition, the content must have the potential to cause harm or otherwise impact peoples’ well-being. 

In another big update, Google claims that many or most updates are not YMYL because they do not have the potential to cause harm.

Google also stated for the first time that YMYL assessment is done on a spectrum.

To clarify these new statements, Google provided a new table on page 12 of the guidelines, which specifically delineates the types of topics that Google considers YMYL or not, with clear examples.

Low Quality Pages – Section 6.0

Google revamped its definition of what it means to be a low-quality page.

In a previous version, Google claimed a page may be low quality, in part, because the creator of the main content may lack sufficient expertise for the purpose of the page. This statement was deleted.

Google now expands upon the role of E-A-T in determining whether a page is low-quality in three new paragraphs:

Google explains that the level of E-A-T required for the page depends entirely on the topic itself and the purpose of the page.

Topics that only require everyday expertise don’t require that the content creators provide information about themselves.  

Google also suggests that a low-quality page can exist on an otherwise authoritative website, like an academic site or a government site. The topic itself of the page is where YMYL comes into play – if the content could potentially cause harm to the user, quality raters must evaluate that aspect when determining the quality of the page. 

Lacking Expertise, Authoritativeness, or Trustworthiness (E-A-T) – Section 6.1

Google added a bullet point in its definition of what it looks like to lack E-A-T when determining whether a page is low-quality:

  • “Informational [main content] on YMYL topics is mildly inaccurate or misleading”

In another new addition, Google once again repeated that the level of E-A-T a page requires depends on the purpose and the topic of the page. If the page discusses YMYL topics (and potentially presents harm to the user or others), E-A-T is critical.

Even if the website has a positive reputation, if there is a significant risk of harm, the page must be rated as low quality.  

Lowest Quality Pages – Section 7.0

Google inserted a new section in the “lowest quality pages” section suggesting that even authoritative or expert sources can still present harmful content. This could include hacked content or user-uploaded videos.

Just because content exists on a site that otherwise demonstrates good quality, if the content itself is deceptive, harmful, untrustworthy or spam, this still requires a “lowest quality” rating.

Google’s new document about Search Quality Rater Guidelines

In addition to updating the Search Quality Rater Guidelines, Google also published a new resource describing how the Search Quality Rater Guidelines work. This resource includes sections about how search works, improving search and the quality rating process. 

This document provides the most comprehensive overview to date of the role Google’s quality raters play in evaluating how well Google’s proposed changes are in line with Google’s own quality guidelines. 

Google also provides information about who the raters are, where they are located and how the rating process works. 

Why these changes matter

For those interested in understanding how Google defines the concepts of YMYL and E-A-T, Google’s updated Quality Rater Guidelines provide some new guidance about what they aim to achieve with their algorithm. 

As opposed to thinking about YMYL in terms of business or content categories, Google asks raters to think about the extent to which content can cause harm to users. 

Google also clarified that everyday expertise is sufficient for many types of content, but E-A-T is of the utmost importance when the content qualifies as YMYL (it has the potential to cause harm to individuals or society, or can affect one’s financial wellbeing, health or safety). 

The post Google search quality rater guidelines update: What has changed appeared first on Search Engine Land.

Reblogged 1 week ago from

Webinar: The genius behind QR-code marketing

QR codes are shaking up the marketing world (did you see that Coinbase Superbowl commercial?). This seminar will teach you everything you need to know about how QR codes can be used to unlock mobile engagement and revenue, channel attribution, and first-party data in a cookieless world.

Join QR marketing expert Brian Klais, CEO of URLgenius, to learn enterprise-grade QR strategies and best practices you won’t hear anywhere else and change how you think about QR code opportunities.

Register today for “Unlock the Cutting-Edge Potential of QR Codes” presented by URLgenius.

The post Webinar: The genius behind QR-code marketing appeared first on Search Engine Land.

Reblogged 1 week ago from

Testable Frontend: The Good, The Bad And The Flaky

I often come across front-end developers, managers, and teams facing a repeating and legitimately difficult dilemma: how to organize their testing between unit, integration, and E2E testing and how to test their UI components.

Unit tests often seem not to catch the “interesting” things happening to users and systems, and E2E tests usually take a long time to run or require a messy configuration. In addition to that, there are so many tools around (JEST, Cypress, Playwright, and so on). How does one make sense of it all?

Note: This article uses React for examples and semantics, but some of the values apply to any UI development paradigm.

Why Is Testing Front-end Difficult?

We don’t tend to author our front-end as a system but rather as a bunch of components and functions that make up the user-interface stories. With component code mainly living in JavaScript or JSX, rather than separating between HTML, JS, and CSS, it’s also more tempting than ever to mix view code and business-logic code. When I say “we,” I mean almost every web project I encountered as a developer or consultant.

When we come around to test this code, we often start from something like the React Testing Library which renders React components and tests the result, or we faff about with configuring Cypress to work nicely with our project and many times end up with a misconfiguration or give up.

When we talk with managers about the time required to set up the front-end testing system, neither they nor we know exactly what it entails and whether our efforts there would bear fruit, and how whatever we build would be valuable to the quality of the final product and the velocity of building it.

Tools And Processes

It gets worse if we have some sort of a “mandatory TDD” (test-driven development) process in the team, or even worse, a code-coverage gate where you have to have X% of your code covered by tests. We finish the day as a front-end developer, fix a bug by fixing a few lines sprinkled across several React components, custom hooks, and Redux reducers, and then we need to come up with a “TDD” test to “cover” what we did.

Of course, this is not TDD; in TDD, we would have written a failing test first. But in most front-end systems I’ve encountered, there is no infrastructure to do something like that, and the request to write a failing test first while trying to fix a critical bug is often unrealistic.

Coverage tools and mandatory unit tests are a symptom of our industry being obsessed with specific tools and processes. “What is your testing strategy?” is often answered by “We use TDD and Cypress” or “we mock things with MSW,” or “we use Jest with React Testing Library.”

Some companies with separate QA/testing organizations do try to create something that looks more like a test plan. Still, those often reach a different problem, where it’s hard to author the tests together with development.

Tools like Jest, Cypress and Playwright are great, code coverage has its place, and TDD is a crucial practice for maintaining code quality. But too often, they replace architecture: a good plan of interfaces, good function signatures between units, a clear API for a system, and a clear UI definition of the product — a good-old separation of concerns. A process is not architecture.

The Bad

To respect our organization’s process, like the mandatory testing rule or some code-coverage gate in CI, we use Jest or whatever tool we have at hand, mock everything around the parts of the codebase we’ve changed, and add one or more “unit” tests that verify that it now gives the “correct” result.

The problem with it, apart from the test being difficult to write, is that we’ve now created a de-facto contract. We’re not only verifying that a function gives some set of expected results, but we’re also verifying that this function has the signature the test expects and uses the environment in the same way our mocks simulate. If we ever want to refactor that function signature or how it uses the environment, the test will become dead weight, a contract we don’t intend to keep. It might fail even though the feature works, and it might succeed because we changed something internal, and the simulated environment doesn’t match the real environment anymore.

If you’re writing tests like this, please stop. You’re wasting time and making the quality and velocity of your product worse.

It’s better to not have auto-tests at all than to have tests that create fantasy worlds of unspecified simulated environments and rely on internal function signatures and internal environment states.


A good way to understand if a test is good or bad is to write its contract in plain English (or in your native language). The contract needs to represent not just the test but also the assumptions about the environment. For example, “Given the username U and password Y, this login function should return OK.” A contract is usually a state and an expectation. The above is a good contract; the expectations and the state are clear. For companies with transparent testing practices, this is not news.

It gets worse when the contract becomes muddied with implementation detail: “Given an environment where this useState hook currently holds the value 14 and the Redux store holds an array called userCache with three users, the login function should…”.

This contract is highly specific to implementation choices, which makes it very brittle. Keep contracts stable, change them when there is a business requirement, and let implementations be flexible. Make sure the things you rely on from the environment are sturdy and well-defined.

The Flaky

When separation of concerns is missing, our systems don’t have a clear API between them, and we lack functions with a clear signature and expectation, we end up with E2E as the only way to test features or regressions. This is not bad as E2E tests run the whole system and ensure that a particular story that’s close to the user works as expected.

The problem with E2E tests is that their scope is very wide. By testing a whole user journey, the environment usually needs to be set up from scratch by authenticating, going through the entire process of finding the right spot where the new feature lives or regression occurred, and then running the test case.

Because of the nature of E2E, each of these steps might incur unpredictable delays as it relies on many systems, any of which could be down or laggy at the time the CI run, as well as on careful crafting of “selectors” (how to programmatically mimic what the user is doing). Some bigger teams have systems in place for root-cause analysis to do this, and there are solutions like that address this problem. However, this is not an easy problem to solve.

Often a bug is in a function or system, and running the whole product to get there tests too much. New code changes might show regressions in unrelated user journey paths because of some failure in the environment.

E2E tests definitely have their place in the overall blend of tests and are valuable in finding issues that are not specific to a subsystem. However, relying too much on them is an indication that perhaps the separation of concerns and API barriers between the different systems is not defined well enough.

The Good

Since unit-testing is limited or relies on a heavily-mocked environment, and E2E tests tend to be costly and flaky, integration tests often supply a good middle ground. With UI integration tests, our whole system runs in isolation from other systems, which can be mocked, but the system itself is running without modification.

When testing the front-end, it means running the whole front-end as a system and simulating the other systems/”backends” it relies on to avoid flakiness and downtimes unrelated to your system.

If the front-end system gets too complicated, also consider porting some of the logic code to subsystems and define a clear API for these subsystems.

Strike A Balance

Separating code into subsystems is not always the right choice. If you find yourself updating both the subsystem and the front-end for every change, the separation may become unhelpful overhead.

Separate UI logic to subsystems when the contract between them can make them somewhat autonomous. This is also where I would be careful with micro-frontends as they are sometimes the right approach, but they focus on the solution rather than on understanding your particular problem.

Testing UI Components: Divide And Conquer

The difficulty in testing UI components is a special case of the general difficulty in testing. The main issue with UI components is that their API and environments are often not properly defined. In the React world, components have some set of dependencies; some are “props,” and some are hooks (e.g., context or Redux). Components outside the React world often rely on globals instead, which is a different version of the same thing. When looking at the common React component code, the strategy of how to test it can be confusing.

Some of this is inescapable as UI testing is hard. But by dividing the problem in the following ways, we reduce it substantially.

Separate UI From Logic

The main thing that makes testing component code easier is having less of it. Look at your component code and ask, does this part actually need to be connected to the document in any way? Or is it a separate unit/system that can be tested in isolation?

The more code you have as plain JavaScript “logic,” agnostic to a framework and unaware that it’s used by the UI, the less code you need to test in confusing, flaky, or costly ways. Also, this code is more portable and can be moved into a worker or to the server, and your UI code is more portable across frameworks because there is less of it.

Separate UI Building Blocks From App Widgets

The other thing that makes UI code difficult to test is that components are very different from each other. For example, your app can have a “TheAppDashboard” component, which contains all the specifics of your app’s dashboard, and a “DatePicker” component, which is a general-purpose reusable widget that appears in many places throughout your app.

DatePicker is a UI building block, something that can be composed into the UI in multiple situations but doesn’t require a lot from the environment. It is not specific to the data of your own app.

TheAppDashboard, on the other hand, is an app widget. It probably doesn’t get re-used a lot throughout the application; perhaps it appears only once. So, it doesn’t require many parameters, but it does require a lot of information from the environment, such as data related to the purpose of the app.

Testing UI Building Blocks

UI building blocks should, as much as possible, be parametric (or “prop-based” in React). They shouldn’t draw too much from the context (global, Redux, useContext), so they also should not require a lot in terms of per-component environment setup.

A sensible way to test parametric UI building blocks is to set up an environment once (e.g., a browser, plus whatever else they need from the environment) and run multiple tests without resetting the environment.

A good example for a project that does this is the Web Platform Tests — a comprehensive set of tests used by the browser vendors to test interoperability. In many cases, the browser and the test server are set up once, and the tests can re-use them rather than have to set up a new environment with each test.

Testing App Widgets

App widgets are contextual rather than parametric. They usually require a lot from the environment and need to operate in multiple scenarios, but what makes those scenarios different is usually something in the data or user interaction.

It’s tempting to test app widgets the same way we test UI building blocks: create some fake environment for them that satisfies all the different hooks, and see what they produce. However, those environments tend to be brittle, constantly changing as the app evolves, and those tests end up being stale and give an inaccurate view of what the widget is supposed to do.

The most reliable way to test contextual components is within their true context — the app, as seen by the user. Test those app widgets with UI integration tests and sometimes with e2e tests, but don’t bother unit-testing them by mocking the other parts of the UI or utils.

Testable UI Cheat Sheet


Front-end testing is complex because often UI code is lacking in terms of separation of concerns. Business logic state-machines are entangled with framework-specific view code, and context-aware app widgets are entangled with isolated, parametric UI building blocks. When everything is entangled, the only reliable way to test is to test “everything” in a flaky and costly e2e test.

To manage this problem, rely on architecture rather than specific processes and tools:

  • Convert some of your business-logic flows into view-agnostic code (e.g., state machines).
  • Separate building blocks from app widgets and test them differently.
  • Mock your backends and subsystems, not other parts of your front-end.
  • Think and think again about your system signatures and contracts.
  • Treat your testing code with respect. It’s an important piece of your code, not an afterthought.

Striking the right balance between front-end and subsystems and between different strategies is a software architecture craft. Getting it right is difficult and requires experience. The best way to gain this kind of experience is by trying and learning. I hope this article helps a bit with learning!

My gratitude to Benjamin Greenbaum and Yehonatan Daniv for reviewing this from the technical side.

Reblogged 1 week ago from

GA4 now shows Performance Max and Smart Shopping data

Everyones favorite new tool Google Analytics 4 is now showing performance data from Performance Max and Smart Shopping campaigns.

Where. To view PMax and SS campaigns, navigate to Acquisition > Traffic acquisition reportyou’ll see that the data is organized by the Session default channel grouping dimension. (Click + to choose a secondary dimension.) Performance Max and Smart Shopping campaigns are under Cross Network.

Google announcement. This is one that Google may or may not have forgotten to publicly announce, but Charles Farina discovered and posted about it on Linkedin this week. You can review the GA4 default channel groupings help doc here.

Why we care. The rollout of GA4 has a lot of us less than enthused. Mix that in with the elusiveness of Performance Max and you have yourself some pretty PO’d advertisers. While the addition of this data gets us one step closer to full visibility, let’s just see how the information is reported and attributed.

The post GA4 now shows Performance Max and Smart Shopping data appeared first on Search Engine Land.

Reblogged 1 week ago from

Webinar: Unlock the power of TikTok for your social strategy

With 800 million active users worldwide, TikTok is influencing a whole new generation of social media users and consumers.

This webinar will break down how content and influencers drive engagement and influence consumer behavior. Learn how to measure your competitive share of voice, engage consumers and drive revenue growth for your business.

Register today for “Unlock the Power of TikTok for Your Social Strategy” presented by NetBase Quid.

The post Webinar: Unlock the power of TikTok for your social strategy appeared first on Search Engine Land.

Reblogged 1 week ago from