Google Search Results is At It Again…Improving, Improving and Improving!

Starting around Tuesday of this week, we noticed Google algorithm and ranking shiftsthroughout the SEO industry and search results. There were significant chatter and the algorithm watching tools all, all of them, were responding heavily to the changes.

The truth is, the chatter and ranking shuffles have continued on through today and SEOs and webmasters are still pretty concerned and on their toes around watching these changes. Some have not noticed any change, of course. But others either saw improvements or losses in their rankings (yea, duh). If you have not checked your rankings and Google organic traffic yet for you and/or your clients, do so.

John Mueller of Google gave his typical comment on these changes on Twitter this morning saying “we’re always working on improving our search results, so seeing things in other tools is kinda expected.”

What specifically was updated is unclear. There is a new thread at WebmasterWorldasking for folks to share their theories, some include:

In the current Google Updates and SERP Changes thread, some people are saying that spam and worthless content have gotten a rankings boost recently.But I just checked some keywords for seve Google Updates and SERP Changes ral of my sites, and didn’t see much change from a week or so ago.

What I did see is a lot of cases of http pages ranking higher than https pages. For the keywords I checked, about 60%-70% of the first page results are http pages.

I do think Google has adjusted more than one knob on their secret formula.

1. Does Google show a date in the SERPs for each of your pages? And, if so, does it show the original post date of the page, or the “last updated” date?2. Is your site HTTP or HTTPS? (Like aristotle, I’m also seeing something interesting in this regard.)

Honestly, I am not sure what is going on but the tools are also on fire. It is not just the industry chatter.




SERP Metrics:

Advanced Web Rankings:



What are some of your theories and ideas? Did you notice real changes?


Inactive AdWord Accounts Are Now Easy to Bulk Cancel


You can now cancel in bulk your inactive Google AdWords accounts from your manager account. All you need to do is login, select them and click edit and then cancel.

  • Sign in to your AdWords manager account.
  • From the page menu on the left, click Accounts, then click Management along the top.
  • Check the box next to the accounts you want to cancel.
  • Click Edit and select Cancel from the drop-down.

Here is a screen shot:

This should help those with lots of inactive accounts to clean things up quickly.


Google Updating Their Search Results…Again?

Yea, yea, yea, more of the same. Google is updating their search results, it is in flux, search results are shuffling around. But I only try to report it when the signals all seem to be higher than the normal day to day shuffles. I always see people complaining about changes in Google but when it reaches certain levels, that is when I decide to cover it.

The ongoing WebmasterWorld thread has a spike in complaints from webmasters and SEOs about ranking shuffles and the automated tracking tools also show huge changes. Here are some comments from the threads:

This week was the worst week we have seen from google since panda 4. With all other updates we gained traffic but this one hit us with >50%. Sales form google organics, adwords and Shopping ads are off by 95%.

We have seen the same. We’ve grown massively over the past few months and this week we have lost ranking from positions 2/3 to 5/6. Its impacted us dramatically.

I’ve noted some interesting changes in the SERPs this week. Too early to say what’s up, and it’ll have to settle before making a better assessment.

For info sites, I’ve seen recent good results by moving away from keyword structured pages to answer based content. Those pages got a jump in SERP inclusion.

I know a lot of people take these types of tools with a pinch of salt, but Algoroo and moz and showing big movements today in the US. In my experience, the UK usually follows. Hopefully its a reversal of what happened last week – because we’ve definitely been hit with something.

It is hard to say if this is related to the September 20th update or another Google updateor unrelated at all. Google has not commented on anything this week, of course.

Here are some charts from the automated tools.







Advanced Web Rankings:

Did you notice major changes in your rankings or Google traffic in the past 48 hours?



Apple and Google are Reuniting and It Feels So Good!

Google For Search On iOS & Mac

A few years ago, Apple dropped Google and replaced them with Bing results on iOS and Mac. Well now, Apple is switching back to Google for the core web results and some other results both on iOS Siri and Mac Spotlight results. The news came from TechCrunch which both Google and Apple representations confirmed for me.

“Switching to Google as the web search provider for Siri, Search within iOS and Spotlight on Mac will allow these services to have a consistent web search experience with the default in Safari,” reads an Apple statement sent this morning. “We have strong relationships with Google and Microsoft and remain committed to delivering the best user experience possible.”

It isn’t clear how much this is costing, the partnership, but we can say it is likely in the billions of dollars.

“All of the search results that you see in these different cases will come directly from the search API, which means you’ll be getting the raw, ranked search results that start below all of the ads and Knowledge Graph stuff that appears on a regular Google home page,” TechCrunch reported. YouTube results show as well.

Apple is anonymizing the data so Google doesn’t get anything, that is until you click over to Google’s web site. Then it is fair game.


Several Changes are Coming to Google Finance


Google has quietly posted in the Google Web Search Help forums that they are deprecating the portfolios section in Google Finance. It is going away next month, as part of a redesign of Google Finance.

Andy from the Google Finance team wrote:

Thank you for using Google Finance. We’re writing to let you know that the site will soon be undergoing a few changes to make it more accessible and user-friendly for a wider audience.The list of stocks in your portfolio will be migrated into the new experience on Google automatically, so that you can continue to receive related news, recommendations, and information about market trends. However, the Portfolios feature will no longer be available as part of the service.

The Portfolios feature will soon be deprecated as part of a renovation to Google Finance. To retain a copy for your records, download your portfolios now.

We apologize for any inconvenience this may cause. To give you time to download and consider alternative services, this change will not take effect until mid-November 2017. To learn more about these changes, visit the Google Finance Help Center for details.

Best, – The Google Finance Team

Google wrote in their help section:

In an ongoing effort to make Google Finance more accessible and user-friendly for a wider audience, we’re making a few changes to the service in November 2017.

As part of this updated experience, you’ll still be able to:

  • Follow the stocks you’re interested in – the list of stocks in your portfolio will be migrated into the new experience on Google automatically
  • Receive the latest industry news and market trends
  • However, as part of this updated experience, the Portfolios feature will no longer be available. To keep a copy for your records, download your portfolio now.

To give you time to download and consider alternative services, this change won’t happen until mid-November 2017.


Easy Tips to Build Links Quickly


Without a solid base of links, your site won’t be competitive in the SERPs — even if you do everything else right. But building your first few links can be difficult and discouraging, especially for new websites. Never fear — Rand is here to share three relatively quick, easy, and tool-free (read: actually free) methods to build that solid base and earn yourself links.

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


Video Transcription

Howdy, Moz fans, and welcome to another edition of Whiteboard Friday. This week we’re going to chat about how to get those first few links that every website needs to be able to compete. Many folks I know when you get started with link building, it can seem daunting and overwhelming. 

So let me walk you through what is essentially a half a day of work, maybe three or four hours of work to try these three tactics that will almost certainly get your business or your organization the first handful, let’s say 50 links that you need to start being able to compete. Content can you take you a long way. Keywords can take you a long way. Engagement and interaction can take you a long way. But you’ve got to have a base of links. So let’s get started here.

#1. Your brand name, domain name, and founder’s/execs names

The first one is basically looking for links that come from your own name, your brand name, your domain name potentially, and the names of the founders or people who run your company.

Step One: Search Google for the names in quotes.

So if it was me and Moz, you’d be searching for “Rand Fishkin” or “” in quotes, not the domain name in the URL field. But in the Google search bar, I’d be searching for “” in quotes or “Moz + SEO.” Moz also has other meanings, including the singer Morrissey, which makes for confusing types of things. If you have that, you’ll need to use your brand name plus some sort of signifier or identifier. It’s very rare that Morrissey gets mentioned along with search engine optimization. It’s very often that Moz gets mentioned along with SEO, and so I can combine those to search for it. So any of these searches will result in a big list of tons of Google results.

Step Two: Manually check the top let’s say 50 to 100 results to confirm that…

  1. They link to the right place, and if they don’t, if there are mentions of Rand Fishkin that don’t link to Moz, we should fix that. We’re going to contact those people.
  2. If you can control the anchor text and where the link location points, you can update it. For example, I can go to my LinkedIn. My LinkedIn has a link to Moz. I could update that if I were at a different company or if Moz’s domain name changed, for example when it did change from SEOmoz to just Moz.
  3. If it’s missing or wrong, I find the right people, I email them, and I fix it. As a result, I should have something like this. Every single mention in Google has a link on the page to my website. I can get that from brand name, from domain name, and from founders and executives. That’s a lot of great links.

#2. Sites that list your competition

So this is essentially saying we’re going to…

Step One: Identify your top 5 or 10 most visible on the web competitors.

This is a process that you can go through on your own to identify, well, these are the 5 or 10 that we see on the web very frequently for searches that we wish we competed for, or we see them mentioned in the press a ton, whatever it is.

Step Two: Search Google not for each one individually, but rather for combinations, usually two, three, or four of them all together.

For example, if I were making a new whiteboard pen company, I would look for the existing ones, like Pilot and Expo and Quartet and PandaBoard. I might search for Pilot and PandaBoard first. Then I might search for Pilot and Expo. Then I might search for PandaBoard and Quartet and all these various combinations of these different ones.

Step Three: Visit any sites in the SERPs that list multiple competitors in any sort of format (a directory structure, comparisons, a list, etc.)

Then in each of those cases, I would submit or I would try and contact or get in touch with whoever runs that list and say, “Hey, my company, my organization also belongs on here because, like these other ones you’ve listed, we do the same thing.” So if it’s here’s whiteboard pen brands, Expo, PandaBoard, Quartet, and your site, which should now link to

This is a little more challenging. You won’t have as high a hit rate as you will with your own brand names. But again, great way to expand your link portfolio. You can usually almost always get 20 or 30 different sites that are listing people in your field and get on those lists.

#3. Sites that list people/orgs in your field, your geography, with your attributes.

This is sites that list people or organizations in a particular field, a particular region, with particular attributes, or some combination of those three. So they’re saying here are European-based whiteboard pen manufacturers or European-based manufacturers who were founded by women.

So you can say, “Aha, that’s a unique attribute, that’s a geography, and that’s my field. I’m in manufacturing. I make whiteboard pens. Our cofounder was a woman, and we are in Europe. So therefore we count in all three of those. We should be on that list.” You’re looking for lists like these, which might not list your competitors, but are high-quality opportunities to get good links.

Step One:

  1. List your organization’s areas of operation. So that would be like we are in technology, or we’re in manufacturing or software or services, or we’re a utility, or we’re finance tech, or whatever we are. You can start from macro and go down to micro at each of those levels.
  2. List your geography in the same format from macro to micro. You want to go as broad as continent, for example Europe, down to country, region, county, city, even neighborhood. There are websites that list, “Oh, well, these are startups that are based in Ballard, Seattle, Washington in the United States in North America.” So you go, “Okay, I can fit in there.”
  3. List your unique attributes. Were you founded by someone whose attributes are different than normal? Moz, obviously my cofounder was my mom, Gillian. So Moz is a cofounded-by-a-woman company. Are you eco-friendly? Maybe you buy carbon credits to offset, or maybe you have a very eco-friendly energy policy. Or you have committed to donating to charity, like Salesforce has. Or you have an all-remote team. Or maybe you’re very GLBTQIA-friendly. Or you have a very generous family leave policy. Whatever interesting attributes there are about you, you can list those and then you can combine them.

Step Two: Search Google for lists of businesses or websites or organizations that have some of these attributes in your region or with your focus.

For example, Washington state venture-backed companies. Moz is a venture-backed company, so I could potentially get on that list. Or the EU-based manufacturing companies started by women, and I could get on that list with my whiteboard pen company based there. You can find lots and lots of these if you sort of take from your list, start searching Google and discover those results. You’ll use the same process you did here.

You know what the great thing about all three of these is? No tools required. You don’t have to pay for a single tool. You don’t have to worry about Domain Authority. You don’t have to worry about any sort of link qualification process or paying for something expensive. You can do this manually by yourself with Google as your only tool, and that will get you some of those first early links.



Simple Solutions for Higher SEO Rankings

Simple Solutions for Higher SEO Rankings

The digital marketing landscape has evolved significantly over the last two decades. And between Google’s ever-changing algorithm and the deluge of misinformation floating through the digital marketing sphere, it’s easy to lose sight of basic practices we should be employing in our own SEO and content marketing strategies.

With every new algorithm update and technological shift in search, we become obsessed with how the field of SEO will enter a wholly new paradigm, and we shift our focus to reflect this. Yet as much as the medium may change, the core principles remain the same — and it’s time to get back to the basics.

We all understand the secrets and best practices of SEO, so why do we often fail to leverage these tactics? Let’s explore five common blogging mistakes you may be making right now.

Unoptimized keyword structure

Despite the rise of semantic search and machine learning technology, keyword research should still take precedence when modeling an internal content marketing campaign. All on-site content should be thematically linked by topics and keywords to your overall business objectives.

If our content is simply covering topics and not keywords, how do we know what users reallydemand? Without keyword research, how can you truly know who your audience is and who you are writing for?

Keywords serve as the bridge between user intent and informational/transactional content. Keyword-optimized content helps to position individual web pages to rank higher organically and drive impressions for targeted searches. This effectively makes blog content a lead generator.

For on-site blogs, the focus should remain on informational long-tail keyword phrases. Common examples include question phrases beginning with how, what, when, where and why.

Other keyword ideas could include actionable phrases that are often searched for, such as the top “tips” and “hacks” to improve upon some process.

Bloggers often fail to optimize their headers, meta tags and content with targeted keyword phrases. Consider the fact that specific keyword phrases will often be bolded within the meta description of a SERP listing, potentially increasing your click-through rate.

Inadequate keyword research runs deeper than failing to optimize your header structure (e.g., title, meta description). Many bloggers fail to leverage semantic SEO, or similar keyword phrases with the same meaning. Semantic SEO allows bloggers to create more thorough and readable content that can drive impressions for multiple keyword phrases, answer more user questions and qualify your content to be a featured snippet — think of the rise of voice search.

On the other hand, over-optimized content could cross a dangerous line as well. Keyword stuffing, or possessing a high keyword density, will qualify your content as spam. Keyword stuffing also obstructs your content’s readability, which results in poor user signals.

Following SEO best practices, it’s still important to optimize all relevant site elements, such as URLs and meta tags, with targeted keywords to categorize and rank individual web pages. And aside from signaling to search engines the main focus of your on-site content, keywords also serve an important function for your site architecture.

Inconsistent internal links

Internal linking is probably one of the most overlooked aspects of SEO optimization, and issues with internal links frequently occur on SEO agency websites themselves!

There are many functions of proper internal linking for SEO:

  • Establishes paths for users to navigate your website.
  • Opens up crawling to deep linked web pages and increases crawl rate.
  • Defines site architecture and your most important web pages to search engines.
  • Distributes “link juice,” or authority, throughout your website.
  • Indexes linked-to web pages by the keywords used in the hyperlink anchor text.

While backlinks remain the gold standard of search engine ranking factors, their magic can be amplified through strategic internal linking.

Ideally, you’ll want at least three to five internal links per blog post, and a drop-down or navigation menu on your home page to provide deep links to inaccessible web pages. Just because a piece of content is posted to your blog, it doesn’t mean Google or Bing can automatically access it.

Conduct a thorough internal link audit and record which web pages have the most authority. Simply insert internal links on these pages to other high-value internal pages to distribute authority evenly throughout your domain.

Many websites display featured posts in a drop-down menu or on the home page to distribute authority to their blog posts. A blogger’s home page will be his/her most authoritative. Limit the number of links between each blog post and your home page to evenly distribute link juice throughout your domain.

Don’t overlook the importance of a sitemap, either. This will ensure all web pages are properly crawled and indexed — assuming URL structures are clean and keyword-optimized.

Finally, optimize all anchor text to categorize and drive impressions for linked web pages. Be sure to use varying anchor text phrases for each link so that you can rank your web pages for multiple search queries.

Poor page copy

As we often say in digital marketing, it’s important to write for readers and not search engines. Keep content light, don’t try to show off knowledge with excessive jargon, and write for readers on an eighth-grade reading level.

In most cases, on-site content is not about publishing, but building awareness around a need. I always suggest placing actionable tips in informational content to provide value.

Content marketing is as much a branding exercise as it is a marketing tactic. Consistent content production establishes your brand’s ethos and also creates your voice as an author. In turn, this establishes you as an authority in your niche.

Don’t sacrifice this authority with poor body copy.

Look over your blog post as a whole. What does a reader experience when they first encounter your web page? Consider the fact that the average attention span is estimated to be eight seconds. Optimize your header structure and meta tags to encourage easy scanability and communicate a clear purpose.

Leverage a powerful headline to pique reader interest, and nurture this interest with a strong introductory paragraph. Always insert clear transition phrases, and consider using animated GIFs and videos to give users a mental break between long chunks of paragraphs. These will also increase your average user dwell time.

Make your content visually appealing by utilizing white space properly and inserting images after every 400 words or so. This essentially chunks content and prevents information overload.

Finally, edit fiercely. Many writers live by the rule that about two-thirds of writing should be editing and reworking. Use tools such as Grammarly and the Hemingway App to create concise and clean body copy.

Unoptimized images and videos

Speaking of poor page copy, most bloggers still ignore image and video optimization. Unoptimized image file formats and sizes are the most common load time mistakes that deteriorate SEO performance.

All on-site images should be formatted as .jpg, and all vector images as .png.

Always optimize image alt text to position it to rank in a targeted keyword image search. The alternative text is what’s displayed when a browser fails to actually display the image and tells search engines the content of your image. (It’s also used to describe images to those with screen readers.)

When optimizing video files, host all of your video files in a single folder and create a video site map for search engines to index your videos. You should optimize the meta description of all video pages with targeted keywords for indexation. Leverage a call to action in your meta description and video annotations.

Video marketing can be distributed from multiple channels, as well as your blog. According to a recent survey by HubSpot, 43 percent of consumers want to see more video from content marketers.

Poor content promotion

This leads us to probably the greatest error that plagues bloggers and stumps small businesses. We’re told that a good piece of content should serve as a natural link magnet and even rank highly based on the merits of the writing itself. To be candid, from experience we’ve discovered this isn’t always true.

Consider the idea that a 10-hour project totaling 3,245 words, featuring exquisite content and imagery, is just as useless as a poorly written 400-word listicle if it doesn’t drive conversions or traffic. This is what I refer to as potential energy. Without a proper technical structure or any content promotion strategy at work, your awe-inspiring content is a dud.

What if, after writing his Theory of Relativity, Einstein had simply posted his theory on his front door and waited for someone to discover it? Content distributed over a blog on a young domain won’t gather backlinks or social shares without promotion.

Leverage your connections, and follow these strategies to promote content and allow it to compound over social media:

  1. Have influential members of your organization share and promote a piece of content.
  2. Contact influencers over social media to share content.
  3. Request a quote from an industry thought leader to place in your content; advertise this in your rich snippet on social media channels.
  4. Repurpose content into a video or infographic for greater shareability.
  5. Contact websites that have linked to similar content in the past.
  6. Submit your content to replace relevant broken links on authoritative sites.
  7. Run a paid advertisement campaign over social media to place content directly in front of targeted audience members.

Content promotion involves thorough audience analysis. Segment audience members into one of three boundaries based on habits, demographics and psychographics. Investigate what social media channels each audience segment uses the most and the points of time when they are most active.

Understand which pieces of content perform best over specific social media channels. The most viral content examples include:

  • “How-to” tutorials
  • Infographics
  • Videos
  • Listicles
  • “Why” articles

Content serves as an effective pull marketing tactic and inbound lead generator. Yet, if content is simply sitting on the shelf and gathering dust, it’s a lost investment.

Social and user signals factor greatly into organic ranking. Essentially, social promotion will draw users to your content, which will determine — based on their engagement — the efficacy of your content.


SEO agencies and content marketers often tell clients about technical and onsite errors they may be making. But sometimes it takes a little realism to take a step back and analyze our own campaigns for greater success in the long run.

Hopefully, you’ll take the news that your SEO content strategy is imperfect in the right way. It’s an opportunity to refine and improve.



Google Ad Balance Tool is Back!


Google posted on the AdSense Google+ channel that the ad balancer tool which is a tool that can be used to show less lower paying ads on your site, is not back up and running.

Google wrote:

We are happy to inform you that the Ad balance tool is back and you can now use it again to help you reduce the number of ads you show to users, specifically the ads that earn you the least revenue, and see how it affects your earnings.

I had no idea it broke – to be honest.

Here is what it looks like:

Here is a screen shot of the tool:


You can drag and click apply to adjust your ad balance:


Forum discussion at Google+.

Update: Now when I try it, it says it is under maintenance…




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);