Technical SEO

Technical SEO

Technical SEO is a huge topic to cover, and there are dozens of different platforms to choose from when building a website. That complicates matters.

Let’s keep it simple, and stick to how to approach technical optimization on a WordPress site. Much of what you’ll find below applies to all websites, but since the majority of websites run on WordPress, we’ll stick to what we know.

This is part 1 of 2. There are 15 sections we’re going to cover on this topic, the remaining topics will be published shortly after part 1.



Screaming Frog is a popular choice for many SEOs, but we prefer Sitebulb for the quality of its presentation and helpful hints system that helps guide users in finding the biggest issues on a site.


You’re probably already familiar with SEMrush and/or Ahrefs, and either of those tools will work fine for our purposes here.


Google Analytics is the standard for tracking web analytics, and connects into Google Search Console and Google Tag Manager without a hitch.

Bing Webmaster Tools is also helpful to have access to.


Sitebulb does a good job, but every tool has its blind spots, which is why we also rely on the following tools for diagnosing specific issues we’ll dive into later.

Sitechecker’s Cloaking Checker tool crawls your site to ensure that both search engines and users are receiving the same version of the website, the alternative violates Google Webmaster Guidelines.

SSL Labs’ SSL Server Testing Tool provides a deep analysis of the configuration of your server, so we’re aware of any security issues that could negatively impact the site.

This XML Sitemap Validator helps us determine if a website’s XML sitemap is valid, or what errors or issues come up when validation fails.

The Detailed SEO Extension is a browser add-on that gives you at-a-glance access to metadata and other helpful information about a given webpage without you having to inspect elements or page source code. We’ve used both the Google Chrome and Mozilla Firefox versions with no issue.

Google’s Mobile-Friendly Testing Tool will let you know immediately if your webpage works well on mobile, and provides some additional resources to help fix issues.

Google’s Rich Results Testing Tool shows you if your markup has errors or warnings. This is extremely important, as errors in your markup invalidate that markup completely.

KnowEm’s Social Media Optimizer tool covers how social previews look when pages of your site are shared to Facebook or Twitter. Obviously, these are especially important on sites which have shareable content.

Web Developer by Chris Pederick allows you to disable things like JavaScript on a webpage at the click of a button. Another browser extension, it is available on major browsers.


WP Rocket is a comprehensive site speed optimization tool, automating things like page caching, JavaScript (JS) and Cascading Style Sheets (CSS) minification, and more. Recently, the WP Rocket team added the feature to delay JavaScript execution, which significantly improves load time.

Yoast SEO is one of the most popular plugins for WordPress SEO, although, we have been finding RankMath to be better.

There are dozens of 301 redirection plugins on the market, but we’ve never had any issue with Redirection, a free, lightweight plugin that allows you to easily set 301 redirects when removing pages, updating URLs, or doing anything else that could lead a user to a 404 not found page.


Now that we’ve covered how we’ll audit a website, let’s do it. For this example audit, we’ll be taking a look at Quiqley Heating, Air Conditioning & Duct Cleaning, an HVAC company based in Dallas.

Quigley HVAC

Before we do anything, let’s get a crawl done on this site. For our purposes in this example audit we’ll use Sitebulb, but Screaming Frog should provide equivalent data.

Once you open Sitebulb, click New Project in the top left corner.

Start a new crawl in Sitebulb

Plug in a Project Name and the start URL:

Sitebulb project name

The tool should automatically select the canonicalized version of the homepage for you. Click Save and Continue.

Sitebulb audit setup

Leave your Crawler Settings at default, but make sure to choose Page Speed, Mobile Friendly and Front-end.

Sitebulb audit settings

If you have access to Google Analytics and Search Console already, select those and connect them to Sitebulb. This will pull in that data, which is extremely helpful! Also, click Crawl Website, and XML Sitemaps if they’re not already selected. Once you’re happy with the configuration, click Start Now and after a few minutes your crawl will finish.


For the sake of focus, we’ll break up the audit into sections, starting with:


We all know content is important, but from a technical point of view, a lack of content could indicate an issue that we can fix.


The On Page section of Sitebulb under SEO is helpful mostly for determining the state of on-site optimization, but it also features a Word Counts graph that we can use to determine if we have pages on the site with no, or little content:

Sitebulb insufficient content

As you can see, the Quigley site has a handful of pages (266 to be exact) with between 51 and 100 words. This isn’t a red flag by any means, but by clicking on the graph, the tool will show us which pages fall under each range. This functionality applies to every graph in Sitebulb, and each dataset can be exported by clicking the Export button.

Exporting Sitebulb results

This can be especially helpful in finding old content that serves no purpose and flagging it for removal.


Duplicate content is an important consideration, as it poses the risk of impacting site performance in the SERP. Again under SEO, click the Duplicate Content section.

Sitebulb duplicate content

Here, you’ll see a general Duplicate Content score, along with sections for general Content, Similar, Titles, and H1s. Clicking any of these elements will point you exactly to where the issues arise on the site so you can easily find and update the content to improve your score.


The most important section is the first one: Content, with 2 flags. This arose because their Thanksgiving post was duplicated, so we’d recommend they remove the duplicate post, and use this as a chance to determine why it was created in the first place.


For page titles, H1s, and other metadata, simply updating the metadata in question should remove the flag for those pages.


The Similar section is also extremely helpful, because it points out weaknesses in the content. For instance, the Quigley site was flagged for similar content on seemingly every location page they have on the site:

Sitebulb flagged similar content

So let’s take a look at one of them:

Quigley duplicate content

There’s nothing wrong with using templates for location pages, but there simply is not enough on these pages to differentiate them. The majority of the content is recycled between them, and while there should be similarities between these pages, they should be more unique than simply tweaking mentions of the location in copy. If you want to read more about creating location pages, check out this post I wrote on SEMrush.


Keyword cannibalization is a dramatic term for what happens when more than one page ranks for the same keyword. This dilutes the effectiveness of your on-site, and could potentially hamper the site’s visibility in search results.

Search Console provides extremely helpful tools for identifying this, but we don’t have access to this site. Off to ahrefs!

Plug in your site, and click on Organic Keywords on the left sidebar:

ahrefs organic keywords report

Set your filters to exclude the brand name, so we’re only seeing competitive terms:

ahrefs filter

Uncheck URLs or we won’t see anything, and click Apply.

Ahrefs should automatically organize the results so you can see which pages are earning what, for which keywords. While we found no high profile keyword cannibalization here, we did notice that their service pages aren’t ranking nearly as well as the location pages we discussed earlier.

Even if you don’t find any keyword cannibalization issues, paying attention to what each tool says can help save you time down the line.


Back to the On Page section under SEO in Sitebulb, let’s take a high-level look at the on-site optimization.

Scroll down past the Word Count section we glanced at earlier, and you’ll see pie charts covering Title, Meta Description, and Header 1 lengths and how many pages on the site have errors associated with these metadata.

Sitebulb metadata report

In our crawl, 51% of the titles were too long, and another 15% were too short – less of an issue, but good to know. You can see above that many of the pages are also missing meta descriptions, and over half of the H1s on the site are too long.

This data is extremely helpful, because it tells you exactly what you need to do on which pages, but always use your own judgment in implementing tool-recommended changes.

In a perfect world, every page on the site has appropriately targeted metadata on every page, within ideal character limits, and with no duplicates. Prioritize your changes based on how important the pages are. A location page is more important than a blog post from a few years back.

Some other things to keep in mind when reviewing the content on your site:

  • Does the site have intrusive ads or interstitials (pop-ups)? They’re frowned upon universally.
  • While bounce rate is an admittedly poor metric, are there pages for which the bounce rate spikes in Google Analytics?


While we don’t have access to the Search Console for our example audit, Sitebulb shines a light on where links are pointed, and if there are issues with those links.

Let’s start by taking a look at the number of pages on the site Google has indexed vs. the number of pages according to our Sitebulb crawl.

Head over to Google, and insert site: in front of your site name.

Google site search operator

Below, we can see that Google has 732 results for this site.

In Sitebulb, click on Internal under SEO.

Sitebulb internal url report

As you can see, we have 1,431 HTML URLs on the site, around half of what Google has. You may have also noticed that there are 6 broken resources, we’ll get to those.

Click on view, and take a look at the pages showing up in the crawl. At a glance, there are abundant redundancies in our example’s blog content, many of which can be traced back to the sitemap.

Sitebulb crawl showing redundant urls

In this case, we would recommend exporting a list of every URL on the site (green button), and setting aside time to work through all of the links, making sure that every page on the site is worth a user’s time. We typically remove every valid URL from this working document, and then organize them by whether or not they should be removed and redirected, consolidated into another piece of similar content, or simply updated.

As for the broken links, click on View to take a look at which pages are causing issues, including where the broken links are coming from.

Sitebulb broken link report

The First Parent URL section is especially useful, as it tells you exactly which page a broken link comes from.

Running the site through Sitechecker’s Cloaking Checker tool, we found no evidence of search engines and users receiving different versions of the site.

Under the Indexability section beneath SEO in Sitebulb, let’s take a look at the state of nofollow tags on the site.

Nofollow tags are basically a way for publishers to take control of what they consider the most important content on a site. This is done by including the tag in the HTML:

<a href=”” title=”Example” rel=”nofollow”>Visit Quigley HVAC Today</a>

This hyperlink would say Visit Quigley HVAC Today, but would not convey as much authority from the page linking to it due to the presence of the nofollow tag.

Sitebulb indexability score report

The Quigley site has no nofollow tags, so no need to audit those links and make sure those tags are included for the right reasons: you don’t want search engines to follow that link, and associate the two pages.

Let’s now take a look at whether or not the site navigation functions without JavaScript enabled. Open up the Web Developer extension on your site, and click Disable JavaScript, then reload the page. Does your navigation still work? Great! If not, address this issue with your development team.

Other things to consider when determining how well search engines can crawl your site:

  • Is pagination in place on your blog post pages? Ensure that Google isn’t crawling nonexistent pages by using the site: search we discussed earlier.
  • If you have Search Console access, have any flags or significant issues arisen in the past few months? Check the Coverage section below Index to check for errors.

Google Search Console coverage report


Most WordPress websites automatically create a sitemap, located at /sitemap_index.xml. Quigley’s is in fact located there as well:

If you have no sitemap, there are tools that will help create and organize them to best cooperate with search engine spiders. One such tool is Yoast SEO, widely used for its versatile metadata editing functionality, but it also dynamically generates a sitemap and keeps it organized per changes on your website.

Once we’ve verified we have a sitemap, we can validate it to make sure no errors are present that will hurt us more than help. Open up the XML Sitemap Validation tool, plug in your site, and see what happens.

XML validation report

Obviously, if the Sitemap is invalid, or has warnings or errors, it’s time to go back to the drawing board. Yoast SEO tends to take care of most of the work, though.

If you have access to Google Search Console and Bing Webmaster Tools, ensure you have your sitemap submitted within these tools, and that no errors result from their verification.

Add a sitemap to Google Search Console

The Sitemaps section of Search Console, under Index, is where you can submit your sitemap. Google should do the rest.

You can find Bing’s Sitemaps tool in the same place:

Submit an xml sitemap to Bing Webmaster Tools

Just click Submit sitemap, plug it in, and you’re done.

Now let’s head back to Sitebulb and check the XML Sitemaps section under SEO:

Sitebulb xml sitemap report

According to Sitebulb, the sitemap has 241 non-indexable URLs, with 238 only in sitemaps, and another 136 not in sitemaps.

We’ve already noticed some issues with the blog content, so this further reinforces the need for a blog content audit. You can click View on any of these categories for helpful spreadsheets to help you organize your efforts.

Finally, we can see that the sitemap is under 50,000 URLs. The vast majority of websites will have only a handful of pages, but it’s always good to check for bloat and redundancies.


Finally, a shorter section! Robots.txt files provide recommendations on what search engines should and shouldn’t crawl on a website, and can be found on the vast majority of websites by simply adding /robots.txt to the domain:

Most WordPress sites need only a few things in their robots.txt file:

User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php

Basically, this tells all search engines to skip crawling the login page for WordPress, to allow access to the Ajax.php file used by many themes and plugins, and informs them where the sitemap is located.

The Yoast SEO plugin features a File Editor that allows you to update the robots.txt, as the sitemap line item is typically excluded by default.

yoast file editor


Canonical tags tell search engines which version of a page is the legacy version. For instance, from Google’s perspective, every one of the following URLs is a different page:

Note the differences between http and https, www and non-www, those with and without trailing slashes after the .com. Canonical tags allow you to simply assign the master version of the page so search engines know what to respect.

Yoast SEO automatically assigns canonical URLs based on site settings, but it’s important to spot check the homepage and a few service pages to make sure it’s been implemented correctly.

This can be done by opening up the Detailed SEO Extension on the pages in question, and seeing if the URL matches the Canonical URL:

We also want to make sure that the www version of pages automatically redirect to the canonical. Test this just by adding the www into the URL on a couple of pages. If they redirect, great! If not, speak to your developers about implementing this edit into your .htaccess file.

A common default URL for homepages is, so it’s good to redirect that to the canonical version of the homepage just in case. In Quigley’s case, the /index.html version does not redirect, so we’d want to use a 301 redirection plugin to take care of this.

Finally, we need to make sure that the HTTP version of pages redirects to the HTTPS version of the site. You can do this by simply removing the S in the URL. Again, if it redirects to the canonicalized version of the page, you’re in the clear!


Site architecture refers to how pages are organized in regard to one another, especially in terms of hierarchy. Your website should be organized in a way that makes sense to users and search engines alike.

For instance, on the Quigley site, we might expect there to be a dedicated Services page, with AC service, heating, duct cleaning, and their maintenance plan pages residing beneath that in the URL structure.

quigley url structure

We were close! The presumed Services page link goes nowhere; however, the other pages stick to our guess:

My only complaint about this setup is that the /services/ page is an archive page containing virtually every service and location page on the website. That page isn’t particularly helpful to the end user, but it shouldn’t pose any significant issues provided. We did verify it’s indexed via a site: search in Google, and this specific page appears to have links pointed to it, but in my opinion, it’s too spammy to be worthwhile by its very nature and the objective of this page should be reevaluated.

Another consideration is the presence and implementation of breadcrumb links. Back to our Quigley service page example, we can see a logical approach to breadcrumbs beneath the H1 on each page:

breadcrumb links

These are fine, but once again, the Service Archive page rears its ugly head.


Now let’s take a look at internal links, or the links on our website to other pages on it. Internal linking helps search engines understand relationships between pages, while also giving users easy access to relevant pages on the site.

One red flag immediately spotted on the homepage was the lack of solid anchor text on the links to services pages.

weak internal links

Above is the link in question: Read More –

This says nothing about the page it’s going to. If possible, updating the link to be present in the Air Conditioning H2 would provide a bit more context to search engines following those links through.

Now let’s check out the Links section beneath SEO in Sitebulb.

sitebulb internal link report

Here we can see every link our tool crawled on the site, including those that are broken (19), redirected (540), and more. By clicking the pertinent link in Sitebulb, it will, as typical, provide you with the location of every errant link on the site.

Ideally, we don’t want any broken links, redirects, errors, forbidden resources, or timeouts. Some issues are unavoidable, or triggered by plugins or other aspects of the site’s configuration, but it’s still important to note these and do your best to clean the links up to the best of your ability.

Broken links can typically be redirected to another relevant page, based on the URL if nothing else. For instance, if you have a URL even vaguely mentioning AC, a safe bet is to redirect it to the AC service page.

As for redirects, it’s not ideal to rely on 301 redirects when you can simply update the link. Thankfully, Sitebulb comes in handy once again by allowing you to quickly and easily export the links, and where they’re found.


Inbound links refer to links from other sites to our own. I don’t have to tell you that links are extremely important in SEO, so we’ll focus on how to determine the overall state of links pointing to our website, while also keeping an eye out for potentially spammy or harmful links.

First, let’s head to ahrefs and plug in the site. Typically, we would use the Best by links section to determine which pages had the most links pointing to them, but this site is incompatible with that section of ahrefs, so we’ll have to find an alternative.

Click on Anchors, beneath the Backlink Profile section.

ahrefs inbound anchor text report

Sort by referring domains so we can see the most popular anchor text, and by clicking on Details and Referring Domains, we can determine which sites are using what anchor text to link to Quigley.

spammy anchors

Here’s an example of a spammy link, found in Quigley’s profile. Blogspot links are almost always worthless, especially when their names and anchor text indicate no connection whatsoever to the site in question. While these links are a relatively minor issue, you can begin building a list for link disavowal in case you find other problematic links elsewhere by exporting these.

Furthermore, it’s a good idea to check what links your site used to have by using the Lost and Broken link tabs beneath Backlinks.

lost and broken backlinks

This page shows links that were recently lost, while the Broken section refers to those which result in 404 errors. Typically, a major part of link building is tracking down, claiming, and ensuring that major citations feature correct info, but this allows you a head start by showing you where problems arise.


Semantic markup tells search engines exactly what a page is about using HTML. All of our on-site work is intended to give search engines hints about page content, but markup allows us to cut to the chase.

The most crucial type of markup for most businesses are Organization and LocalBusiness, Organization markup is intended for corporations, while LocalBusiness denotes a ”particular physical business or branch of an organization” according to

We can test this on our example site soon-deprecated Structured Data Testing Tool by Google; their Rich Results Test is less efficient, but may be our only choice in the future.

structured data

The Quigley site features WebPage and Organization markup on the homepage, while the Contact page also includes ContactPage markup.

The aforementioned LocalBusiness markup would be more helpful than any of these, as Very Good Local SEO focuses on local applications. In Quigley’s case, that would just be the primary location page because their Service Areas pages don’t relate to physical locations.

We found no errors or warnings in their markup, which is extremely important. While warnings have no effect on the markup, errors completely invalidate it, so it’s crucial you validate markup before publishing it to your site.

There are a variety of markup generators to use, such as this one at Simply input all of the required information into the designated fields and you’re ready to validate and implement.

As for implementation, Google Tag Manager is our preferred method, while there are WordPress plugins that allow you to push markup to specific pages.

Two additional types of Schema markup to consider are Review and FAQ, both of which help enhance the appearance of a site in search results when implemented correctly. For instance, if specific pages of your site include reviews, testimonials, or frequently asked questions, it’s simply a matter of filling out the markup per an appropriate generator and publishing the markup on that page.

Saijo George’s FAQPage Schema Markup Generator does a fine job of formatting the markup for you, while Web Code Tools’ Ultimate JSON-LD Generator includes Review markup, and is another good option for you to play with.


Images are responsible for much of the bulk on a typical website, reducing load times and negatively impacting user experience. There are a couple of easy ways to find which images are causing the issues, and figure out how to best address them.

Surprising no one, let’s head back to Sitebulb, and click on Page Resources, below the Security section.

sitebulb page resources report

Now click on View in the Images section.

sitebulb view images section

We can already tell that the images are hosted on the same domain as the rest of the content, so that’s no issue.

This sheet automatically prioritizes the File Size metric, so let’s click on it to sort by descending, showing us the largest files first. Ideally, each image would be under 100kB, but in Quigley’s case, we have quite a few that exceed this.

Furthermore, if we scroll to the right and check out the Compression and Scaled Images columns, we can see that neither is in place.

There are some excellent plugins to handle image compression and scaling, such as TinyPNG. This plugin in particular has some bandwidth limitations, so it may take a month or more to get to each image on the site, but it’s a great, lightweight option to get you started.


While images are a big part of site speed, there are a lot of other opportunities we can explore by tinkering with WP Rocket: our favorite site speed plugin for WordPress.

WPRocket dashboard

The most important sections to pay attention to are Cache, File Optimization, and Media.

Typically, we go through each section, activate a specific part of WP Rocket’s functionality, and then do an incognito check on the site to see if what we’ve activated has negatively impacted load times, the appearance of the site, formatting, etc.

Pay special attention to the Delay JavaScript execution toggle under File Optimization, as it is a newly released feature and one which produced huge results for our clients.

While you can use the Page Speed Score in Sitebulb, it’s good to include some third party site speed audits so you have a fuller picture of where your site could improve in terms of speed.

Let’s start with GTmetrix, which reveals some solid optimization opportunities:

GTmetrix report

The site is loading in just under 17 seconds. That’s atrocious. WP Rocket should take care of browser caching, JS parsing delay, but the redirect chain issue GT caught is a pretty big deal: looks like multiple advertising pixels are chunking the site up.

In this case, we’d recommend going through any existing Google Tag Manager or code injection plugins and removing all unnecessary scripts.

Google PageSpeed Insights also provides similar data:

google page speed insights

Clicking on any of the drop downs provides additional details about the resources in question that are blocking rendering.

Finally, SEO Site Checkup gives us more of a view from 10,000 feet, covering things like metadata in addition to the site speed metrics we’ve been taking a look at.

The point of all of these different tools is to give you a second or third opinion on particular aspects of your site, while also creating a master list of things you’d like to accomplish on the site over the course of your optimization campaign.


One of the best aspects of working on WordPress is that for the most part, your site will be innately mobile friendly. That said, it’s still important to ensure your users have an optimal experience.

Boot up Google’s Mobile-Friendly Test and plug in your site.

Google Mobile-Friendly Test Report

Unfortunately for Quigley, it looks like their WordPress site is not in fact mobile-friendly.


Your company’s image online is important, and that applies to social media as well. We’re not going to get into the specifics of how to write the perfect Facebook post here, rather how to determine what your site looks like when people share it.

Back to the subject of markup, we can use Facebook Open Graph and Twitter Card markup to specify the nature of the previews that appear when people share specific pages. First, let’s see if any markup is present already by using KnowEm’s Social Media Optimization tool.

knowems social media optimization tool

It looks like they have Open Graph in place, but no Twitter Card info. Obviously, the priority level of implementing this should correspond with how much social attention your site earns. If you’re getting one share per year, this can probably take the back burner.

If you’re looking to set custom markup for each and every page on the site, there are plugin options to automate this for you, but we’d recommend prioritizing implementation by popularity of a page or blog post.


We’ve covered a lot of topics here in a relatively brief amount of time, and barely scratched the surface. The important thing in technical SEO is simply keeping your eyes open. No two sites are alike, and the discovery and cataloguing of these issues is where the true value comes in. Even if you find an issue that’s unlikely to be addressed, it’s still important to keep track of them in case something changes for the better or worse down the line.

Share this post:

Blake Denman

Blake has more than 14 years of local SEO and paid search marketing experience. He founded RicketyRoo in February 2009. Outside of running RicketyRoo, Blake enjoys spending time outdoors with his wife and Goldendoodle, June, hiking throughout Central Oregon.
More posts by Blake Denman →