Google Clarifies SEO Ranking Factors


A year and a half ago, Google’s Andrey Lipattsev who has not been in the public eye since, listed off Google’s top three ranking factors as content, links and RankBrain. It was a fun time for us search reporters, as you can imagine.

Well now, Google’s John Mueller and Gary Illyes are saying there isn’t a top three.

John Mueller said on Twitter “IMO there’s no “top 3″ list.” Gary Illyes said on Twitter the top three depend on the query. This was after someone called him out as listing the top three at a recent SEO conference named Brighton SEO – he said he did not do so.

Gary said:

John Mueller also said that “we use so many factors for ranking, it really depends on a lot of things.” Meaning, maybe different ranking signals dynamically become more important based on the type of query being entered into the box. Of course this makes sense for news or trending keywords but it might make sense for other areas as well.

So there you have it, there are not top three search ranking factors from Google. No links, not content, not RankBrain, it could be alt tags! Just kidding.


Source Url:



Google Local Guides Offering Video on Android Devices

Google Local Guides and others can now add videos to local results if they use an Android device.


Google announced in the Local Guides Forum that they now are rolling out support to upload videos to Google Maps local listings on Android devices.

The help document explains the feature is currently only available to Android users. Google wrote, “To add videos, you must use an Android device. To remove videos, you must use an Android device or a computer.”

You can add videos from three different areas:

  • Add a video from a place’s page.
  • Add videos from “Your contributions.”
  • Add video using Google Photos or your Gallery app.

Meg from Google announced this first to the Google Local Guides who earn points when they add videos or photos to local listings. Meg from Google wrote:

Today, Local Guides on Android have the chance to add the first-ever videos to millions of places. The possibilities are really exciting: Take viewers on a mini tour of a store you love, or show the bustling scene at your favorite neighborhood restaurant. You can even do a quick review where you showcase a place’s best item or offer tips for visitors.


Here is a clip of what it looks like to add videos:



Is Your SEO Strategy Working?

Columnist Thomas Stern shows how a content audit, when done right, can help you assess whether your content is relevant not only to your brand goals and SEO objectives, but also to the customer’s needs.


Google has thrown a ton of changes at marketers over the last few years. From major algorithm updates to voice search, all of these changes follow Google’s ultimate goal of creating the best search experience for its users.

The upshot is that it’s not enough to develop and optimize website content for just search engines anymore. As better language processing has become a major focus for improving search results, your brand’s site content is no longer speaking to search engines alone, but to actual people.

To appeal to both people and search engines, brands must evaluate their site content through an audit process to discover what may (or may not) be working and determine where to improve. A website content audit is the cornerstone of your entire content strategy.

When done right, a content audit helps to determine whether your website content is relevant to not only your brand goals and marketing objectives, but also to the customer’s needs. Audits can identify problems with accuracy, consistency, voice and tone; they can also provide direction for SEO.

Review existing content

Not every content audit is the same; it takes familiarity in many different digital marketing channels to set up a framework for success. However, each content audit has a few things in common, like evaluating quantitative and qualitative metrics for each page of a website.

The first step in each content audit is to record all of a website’s existing content. At ZOG Digital, we find it easiest to centralize the data and break out information like URLs, page titles, conversion rates, meta descriptions and so forth in a single spreadsheet to begin our process.

Take the time to evaluate your audience’s search habits and any historical data you have available. Some of the tools we like to use include:

  • Screaming Frog crawls websites’ pages, links and images and allows us to export the data to a spreadsheet.
  • Google Analytics lets us export the success metrics of each page, broken out by marketing channel.
  • Ahrefs allows us to look at the backlink profiles of each of our target pages.

Next, we layer in qualitative data about the page from a brand level and a content quality level. For our clients, we measure key pages against intended audience segments and brand objectives. As you evaluate each page, you should be able to appropriately grade each page and define next steps for them, too.

With each content audit, you need to define problems with your site’s overall health and identify any strengths and weaknesses. If you decide that the content lacks substance or has weak traffic but is essential to the brand, the content needs to be refreshed for current audiences. You’ll begin to see themes in each category page and be able to make informed recommendations for each part of the site.

Content creation for audience segmentation

After defining next steps, you need to be able to execute it effectively for your target audiences. Successful content marketing is all about targeting a niche and then, of course, making the most out of it in terms of engagement and revenue. Through audience segmentation, you can have laser-focused strategies around each audience type.

For an organization with a large B2B audience segment, like GE, product page or case study content may be the most important piece of content for their target audiences. For Nest, an innovative home and security brand, videos and testimonials might be more effective to establish the use case and value.

You have to refine your marketing tactics in a thoughtful manner when it comes to reaching your target audience. While defining, segmenting and prioritizing your audiences, you also need to define what content type will fill in a gap found in your content audit while also resonating your target audience.

This is where many brands will struggle — they need an agile team of experts to solve the problems uncovered by an initial content audit, while also aligning with target audience segments. Upon evaluating all aspects of current site content, you can fill in the gaps and create more appealing verbiage for your target audiences. Few brands have mastered this technique, and it’s key to be aware of their tactics and how they validate success.

For example, Mercedes-Benz ensures that a majority of their content is made for (and visible to) those who are willing to pay for their high-quality cars. However, they know they want to break into a younger demographic of drivers as well. That’s why they also create content and products that fit in with a millennial’s values, like high value for an affordable price, as well as a strong customer-brand relationship.

You’ll notice in the screen shot below that the first feature listed on the page is phone connectivity, rather than features like mileage or horsepower.

Meanwhile, Toyota’s been marketing their Prius Prime. The auto company claims this to be their most advanced hybrid yet, at a more affordable price than luxury car dealers. Toyota uses infographics to target millennials in the market for new cars who also care about energy efficiency.

Sample image

Both car brands use different types of content to target their audiences on a deeper level. Notice that the goal is to focus on educating the consumer — they focus on audience segments before anything else.

It’s critical to take the time to augment the quantitative data by evaluating each page based on what humans value. For content audits, you need to appeal to both people and Google by being descriptive with a human touch. You can use the following tools to evaluate the quality of your content and formulate a clear understanding when it comes to content creation:

  • Google’s definition of high-quality content includes important factors like trustworthiness and expertise.
  • Triblio allows you to create personalized content for multichannel campaigns by persona.
  • Google AdWords Keyword Planner provides information on the interest (search volume) of target topics.
  • HemingwayApp grades pages based on how difficult they are to read.

We recommend doing a content audit every six to 12 months to ensure consistency and effectiveness of your on-site content as people and search engines evolve. An initial content audit will establish a baseline of data and insights to help you improve content quality. The subsequent content audits will then show you how your pages have grown since you implemented changes, as well as pinpointing any weaknesses that should be addressed.

Final thoughts

By developing a comprehensive content strategy around what you uncover with a robust content audit, you’ll be better able to improve your content development methods and have a baseline for any future changes or updates.



Impact Your Rankings by Changing Your HTML


Change Your HTML, It Can Impact Your Google Search Rankings

Sometimes you see the most obvious questions posted to Googlers and you think, hmm, I wonder how many others don’t think this is obvious. In any event, when you change your content and HTML on a page, it can and often does, impact your rankings for better or worse.

HTML changes without content changes can also do the same but it depends what exactly you change on the page.

John Mueller of Google was asked about this on Twitter and responded as such. John said “any change in a page’s HTML can result in changes in indexing, it all depends on what you change.”

Of course, those who rank well are afraid to change anything but eventually their site can become stale and Google’s algorithms might not want to rank that stale site as well as it use to. So staying ahead of the game with your web site by making changes is kind of necessary.



Simple Rules for Choosing a Domain Name

Getting a domain name doesn’t have to be complicated or expensive.


The internet is generally the first place people look for information on just about everything. That’s why when you register a domain name, or several, it’s an important step for making sure businesses can be found — even without a website.

To help eliminate some of the most frequently encountered misconceptions about domain name registration, we’ve addressed a few popular myths:

Myth #1: Domain name registration is difficult

There are tons of great domain names available for registration, and it can take as little as five minutes to register one at any domain name retailer. These online stores make it easy to search for available domain names with name suggestion tools. They also offer complementary services, such as web hosting and website design so you can register a domain name and set up a website all at once.

Myth #2: I only need a domain name if I have a website

A domain name can be used for a variety of purposes. Many people who are not ready for a website simply register the domain name of their choice to ensure it doesn’t get snatched up by anyone else. They may use it to create a professionally branded email address, or as a web address that can point customers to an alternate online presence, such as a social media page, if they don’t yet have a website.

The benefit of registering a domain name and using it in any of these ways is that when you are ready for a website, you know you’ll have the domain name you want.

Myth #3: Domain name registrations are expensive

Many people may not know that a domain name can be registered at very reasonable prices, sometimes for as little as $.99 per year. In fact, the relatively low cost of domain name registrations can help businesses to register multiple domain names and build a domain name portfolio for use in marketing campaigns or brand-protection strategies. The key is to align your brand and relevant keywords to maximize the value your domain name can bring to your existing and future online presence.

Myth #4: Domain name registration equals domain name ownership

Domain name registrations are priced on a subscription-like model that allows a person or business to register that domain name for a certain period of time (usually in annual increments). At the end of the registration period, you (the domain name registrant) have the option to renew the domain name registration for an additional period of time or let it expire. It is important to renew your domain name registration, or you may find that all of your work building traffic and views to your site ends up benefiting someone else (in the instance that someone else registers your domain name after you let your registration expire), and potentially costing you more in rebranding.

Now that we have debunked these myths, remember: A domain name can be your online address, regardless of whether or when you build a website for your online presence. You can use it for branded email or to redirect to another web location of your choice.

Domain name registrations are affordable. In some cases, they may be registered for as little as $.99 per year. Once you register a domain name, you may continue to hold the registration by renewing it, usually in annual increments.

Bottom line: It’s important to secure or maintain your online brand today, so you can be ready for tomorrow.



Google Finally Updated Their Local Proximity Filter Algorithm

Have you noticed a recent shift in Google’s local search results? Columnist Joy Hawkins shares everything you need to know about the ‘Hawk’ update, which seems to have killed some of the changes we saw with Possum.


I recently reported on an algorithm update impacting the local results that happened on August 22, 2017. This was a strictly-local update, from what I can tell so far, which means that it had no impact on the non-local organic results.

What changed?

The update, which I have dubbed “Hawk,” was a change to the way the local filter works. To get some history here, Google actively filters out listings from the local results that are similar to other listings that rank already. Basically, Google picks the most relevant listing of the bunch and filters the rest. It’s very similar to what they do organically with duplicate content. (Note: Google is typically loath to confirm algorithm updates, usually only saying that it rolls out several updates every day, so these observations are based on an analysis of how local results have changed rather than on any official announcement or acknowledgment.)

The filter has existed for a long time to help ensure that multiple listings for the same company don’t monopolize the search results. In September 2016, the Possum algorithm update made a significant change to the way the filter works. Instead of just filtering out listings that shared the same phone number or website, Google started filtering out listings that were physically located near each other.

This was very problematic for businesses. It meant that if another business in your industry was in the same building as you — or even down the street from you — that could cause you to get filtered out of local search results. Yep, that means your competitors could (inadvertently) bump your listing!

On August 22, 2017, Google refined the proximity filter to make it stricter. It still appears to be filtering out businesses in the same building, but it is not filtering out as many businesses that are close by.

Who this helped

Here is an example of a business I was tracking that benefited from this update. Weber Orthodontics got filtered after the Possum algorithm update for the term “orthodontist wheaton il” due to the fact that they had a competitor down the street — 325 feet from where they were located. This competitor had a higher organic ranking and stronger relevance to that keyword, so they were included in the results, and Weber was filtered out.


Here is a before-and-after screen shot that shows how the local results changed as a result of the Hawk update; notice how Weber was completely missing from the results a few months ago.


I was able to nail down the exact date this happened because I have a robust tracking plan with BrightLocal that scans daily and takes screen shots. After studying multiple, completely unrelated cases, I was able to confirm that all cases had this same pattern on August 22.

Another example was this set of four hotels in Killeen, Texas. Previously, two of the four were filtered.


Now, following the Hawk update, all four are showing.


Who is still filtered?

Naturally, this update didn’t help everyone. Although it tightened the distance needed to filter a similar listing, it didn’t remove it completely. I’m still seeing listings that share an address or building being filtered out of local search results. I also see the filtering problem persisting for a business that is in a different building that’s around 50 feet away from a competitor.

Below, you can see that the local results for “personal injury attorney palmdale” — an example I shared in my Possum article — are still filtering out many attorney listings using the same virtual office address. (All the listings in red share the same address as the listing in green and are filtered as a result.)


Why ‘Hawk?’

The local search community settled on the name “Hawk” for this algorithm update, because hawks eat possums. This is one of the few times where I don’t see any negative outcomes as a result of this update and just wish Google hadn’t taken a year to realize the proximity filter was way too broad.



Finally Google Fixed Google Reminders Feature


Google has finally fixed the set a reminder feature in Google search. We first reported the issue a few weeks ago and I’ve been tracking it since and as of yesterday, last night specifically, the feature started working again.

In short, you can go to Google and search for [set a reminder] or something like [remind me to do X] or something similar and Google will let you set the reminder directly in search. The reminder will be added to your Google Calendars and Google reminders feature.

Here are screen shots of it working this morning in Google search:



Andy B from Google wrote in the ongoing Google Webmaster Help thread:

Great news! I can confirm this issue should now be fixed for all users. Many thanks again for your reports and continued patience while we worked to resolve this.

If you’re still running into problems creating reminders on Chrome desktop, please read through this help center article outlining common reasons why you may not be seeing the option.



The Different Content Strategies for Mobile & Desktop SEO

You can’t simply make your site responsive and truly call it mobile-ready, argues contributor Jim Yu. To really adjust to the dramatic rise of mobile search, you need to understand how people are using these devices for finding things.


Late in 2015, Google confirmed what many of us had already suspected: mobile search had officially surpassed desktop worldwide.

Smartphones and tablets have completely disrupted and forever altered what was once a fairly linear buyer’s journey. These days, a consumer might drop into your funnel at any point, from any channel, and it might be after an unknown number of touch points across platforms and devices that you didn’t see happening.

They’re reading reviews, are exposed to organic and paid social, are searching for nearby answers for their immediate needs and more. Increasingly, consumers are doing all of these things from a mobile device.

Recent research at BrightEdge (my company) shows that 57 percent of all online traffic now comes from mobile and tablet. Pair this consumer insight with the knowledge that Google’s mobile-first algorithm is coming, and we marketers have some work to do.

In this column, I’ll share the results of our recent Google SERPs Mobile vs. Desktop research, and you’ll learn how to Google-proof your SEO and content marketing strategies to prepare for what’s next.


Why mobile matters

As the shift to mobile has picked up speed, we’ve discovered some new ways to determine what that actually means in terms of real, measurable impact on businesses.

One such insight gleaned from our recent research helps us assess the extent to which mobile matters to Google. We’ve been tracking Google’s experimentation with the mobile-first index since it was announced in 2016, and what we learned might surprise you.

We tracked SERP listing data for nearly 25 million keywords, and what we discovered is that 79 percent of listings have a different rank on mobile and desktop devices. For listings in positions 1-20, 47 percent had mobile and desktop rankings that were not the same.

Furthermore, we found that 35 percent of the time, the top-ranking URL of a domain for a given query is different on desktop than on mobile.

Preparing for mobile first

Back in 2016, Google first announced their development of a mobile-first algorithm, a direct response to the rising use of mobile across its consumer base. Now, the search giant has begun experimenting with this new algorithm — a test that’s attracted the attention of marketers across all sectors.

It’s impossible to estimate the impact of such an algorithm, yet it’s safe to say you need to start preparing now. Brands that are still looking at their marketing strategy through a desktop view in a mobile-first world are likely to misunderstand the opportunities and threats affecting them (most likely on the mobile side, and in their largest channel — organic search — which accounts for 51 percent of traffic, on average).

But mobile-first isn’t mobile-only, either. Those who come out ahead through this upcoming mobile-first update will have separate strategies for each and will be tracking performance across both. Carlos Spallarossa, director of SEO for cosmetics giant L’Oréal (a client of my company) says,

“Mobile traffic is huge for us and our industry — above the 57 percent [this survey] is reporting. We are developing content with a mobile-first perspective to connect with our users with info, user advice, and reviews – especially when they are near a store where they can easily purchase.”

Winning in this rapidly evolving environment requires a keen understanding of user intent, how your customers use mobile and how your site appears on mobile devices.

Google interprets each user’s most likely intent through micro-moments, which impact how the SERP is constructed and the types of content that appear. For example, if the search engine believes the searcher wants to find a restaurant, the local 3-pack will appear. If the person seems to express an I-want-to-know micro-moment, then a Google Quick answer will appear. Google also varies the number and placement of videos and images on the SERP depending upon the likely intent.

Site developers and marketers must recognize how mobile users interact in these micro-moments and how their intent differs between mobile and desktop. Only then can you ensure that the content created matches both the intent and the device.

For example, a consumer searching for “how to contact KOA” has an “I want to know” query. On mobile, that person is more likely to click-to-call than to type out an email, which is the exact opposite of the desktop searcher.


A consumer searching for “where to get pancake mix” is in a moment to buy. On desktop, that person may very well be looking to order online, but they could also be open to pancake recipes or other related content. On mobile, though, you can assume that person is looking for a store nearby to complete the transaction immediately.

Even as mobile widens the gap in the coming years, there’s still a massive chunk of desktop traffic on the table for the taking, and now we can see that desktop and mobile each have their own SERPs space, too.

Bringing it all together: SEO & content strategies for mobile-first search

  1. Perform keyword research for mobile devices. Customers search and behave differently between mobile and desktop. Voice search has become increasingly common, and users often employ different keywords or phrases when typing on mobile devices. As a very first step, it’s time to differentiate between your mobile and desktop keywords, so you can begin to better understand what your on-the-go visitors need and provide the right content in the best format for them. You still want to get those meatier, more in-depth pieces in front of desktop users and those further down the funnel, but not at the expense of your mobile users. Identify your keywords more likely to be used on mobile devices, then research the most likely user intent. See which micro-moment Google anticipates the user is in by analyzing the mobile SERP for that particular search. You can then develop brand content that best suits this type of user and ensure that it is completely mobile-friendly.
  2. Consider AMP implementation where applicable. Google continues to emphasize the importance of speed across devices. Recently, they also ended their instant search on desktop, saying they’ll be looking for ways to improve search speed across all devices. Beta updates with a stronger AMP flow-fixing tool have been released to the search consoles of some users, demonstrating Google’s commitment to enhanced page speeds. Brands should be paying attention to the potential benefits that AMP could bring them and mark up any appropriate pages.
  3. Review all site content to ensure that it is mobile-friendly. The content across your website should read easily or play smoothly on mobile devices. For example, an infographic with text too small to see on mobile can be designed to automatically scale to screen size. Users should also be able to easily enlarge the image if they want to see any more detail. Pay attention to navigation to make sure that moving throughout the site will not be a struggle for people using mobile devices. Google does offer a mobile-friendly testing tool, which can be used to get started on the path toward mobile compatibility. Overall, however, brands need to shift their mindsets away from creating desktop sites that “work” on mobile to creating mobile sites.
  4. Understand, differentiate and track desktop vs. mobile traffic, engagement and conversions. Enhance your tracking capabilities and KPIs for a more thorough picture, including what traffic arrives from mobile devices and what comes from desktop. Have your SEOs measure traffic rates, landing page visits, engagement rates, conversions and revenue rates for mobile devices separately, so you have a clearer picture of how well you’re reaching these mobile customers. As the market continues to shift more toward mobile, understanding how your mobile customers interact with your site will help you plan for these changes.

Clearly, users prefer their mobile devices at increasing rates, which means that brands need websites and marketing strategies that keep up.

Begin to focus first on your brand’s mobile users and make them the priority when developing content, rather than thinking first of desktop and then using minor adjustments to ensure mobile compatibility.

You can always provide more in-depth content for those who need it without sacrificing the mobile experience, but, as we’ve learned, you can’t simply make your site responsive and truly call it mobile-ready.



The Right Adjectives Can Help Your Google Search Performance


Using adjectives can really bring a piece of writing to life. But what your English teacher didn’t know is that some adjectives have a higher search volume than others, and sometimes the prettier ones don’t get a whole lot of traffic, elegant as they may be.

So at Brainlabs (my employer), we wrote a script that enables you to work out which adjectives are the highest performers. It’s a bit like the script to mine your search queries for n-grams, except you specify which words and phrases you’re interested in.

You don’t just have to look at adjectives, like “cheap,” “easy” or “seasonal” — that’s merely one possible use. Maybe you’ve got different terms for the same product, like “shoes,” “boots” or “footwear,” and you want to know which one to use in your ad text. Or maybe you’ve got a couple of random phrases in mind, and you want to see if there are enough searches including them to justify giving them their own campaigns.

The script goes through your account’s search terms and adds up the performance of all queries containing your phrases at the account, campaign and ad group level. This is recorded in a Google spreadsheet for you to peruse. There’s also a sheet with the overall stats for each phrase by month, which shows you how seasonality affects the queries.

recorded in a Google spreadsheet

To use the script, you need to make a blank Google spreadsheet (for the report) and make a note of its URL. Then, copy the code below into your account, and change a few options at the top:

  • startDate and endDate determine the date range of the data. Enter them in yyyy-mm-dd format.
  • currencySymbol is used when formatting cost data in the report.
  • campaignNameContains and campaignNameDoesNotContain filter which campaigns the script gets data from. For example, if campaignNameContains is [“Brand”, “Generic”] then only campaigns with names containing “brand” or “generic” are included. If campaignNameDoesNotContain is [“Display”, “Competitor”] then any campaigns with names containing “display” or “competitor” are ignored.
    • This is not case-sensitive.
    • Leave blank, [], to include all campaigns.
    • If you need to put a double quote into campaignNameContains or campaignNameDoesNotContain, put a backslash before it.
  • ignorePausedCampaigns should be set to true if you only want to look at currently active campaigns, or false if you want to include them.
  • Similarly, ignorePausedAdGroups should be true to only look at currently active ad groups, and false to include paused ones.
  • spreadsheetUrl is the URL of a Google Doc spreadsheet, which the results will be copied into. Create a blank spreadsheet and put the URL in here.
  • adjectives is the list of words and phrases to be reported on. Put them in double quotes, separated by commas: [“fitter”, “happier”, “more productive”]
    • Note that this should match what you would expect to find in the search query — for example, don’t use punctuation that won’t be shown in the report.
  • If clearSpreadsheet is true, any data already in the spreadsheet will be overwritten. If it’s false, then the script’s results will be added at the end of the sheets.
    • The exception is the Monthly Data sheet, which will always be replaced.
  • Set lookAtCompletePhrases to true if you only want to see how your phrases behave when they are whole words on their own.
    • For example, if one of your adjectives was “super”, queries like “new super shoes” will always be included. But “superman shoes” would only be included if lookAtCompletePhrases were false, because “super” appears within a word rather than as a whole word on its own.

There are also some advanced options: thresholds for the different statistics are given so that you can stop the report showing ad group- or campaign-level performance where an adjective had very few searches.

* Ad-jective Analysis Tool
* This script calculates the performance of user-defined phrases in the search
* query report, and outputs a report into a Google Doc spreadsheet.
* Version: 1.0
* Google AdWords Script maintained on
function main(){
// Options
var startDate = 2017-05-01;
var endDate = 2017-07-31;
// The start and end date of the date range for your search query data
// Format is yyyy-mm-dd
// leave blank to look back over the last 11 months
var currencySymbol = £;
// The currency symbol used for formatting. For example “£”, “$” or “€”.
var campaignNameDoesNotContain = [];
// Use this if you want to exclude some campaigns.
// For example [“Display”] would ignore any campaigns with ‘Display’ in the name,
// while [“Display”,”Shopping”] would ignore any campaigns with ‘Display’ or
// ‘Shopping’ in the name.
// Leave as [] to not exclude any campaigns.
var campaignNameContains = [];
// Use this if you only want to look at some campaigns.
// For example [“Brand”] would only look at campaigns with ‘Brand’ in the name,
// while [“Brand”,”Generic”] would only look at campaigns with ‘Brand’ or ‘Generic’
// in the name.
// Leave as [] to include all campaigns.
var ignorePausedCampaigns = true;
// Set this to true to only look at currently active campaigns.
// Set to false to include campaigns that had impressions but are currently paused.
var ignorePausedAdGroups = true;
// Set this to true to only look at currently active ad groups.
// Set to false to include ad groups that had impressions but are currently paused.
var spreadsheetUrl =;
// The URL of the Google Doc the results will be put into.
var adjectives = [example one, example two];
// The adjectives to search for in the search query report
var clearSpreadsheet = true;
// If true, data already in the spreadsheet will be overwritten.
var lookAtCompletePhrases = true;
// Use this if you want to look at exact adjective phrases
// For example if using the adjective “super”
// When set to “true” would only look at queries such as “new super shoes”
// When set to “false” would also allow other occurrences such as “superman shoes”
// Thresholds
var queryCountThreshold = 0;
var impressionThreshold = 10;
var clickThreshold = 0;
var costThreshold = 0;
var conversionThreshold = 0;
// Adjectives will not be reported for ad groups or campaigns if their statistics
// are lower than any of these thresholds
// Check the spreadsheet has been entered, and that it works
var spreadsheet = checkSpreadsheet(spreadsheetUrl, the spreadsheet);
// Get the IDs of the campaigns to look at
var activeCampaignIds = getCampaignIds(campaignNameDoesNotContain, campaignNameContains, ignorePausedCampaigns);
// Define the statistics to download or calculate, and their formatting
var statColumns = [Clicks, Impressions, Cost, Conversions, ConversionValue];
var calculatedStats = [[CTR,Clicks,Impressions],
[Conv. Rate,Conversions,Clicks],
[Cost / conv.,Cost,Conversions],
[Conv. value/cost,ConversionValue,Cost]]
var currencyFormat = currencySymbol + #,##0.00;
var formatting = [#,##0, #,##0, #,##0, currencyFormat, #,##0, currencyFormat,0.00%,currencyFormat,0.00%,currencyFormat,0.00%];
// List of possible Months
var months = [January, February, March, April, May, June, July, August, September, October, November, December];
// Adding trailing spaces to the adjectives means the adjectives are only
// contained in searches where they appear as complete words.
if (lookAtCompletePhrases) {
for (var i in adjectives) {
adjectives[i] = + adjectives[i].trim() + ;
// Go through the search query report, record the performance of each
// adjective in each query
var dateRange = startDate.replace(//g, ) + , + endDate.replace(//g, );
if(startDate == || endDate == ){
var now = new Date();
var endDate = now;
var startDate = now.setDate(now.getMonth()11);
dateRange = Utilities.formatDate(startDate, GMT, yyyy-mm-dd) + , + Utilities.formatDate(endDate, GMT, yyyy-mm-dd);
if (ignorePausedAdGroups) {
var whereAdGroupStatus = AND AdGroupStatus = ENABLED ;
} else {
var whereAdGroupStatus = AND AdGroupStatus IN [‘ENABLED’,’PAUSED’] ;
var queryReport =
SELECT CampaignName, CampaignId, AdGroupId, AdGroupName, Query, MonthOfYear, + statColumns.join(, ) + +
WHERE CampaignId IN [ + activeCampaignIds.join(,) + ] + whereAdGroupStatus +
DURING + dateRange);
var campaignAdjectives = {};
var adGroupAdjectives = {};
var adjectiveReport = {};
var monthlyReport = {};
for (var i in adjectives) {
adjectives[i] = adjectives[i].toLowerCase().trim();
var queryRows = queryReport.rows();
while (queryRows.hasNext()) {
var queryRow =;
if (lookAtCompletePhrases) {
var query = + queryRow[Query] + ;
} else {
var query = queryRow[Query];
if (campaignAdjectives[queryRow[CampaignName]] == undefined) {
campaignAdjectives[queryRow[CampaignName]] = {};
adGroupAdjectives[queryRow[CampaignName]] = {};
if (adGroupAdjectives[queryRow[CampaignName]][queryRow[AdGroupName]] == undefined) {
adGroupAdjectives[queryRow[CampaignName]][queryRow[AdGroupName]] = {};
var stats = [];
for (var i=0; i<statColumns.length; i++) {
stats[i] = parseFloat(queryRow[statColumns[i]].replace(/,/g, ));
for (var i in adjectives) {
if (campaignAdjectives[queryRow[CampaignName]][adjectives[i]] == undefined) {
campaignAdjectives[queryRow[CampaignName]][adjectives[i]] = {};
campaignAdjectives[queryRow[CampaignName]][adjectives[i]][Query Count] = 0;
for (var s=0; s<statColumns.length; s++) {
campaignAdjectives[queryRow[CampaignName]][adjectives[i]][statColumns[s]] = 0;
if (adGroupAdjectives[queryRow[CampaignName]][queryRow[AdGroupName]][adjectives[i]] == undefined) {
adGroupAdjectives[queryRow[CampaignName]][queryRow[AdGroupName]][adjectives[i]] = {};
adGroupAdjectives[queryRow[CampaignName]][queryRow[AdGroupName]][adjectives[i]][Query Count] = 0;
for (var s=0; s<statColumns.length; s++) {
adGroupAdjectives[queryRow[CampaignName]][queryRow[AdGroupName]][adjectives[i]][statColumns[s]] = 0;
if (adjectiveReport[adjectives[i]] == undefined) {
adjectiveReport[adjectives[i]] = {};
adjectiveReport[adjectives[i]][Query Count] = 0;
for (var s=0; s<statColumns.length; s++) {
adjectiveReport[adjectives[i]][statColumns[s]] = 0;
if (monthlyReport[adjectives[i]] == undefined) {
monthlyReport[adjectives[i]] = {};
for (var i in adjectives) {
if (query.indexOf(adjectives[i]) > 1) {
campaignAdjectives[queryRow[CampaignName]][adjectives[i]][Query Count]++;
adGroupAdjectives[queryRow[CampaignName]][queryRow[AdGroupName]][adjectives[i]][Query Count]++;
adjectiveReport[adjectives[i]][Query Count]++;
if(monthlyReport[adjectives[i]][queryRow[MonthOfYear]] == undefined){
monthlyReport[adjectives[i]][queryRow[MonthOfYear]] = {};
for (var s=0; s<statColumns.length; s++) {
monthlyReport[adjectives[i]][queryRow[MonthOfYear]][statColumns[s]] = 0;
for (var s=0; s<statColumns.length; s++) {
campaignAdjectives[queryRow[CampaignName]][adjectives[i]][statColumns[s]] += stats[s];
adGroupAdjectives[queryRow[CampaignName]][queryRow[AdGroupName]][adjectives[i]][statColumns[s]] += stats[s];
adjectiveReport[adjectives[i]][statColumns[s]] += stats[s];
monthlyReport[adjectives[i]][queryRow[MonthOfYear]][statColumns[s]] += stats[s];
Logger.log(Finished analysing queries.);
// Output the data into the spreadsheet
var outputs = [];
var formats = [];
var chartOutput = [];
for (var i in adjectives) {
outputs[i] = {};
outputs[i][campaign] = [];
outputs[i][adgroup] = [];
outputs[total] = [];
formats[i] = {};
formats[i][campaign] = [];
formats[i][adgroup] = [];
formats[total] = [];
var headers = [Months];
var headers = headers.concat({return + x;}));
for (var s=0; s<statColumns.length; s++) {
chartOutput[s] = [];
for (var m in months) {
var monthRow = [];
var requireMonth = false;
for(var i in adjectives){
if(monthlyReport[adjectives[i]][months[m]] !== undefined){
requireMonth = true;
for (var i in adjectives) {
if(monthlyReport[adjectives[i]][months[m]] !== undefined){
if(monthlyReport[adjectives[i]][months[m]][statColumns[s]] !== undefined){
if(monthRow.length == 0){
if(monthRow.length == 0){
if(monthRow.length > 0) {
// Create headers
var calcStatNames = [];
for (var s=0; s<calculatedStats.length; s++) {
var statNames = statColumns.concat(calcStatNames);
for (var i in adjectives) {
outputs[i][campaign].push([Campaign,Phrase,Query Count].concat(statNames));
outputs[i][adgroup].push([Campaign,Ad Group,Phrase,Query Count].concat(statNames));
outputs[total].push([Phrase,Query Count].concat(statNames));
// Organise the ad group level stats into an array for output
for (var i in adjectives) {
for (var campaign in adGroupAdjectives) {
for (var adGroup in adGroupAdjectives[campaign]) {
// skips adjectives under the thresholds
if (adGroupAdjectives[campaign][adGroup][adjectives[i]][Query Count] < queryCountThreshold) {continue;}
if (adGroupAdjectives[campaign][adGroup][adjectives[i]][Impressions] < impressionThreshold) {continue;}
if (adGroupAdjectives[campaign][adGroup][adjectives[i]][Clicks] < clickThreshold) {continue;}
if (adGroupAdjectives[campaign][adGroup][adjectives[i]][Cost] < costThreshold) {continue;}
if (adGroupAdjectives[campaign][adGroup][adjectives[i]][Conversions] < conversionThreshold) {continue;}
var printline = [campaign, adGroup, adjectives[i], adGroupAdjectives[campaign][adGroup][adjectives[i]][Query Count]];
for (var s=0; s<statColumns.length; s++) {
for (var s=0; s<calculatedStats.length; s++) {
var multiplier = calculatedStats[s][1];
var divisor = calculatedStats[s][2];
if (adGroupAdjectives[campaign][adGroup][adjectives[i]][divisor] > 0) {
printline.push(adGroupAdjectives[campaign][adGroup][adjectives[i]][multiplier] / adGroupAdjectives[campaign][adGroup][adjectives[i]][divisor]);
} else {
// Organise the campaign level stats into an array for output
for (var i in adjectives) {
for (var campaign in campaignAdjectives) {
// skips adjectives under the thresholds
if (campaignAdjectives[campaign][adjectives[i]][Query Count] < queryCountThreshold) {continue;}
if (campaignAdjectives[campaign][adjectives[i]][Impressions] < impressionThreshold) {continue;}
if (campaignAdjectives[campaign][adjectives[i]][Clicks] < clickThreshold) {continue;}
if (campaignAdjectives[campaign][adjectives[i]][Cost] < costThreshold) {continue;}
if (campaignAdjectives[campaign][adjectives[i]][Conversions] < conversionThreshold) {continue;}
var printline = [campaign, adjectives[i], campaignAdjectives[campaign][adjectives[i]][Query Count]];
for (var s=0; s<statColumns.length; s++) {
for (var s=0; s<calculatedStats.length; s++) {
var multiplier = calculatedStats[s][1];
var divisor = calculatedStats[s][2];
if (campaignAdjectives[campaign][adjectives[i]][divisor] > 0) {
printline.push(campaignAdjectives[campaign][adjectives[i]][multiplier] / campaignAdjectives[campaign][adjectives[i]][divisor]);
} else {
// Organise the account level stats into an array for output
for (var i in adjectives) {
var printline = [adjectives[i], adjectiveReport[adjectives[i]][Query Count]];
for (var s=0; s<statColumns.length; s++) {
for (var s=0; s<calculatedStats.length; s++) {
var multiplier = calculatedStats[s][1];
var divisor = calculatedStats[s][2];
if (adjectiveReport[adjectives[i]][divisor] > 0) {
printline.push(adjectiveReport[adjectives[i]][multiplier] / adjectiveReport[adjectives[i]][divisor]);
} else {
var filterText = ;
if (ignorePausedAdGroups) {
filterText = Active ad groups;
} else {
filterText = All ad groups;
if (ignorePausedCampaigns) {
filterText += in active campaigns;
} else {
filterText += in all campaigns;
if (campaignNameContains != ) {
filterText += containing ‘ + campaignNameContains + ;
if (campaignNameDoesNotContain != ) {
filterText += and not containing ‘ + campaignNameDoesNotContain + ;
} else if (campaignNameDoesNotContain != ) {
filterText += not containing ‘ + campaignNameDoesNotContain + ;
// Find or create the required sheets
var spreadsheet = SpreadsheetApp.openByUrl(spreadsheetUrl);
var campaignAdjectiveName = [];
var adGroupAdjectiveName = [];
var campaignAdjectiveSheet = [];
var adGroupAdjectiveSheet = [];
var adjectiveReportSheet = [];
for(var i in adjectives) {
campaignAdjectiveName[i] = Campaign + adjectives[i] + Analysis;
adGroupAdjectiveName[i] = Ad Group + adjectives[i] + Analysis;
campaignAdjectiveSheet[i] = spreadsheet.getSheetByName(campaignAdjectiveName[i]);
if (campaignAdjectiveSheet[i] == null) {
campaignAdjectiveSheet[i] = spreadsheet.insertSheet(campaignAdjectiveName[i]);
adGroupAdjectiveSheet[i] = spreadsheet.getSheetByName(adGroupAdjectiveName[i]);
if (adGroupAdjectiveSheet[i] == null) {
adGroupAdjectiveSheet[i] = spreadsheet.insertSheet(adGroupAdjectiveName[i]);
for(var i in adjectives) {
writeOutput(outputs[i][campaign], formats[i][campaign], campaignAdjectiveSheet[i], adjectives[i], Campaign, filterText, clearSpreadsheet);
writeOutput(outputs[i][adgroup], formats[i][adgroup], adGroupAdjectiveSheet[i], adjectives[i], Ad Group, filterText, clearSpreadsheet);
adjectiveReportSheet = spreadsheet.getSheetByName(Account Analysis);
if (adjectiveReportSheet == null) {
adjectiveReportSheet = spreadsheet.insertSheet(Account Analysis);
writeOutput(outputs[total], formats[total], adjectiveReportSheet, Phrases, Account, filterText, clearSpreadsheet);
var monthlyAdjectiveName = Monthly Report;
var monthlyAdjectiveSheet = spreadsheet.getSheetByName(monthlyAdjectiveName);
if (monthlyAdjectiveSheet !== null) {
monthlyAdjectiveSheet = null;
var monthlyAdjectiveSheet = spreadsheet.insertSheet(monthlyAdjectiveName);
createCharts(chartOutput, monthlyAdjectiveSheet, statColumns);
Logger.log(Finished writing to spreadsheet.);
} // end main function
// Check the spreadsheet URL has been entered, and that it works
function checkSpreadsheet(spreadsheetUrl, spreadsheetName) {
if (spreadsheetUrl.replace(/[AEIOU]/g,X) == {
throw(Problem with + spreadsheetName + URL: make sure you’ve replaced the default with a valid spreadsheet URL.);
try {
var spreadsheet = SpreadsheetApp.openByUrl(spreadsheetUrl);
// Checks if you can edit the spreadsheet
var sheet = spreadsheet.getSheets()[0];
var sheetName = sheet.getName();
return spreadsheet;
} catch (e) {
throw(Problem with + spreadsheetName + URL: ‘ + e + );
// Get the IDs of campaigns which match the given options
function getCampaignIds(campaignNameDoesNotContain, campaignNameContains, ignorePausedCampaigns) {
var whereStatement = WHERE ;
var whereStatementsArray = [];
var campaignIds = [];
if (ignorePausedCampaigns) {
whereStatement += CampaignStatus = ENABLED ;
} else {
whereStatement += CampaignStatus IN [‘ENABLED’,’PAUSED’] ;
for (var i=0; i<campaignNameDoesNotContain.length; i++) {
whereStatement += AND CampaignName DOES_NOT_CONTAIN_IGNORE_CASE ‘ + campaignNameDoesNotContain[i].replace(//g,\\\”) + ;
if (campaignNameContains.length == 0) {
whereStatementsArray = [whereStatement];
} else {
for (var i=0; i<campaignNameContains.length; i++) {
whereStatementsArray.push(whereStatement + AND CampaignName CONTAINS_IGNORE_CASE “ + campaignNameContains[i].replace(//g,\\\”) + );
for (var i=0; i<whereStatementsArray.length; i++) {
var campaignReport =
SELECT CampaignId +
whereStatementsArray[i] +
var rows = campaignReport.rows();
while (rows.hasNext()) {
var row =;
if (campaignIds.length == 0) {
throw(No campaigns found with the given settings.);
Logger.log(campaignIds.length + campaigns found);
return campaignIds;
function writeOutput(outputArray, formatArray, sheet, AdjectiveName, levelName, filterText, clearSpreadsheet) {
for (var i=0;i<5;i++) {
try {
if (clearSpreadsheet) {
sheet.getRange(R1C1).setValue(Analysis of + AdjectiveName + in Search Query Report, By + levelName);
sheet.getRange(R + (sheet.getLastRow() + 2) + C1).setValue(filterText);
var lastRow = sheet.getLastRow();
if (formatArray.length == 0) {
sheet.getRange(R + (lastRow + 1) + C1).setValue(No + AdjectiveName.toLowerCase() + found within the thresholds.);
} else {
sheet.getRange(R + (lastRow + 1) + C1:R + (lastRow+outputArray.length) + C + outputArray[0].length).setValues(outputArray);
sheet.getRange(R + (lastRow + 2) + C1:R + (lastRow+outputArray.length) + C + formatArray[0].length).setNumberFormats(formatArray);
var sortByColumns = [];
if (outputArray[0][0] == Campaign || outputArray[0][0] == Word count) {
sortByColumns.push({column: 1, ascending: true});
if (outputArray[0][1] == Ad Group) {
sortByColumns.push({column: 2, ascending: true});
sortByColumns.push({column: outputArray[0].indexOf(Cost) + 1, ascending: false});
sortByColumns.push({column: outputArray[0].indexOf(Impressions) + 1, ascending: false});
sheet.getRange(R + (lastRow + 2) + C1:R + (lastRow+outputArray.length) + C + outputArray[0].length).sort(sortByColumns);
} catch (e) {
if (e == Exception: This action would increase the number of cells in the worksheet above the limit of 2000000 cells.) {
Logger.log(Could not output + levelName + level + AdjectiveName.toLowerCase() + : ‘ + e + );
try {
sheet.getRange(R + (sheet.getLastRow() + 2) + C1).setValue(Not enough space to write the data – try again in an empty spreadsheet);
} catch (e2) {
Logger.log(Error writing ‘not enough space’ message: + e2);
if (i == 4) {
Logger.log(Could not output + levelName + level + AdjectiveName.toLowerCase() + : ‘ + e + );
function createCharts(outputArray, sheet, statColumns){
for(var s in statColumns){
var titleRangeString =R +(20*s+1)+C1;
var tableTitleRange = sheet.getRange(titleRangeString);
tableTitleRange.setValue(Raw Data For Metric: + statColumns[s]);
var tableRangeString = R +(20*s+3)+C1:R + (20*s+outputArray[s].length+2) + C + (outputArray[s][0].length);
var range = sheet.getRange(tableRangeString);
var chartBuilder = sheet.newChart();
.setOption(title, Monthly Comparison Of Adjective Performance For Metric: + statColumns[s])
.setPosition((20*s+1), outputArray[s][0].length+2, 1, 1);


New Modifications in Google Search, Desktop vs Mobile, Results in Traffic Changes


Google seems to have made a switch a few days ago where on mobile search they are now likely to serve featured snippets from pages that are powered by AMP. @thefke and @glenngabe were one of the first to notice this and I am able to replicate it.

For example, if you search for [how to use twitter] on Google desktop vs Google mobile, you will get Wired’s non-AMP page for the featured snippet on desktop and Forbes AMP page for mobile results.


Some publishers and webmasters are noticing significant changes in their traffic because of this change. It seems, although Google has not confirmed this yet, that Google may prioritize an AMP document in the mobile featured snippets over even mobile-friendly pages that are featured on desktop.

This is not always the case, I was able to bring up results in the featured snippets box on mobile that were not powered by AMP.



Google Adds Introduced Instant Answers to iOS App


With a new search app update for iOS, Google has added trending searches and instant answers. (TechCrunch noticed it earlier today.) It replicates a previously introduced Android feature which reportedly resulted in an outcry, causing Google to enable an opt-out.

In the “what’s new” discussion in the iOS App Store, Google says:

  • See searches that are trending around you when you tap on the search box to start a search
  • Get instant answers to your questions as you type them, before you even complete the search. Try it out by typing for “goog stock” or “how tall is the eiffel tower” and see the answer show up in the suggestions below the search box
  • Easily give feedback on any suggestions you see while typing — just swipe left and tap on the “info” icon

Here’s what it looks like:

Knowledge Graph

The trending searches appear to be national rather than specific to my location. The data appear to be Knowledge Graph data, but it’s not consistent — answers don’t always appear to factual questions — or as rich as the Google Answer Box, which appears after the search is actually entered.

Apple offers a somewhat richer version of instant answers with its Spotlight Search on Safari, though there’s no trending data.

Screen-Shot Spotlight Search

Trending searches will be interesting to some people. Others will be indifferent; still others may be horrified (“Starbucks Pumpkin Spice Latte”). If they were truly local queries, it would be more interesting to me.

Instant answers has some utility for quick facts. But it’s now faster, easier and more efficient to use voice search or Google Home, if you have one. I can ask for the time in London or “what’s the population of the United States?” much more quickly with my voice than my phone keyboard.



Google Confirms SEO & Ranking Not Affected by Noreferrel/Noopener


Dawn Anderson asked Google’s John Mueller if using the noreferrer or noopener attributes can hurt your Google rankings and SEO. The answer John responded with was “nope.” So there you have it, feel free to use those attributes without worry.

A Noreferrer specifies that the browser should not send a HTTP referrer header if the user follows the hyperlink.

A Noopener instructs the browser not to send referer information along with header. Technically, it just nullify the object window.opener.

Both do not impact Google, so feel free to use it.



Protect your Google Analytics Data

Google Analytics data-security

The digital space has given marketers massive reach and capability. But with that power comes responsibility, along with an obligation to protect data that can be recognized as personally identifiable information (PII). Recurring audits and safeguards built into your technical layer are critical to ensuring that PII doesn’t pass into your Google Analytics.

Read Cardinal Path’s guide to data security and privacy for:

  • best practices for mitigating risks of PII and limiting chances of common occurrences.
  • tips on assessing whether you have PII present within your GA account.
  • approaches to auditing and solutions for resolving the issues of PII.



Update Coming in September from Google Adwords

Google adwords update


Google announced they are “simplifying ad rotation to two settings.” Specifically they are only going to offer “optimize” and “rotate indefinitely” options starting in late September.

Optimize Ad Rotation:

The “optimize” ad rotation setting prioritizes ads that are expected to perform better than other ads within an ad group. Google said this is figured out by Google’s machine learning technology. “This setting will optimize your ads for clicks in each individual auction using signals like keyword, search term, device, location and more,” Google added.

Rotate Indefinitely Ad Rotation:

The ad optimized ad rotation works best for most advertisers, Google said. The “rotate indefinitely” setting is “the easiest way to give your ads equal preference,” Google said, so “it will be the sole option for an even rotation going forward.”


Ginny Marvin digs into some of the concerns around these changes but I have yet to see any complaints. If we see complaints when it goes live, we will let you know.



Google is Making a new Update for Local Inventory Ad product search in Knowledge Panels

A search bar and multiple product listings are part of the update.


Last May, Google introduced the ability to find out if a local retailer had specific products in stock right from the knowledge panel listing for the retailer. Now, it’s dedicating a whole lot more real estate to the feature.

Glenn Gabe, digital marketing consultant at G-Squared Interactive, tweeted a look at the update. Below are a couple of examples. It’s available on both mobile and desktop and goes well beyond the simple “Search items at this store link” that Google originally showed. A large section includes a search box, product category links and large product listings. On mobile, users can swipe through a carousel of product listings.


The feature is part of the Local Inventory Ads product, which enables retailers to promote products available in their locations via inventory feeds submitted to Google. The links and search results lead to Google Shopping pages.

Google is also running a test to show relevant text ads in knowledge panel listings for local businesses.



Enterprise SEO Platforms: A Marketer’s Guide

choosing-right-pencil in SEO

MarTech Today’s “Enterprise SEO Platforms: A Marketer’s Guide ” examines the market for enterprise SEO tools software and the considerations involved in implementing SEO management platforms. The 42-page report reviews the explosion of SEO Tools, plus the latest trends, opportunities and challenges.

In this report you will learn:

  • who the key players are in the SEO Tools market.
  • what you should look for in a SEO management software solution.
  • recommended steps for evaluating.

Also included in the report are profiles of 13 leading SEO tools vendors, pricing charts, and capabilities comparisons. Visit Digital Marketing Depot to download your copy.



Google announces Accelerated Mobile Pages for ads

Utilizing ‘Fast Fetch’ ad request and rendering, ads served on AMP (Accelerated Mobile Pages) will now be faster, and potentially will improve viewability rates.


Yesterday, Google’s AMP (Accelerated Mobile Pages) group announced enhancements to ads served in AMP. Specifically, the project has entered phase two of its three-phase plan for supporting comprehensive advertising functionality in AMP.

While phase one focused on basic support for ads within AMP, phase two focuses on speeding up AMP ad rendering, utilizing what they call “Fast Fetch” — separating the ad request from the ad rendering. Fast Fetch — vs. their previous method, “Delayed Fetch” — allows the ad request to happen while the page content is being rendered, and then only renders the ad before the ad slot is in view for the user.


From their announcement:

With Fast Fetch, ads are requested much earlier in the lifecycle of the page, allowing page rendering and creative selection in the ad server to happen in parallel. Fast Fetch is 850ms faster at the 50th percentile and 2.7s faster at the 90th percentile as compared to Delayed Fetch.


Ads that are created using the AMP ad spec get an extra performance boost with this new method. Publishers and advertisers using DoubleClick and AdSense are already going to see this benefit, as those platforms automatically convert eligble ads to the AMP Ads format. The AMP spec group is encouraging creatives to switch to developing AMP Ads, and ad tech platforms/networks to begin using Fast Fetch for their ad tags.

This new method not only improves overall content and ad rendering time, it assists in raising the viewability metric for ads, an area of signficant concern for advertisers (and a problem for publishers).

Features being planned (no dates specified) as part of the Fast Fetch rollout include:

  • competitive exclusions and roadblocks for AMP pages.
  • ability to refresh ads at a configurable frequency.
  • support for enhancing ad requests with targeting information to the ad server in real time.

Looking for more information on implementing AMP, AMP ads and AMP landing pages? Join me for a special AMP webinar,and then for these sessions at our SMX conference:

  • AMP: Do Or Die? ~ publishing, e-commerce and technical experts will discuss the whys, why nots, benefits and cautions on adoption of AMP.
  • Getting AMPed: Essential Info About Google Accelerated Mobile Pages ~ technical experts on AMP implementation will discuss how to get up and running on the platform.