SEO Technical Site Audit [Template Included]

Last updated 12/29/2022

Download the checklist and get started!

Checklist
Checklist

Download the slides to create a presentation!

Slides
Slides

About this audit

Why is a technical site audit important?

If you implement technical SEO incorrectly, you may completely miss out on organic traffic, regardless of how much optimization you’ve performed on other aspects of your SEO strategy.

Are there any tools required for this audit?

Yes, this audit leverages the following tools:

  • Google Search Console
  • Screaming Frog
  • Chrome browser
  • Certain chrome extensions mentioned below
  • Excel or Google Sheets

How often should you conduct this audit?

It depends on the website but here are some rules of thumb:

  • Before and after any major website update.
  • At least once a year. Quarterly is best.

Audit Checks

Is Google Search Console Configured?

Overview:

Google Search Console is a free online dashboard showing you how your site is doing in Google search. It allows you to track performance through metrics like impressions and clicks, identify issues like a page not showing in search results, and take manual actions like requesting Google crawl your XML sitemap.

Importance:

  • Track your performance on Google
  • Tools to troubleshoot why a page on your site may not be performing well
  • Tools to help you inform Google when something on your site has changed

Checks to make:

See instructions below for how to conduct each check.

  1. Is Google search console configured?

Instructions for the checks above:

Check 1: To check whether you have Google Search Console enabled, follow the steps below:

Visit this URL. If you are directed to a welcome screen like the one below, click the “Start Now” button.

Google Search Console Login

Check to see if your site exists in the drop down:

Google Search Console Indexing Report

If you do not see your site in the top-left dropdown, it means that either the site has not been configured for Google Search Console OR your specific Google user account does not have access to an existing configuration.

Depending on your situation, you’ll either need to set up the site for Google Search Console using the instructions here, or request permission to access the existing Google Search Console configuration.

Additional resources:

Google Index Coverage

Overview:

Checks to see if your pages are eligible to show in Google search results.

Importance:

  • If your pages are not showing in Google and other search engines, you are likely missing out on traffic to your site.
  • If your pages are not showing in search engines, it may be a symptom of an underlying problem affecting other channels like Paid Search.

Checks to make:

See instructions below for how to conduct each check.

  1. Using Google Search Console, do you see any URLs in the “Not indexed” category?
  2. Are there URLs NOT in the index coverage report?

Instructions for the checks above:

Check 1:

  • Log into Google Search Console
  • Navigate to Indexing > Pages in the left-hand navigation
  • Investigate any potential issues in the “Not Indexed” category using the Google Search Console help center article here. This article will define each issue and tell you how to fix it.
Pages not indexed in Google Search Console

Check 4:

  • If the total URL count (sum of all categories) in the coverage report is less than your site’s total page count, then Google isn’t finding some pages on your site. This could be an issue if there are pages Google isn’t aware of that you want to rank. Pages not showing up in the coverage report could be due to multiple reasons such as pages not linked to from any other page on your site or pages not in the XML sitemap. Other checks in this audit will help you determine the root cause of this. For now, simply note which pages are not showing in the coverage report by following these steps:
    • Download the coverage report
    • Download a list of all pages from your website. If you have a CMS like wordpress, this should be easy using a plugin like this one. However, in certain circumstances, you may need to pull in a developer to download this list.
    • Use a function like countif() to see if urls on the site page download exist in the coverage report download. Here’s a quick guide on using countif() for this task.

Additional Resources:

  • None at this time.

Robots.txt file

Overview:

Robots.txt is a text file instructing search engines how to crawl your website. The instructions you provide to search engines through this file can influence what pages show in search results and how they display in search results. With that said, it’s important to get them right!

Importance:

  • If implemented incorrectly, it can result in improper crawling of your site. Improper crawling can then result in:
    • A page you want shown not appearing in search results.
    • A page you do not want shown appearing in search results.
    • A page not passing ranking power when it should.
  • If implemented correctly, it allows you to choose which URLs you want blocked from search crawling.

Checks to make:

See instructions below for how to conduct each check.

  1. Does the robots.txt file exist at yoursite.com/robots.txt?
  2. Is the entire robots.txt file name lower case, including the “.TXT?”
  3. If the site has multiple subdomains like, blog.yoursite.com and us.yoursite.com, does each have its own robots.txt file?
  4. Does it reference the XML sitemap?
  5. Do all comments start with a pound symbol “#?”
  6. Does GSC show any resources being blocked that should not be?

Instructions for the checks above:

Checks 1-5: Navigate to yoursite.com/robots.txt

Check 6: To find resources blocked by robots.txt in GSC, navigate to Coverage > Excluded > Blocked by robots.txt

Meta Robots tag

Overview:

A meta robots tag tells search engines 1) Whether to index a page and 2) Whether to follow the links on a page. More information about the meta robots tag can be found in the Moz article here.

Code sample:

Importance:

  • If implemented the wrong way, it can hide URLs from users in search results and prevent crawlers from finding the rest of your site and passing ranking power. This is bad.
  • If implemented correctly, it allows you to choose which URLs you want to show in search results as well as whether you want search engines to pass ranking power to the pages linked to from the page with the meta robots tag.

Checks to make:

See instructions below for how to conduct each check.

  1. Does each URL that should be included in search results have one of the following: 1) An absence of “noindex” (Google defaults to indexing in this case) or 2) “index” is listed.
  2. Does each URL that should not be included in search results have a “noindex” value?
  3. Are there any URLs with a “nofollow” value? Note that these internal URLs may have a “nofollow” for a reason but should be investigated.

Instructions for the checks above:

All checks:

  • Open screaming frog and crawl your site.
  • Select the internal tab > filter for HTML > scroll right to find the “Meta Robots” column.
  • For each URL, look in the Meta Robots column for the following:
    • For URLs you DO want indexed, ensure the URL has one of the following: 1) An absence of “noindex” (Google defaults to indexing in this case) or 2) “index” is listed.
    • For URLs you DO NOT want indexed, ensure “noindex” is listed.
    • For URLs with a “nofollow” listed, question if there is a good reason for not following the links on that page.

Additional Resources:

X-robots-tag

Overview:

An X-robots tag is another way to tell search engines 1) Whether to index a page and 2) Whether to follow the links on a page. More information about x-robot-tags can be found in the Moz article here.

Code Sample:

Importance:

  • If implemented the wrong way, it can hide URLs from users in search results and prevent search engines from finding the rest of your site and passing ranking power. This is bad.
  • If implemented correctly, it allows you to choose which URLs you want users to find in search results as well as whether you want search engines to pass link equity to the pages linked to from the page with the x-robots-tag.

Checks to make:

See instructions below for how to conduct each check.

  1. Does each URL that should be included in search results have one of the following: 1) An absence of “noindex” (Google defaults to indexing in this case) or 2) “index” is listed.
  2. Does each URL that should not be included in search results have a “noindex” value?
  3. Are there any URLs with a “nofollow” value? These internal URLs may have a “nofollow” for a reason but should be investigated.

Instructions for the checks above:

All checks:

  • Open screaming frog and crawl your site.
  • Select the “Directives” tab.
  • For each URL, look in the X-Robots-Tag column for the following:
    • For URLs you DO want indexed, ensure there is either an absence of “noindex” (Google defaults to indexing in this case) or “index” is listed.
    • For URLs you DO NOT want indexed, ensure “noindex” is listed.
    • For URLs with “nofollow” listed, question if there is a good reason for not following the links on that page.

Additional Resources

Error Responses

Overview:

First, a reminder that some errors like 404s are not always bad. For instance, if someone tries to visit a page that has never existed on your website, by default you want to return a 404 so that 1) the user can be pointed in the right direction and 2) Google knows not to index this page.

However, these errors are bad in the following situations:

  • You are linking to pages that return errors (like a 404) within your website.
  • You have a page that does exist but is returning an error when users and search engines try to access it.

Importance:

  • Errors can result in a poor user experience.
  • Search engines may not rank you as high if you have numerous errors.

Checks to make:

See instructions below for how to conduct each check.

  1. Are there any 4XX errors?
  2. Are there any 5XX errors?
  3. Are there any no response errors?

Instructions for the checks above:

All checks:

  • Open screaming frog to crawl the domain you are checking for errors.
  • Navigate to the Response codes tab (boxed in red) and then use the overview panel on the right to look for Client Errors (4XX), Server Errors (5XX) and No Response (boxed in red).

Additional Resources

  • No additional resources at this time.

Redirects

Overview:

Redirects inform users and search engines a resource has moved from one URL to another URL. If you or a search engine requests content at a URL that has been moved, the server hosting the content (e.g. web page) responds saying the information is no longer available at the URL requested and to instead request the content at a new location. For the purpose of this audit, redirects have been divided into two categories:

  • Page-to-page: These are redirects specific to one page. Here are some examples:
    • https://www.yoursite.com/old-page 301 redirects to https://www.yoursite.com/new-page
    • https://www.youroldsite.com/page 301 redirects to https://www.yournewsite.com/page
  • Global redirect: These are redirects that apply to all pages, which is where “global” comes from. Here are some examples:
    • Whenever someone enters a URL using HTTP (non-secure), redirect them to the URL using HTTPS (secure).
    • Whenever someone enters a URL without WWW, redirect them to the URL with the WWW.

Code Sample:

Importance:

  • Ensure users are redirected to the new page instead of receiving a 404 error message.
  • Ensure search engines know which pages have been removed and replaced so they can reflect this in search results.
  • Pass ranking power from the old URL to the new URL.
  • Ensure users have a better experience by reducing page load time caused by unnecessary redirects.

Checks

  1. Do all page-to-page redirects work properly including 1) The redirect type is implemented using HTTP versus a meta refresh tag or JavaScript. 2) Old URL redirects to the correct new URL 3) There is only one redirect 4) The HTTP redirect type is correct (e.g. 301 versus 302 if resource is moved permanently. 5) The final status code is 200 OK.
  2. Do all global redirects work properly including: 1) HTTP to HTTPS 2) WWW to non-WWW or vice versa 3) Upper to lower case URL 4) Trailing slash to non-trailing slash 5) Enforce multiple rules in one redirect versus a redirect chain.

Instructions for the checks above:

Check 1:

  • Use screaming frog to crawl the site and then download the “Redirect and Canonical Chains” report.
  • This should give you a file you can open in excel that looks like this:
  • Ensure the “Chain Type” column is set to “HTTP Redirect” and not “JavaScript” or “Meta Refresh”
  • Ensure the old URL (“address” column) redirects to the correct new URL (“Final Address” column)
  • Ensure there is only one redirect
  • The HTTP Status Code is correct (301 for permanent redirects and 302 for temporary redirects).
  • The final status code is 200 OK

Check 2: Use screaming frog to test various URLs on your site to ensure the documented Global Rules above work:

  • Upload a list of URLs you know should be redirected based on your chosen global redirect rules by opening Screaming Frog and changing your mode to “list”
  • Upload > Enter manually
  • Manually paste in five URLs that should trigger the redirects above:
  • Evaluate whether the Global redirects work on these URLs. For example, the URL https://www.boulevarddigital.com/kansas-city-web-design should have one HTTP 301 redirect to the non-www version of the URL. Instead, screaming frog shows a 404. This needs to be fixed.

Duplicate Content:

Overview:

Duplicate content occurs when you have very similar content that can be accessed on multiple URLs. A good example would be an eCommerce site that uses query strings appended to URLs to change the color of the product a user is viewing. In this case, https://ecommerce.com/product-one?color=green would have very similar content to that on https://ecommerce.com/product-one?color=red. The only difference would be the product image displayed.

Importance:

Can impact search engine rankings in the following ways:

  • Search engines don’t know which version of the page to show and take their best guess. Usually, search engines get it right. However, why take the chance?
  • Ranking signals like links are split between the two URLs instead of flowing towards the chosen “master” copy of the content. In our example above, some sites may link to https://ecommerce.com/product-one?color=green while others link to https://ecommerce.com/product-one?color=red. If there are no directives like a canonical tag instructing search engines which URL is the “master” copy, ranking power won’t be consolidated to the master version of the URL and thus the URL may not rank as high as it otherwise could with the correct directives.

Checks to make:

See instructions below for how to conduct each check.

  1. Does Google Search Console identify any duplicate content issues?
  2. Does Screaming Frog show any duplicate content issues?

Instructions for checks above:

  • Check 1: See if Google Search Console identifies duplicate content. Open Google Search Console and then use the Index Coverage Status report to look for instances of duplicate URLs. Instructions for this process can be found here.
  • Check 2: Use the Screaming Frog duplicate content check described here.
  • Next steps: Once you identify the duplicate content, you’ll need to determine what to do. Duplicate content can be resolved in a wide variety of ways. A great breakdown of how to handle duplicate content can be found here.

Canonical Tags

Overview:

A canonical tag tells Google which URL has the master copy of a page. It is used to help determine which URL shows in search results when multiple URLs have identical, or very similar content.

Code Sample:

Importance:

  • Ensures the “master copy” of a page appears in search results instead of one of its duplicates.
  • In cases where there are multiple pages with identical, or very similar content, these tags help:
    • Ensure the “master copy” of the URL is crawled and indexed
    • Determine which URL shows in search results
    • Help funnel ranking power to the URL with the “master copy” of the content

Checks to make:

See instructions below for how to conduct each check.

  1. For duplicate content that must have its own URL, is there a canonical tag pointing to an indexable URL?
  2. Does every page that is not a duplicate have a self-referential canonical?
  3. Does every page have only one canonical tag?
  4. Are there any canonicals pointing to non-indexable URLs?
  5. Do all canonical link tags use absolute versus relative paths?

Instructions for the checks above:

  • Check 1: Using the internal tab of Screaming Frog described here, check every duplicate URL for the existence of a canonical tag that points to a “master” copy of that URL.
  • Check 2: Use the Screaming Frog canonical tab described here to identify pages missing self-referential canonicals. A self-referential canonical means a URL has a canonical.
  • Check 3: Use the Screaming Frog canonical tab described here to identify any pages with multiple canonicals.
  • Check 4: Use the Screaming Frog canonical tab described here to identify any pages with non-indexable canonicals.
  • Check 5: Use the Screaming Frog canonical tab described here to identify any pages with relative canonicals.

Site Security

Overview:

Methods of securing the connection between websites and users, like HTTPS, help protect user data like passwords from being intercepted and abused.

Importance:

  • These security measures provide a better user experience by keeping data like passwords and payment information safe.
  • Many of these security measures like HTTPS are also ranking factors.

Checks to make:

See instructions below for how to conduct each check.

  1. Does Screaming Frog show any non-HTTPS URLs?
  2. Does Screaming Frog show any mixed content URLs?
  3. Does the site use Strict Transport Security (HSTS)?
  4. Is the SSL certificate expiring within a month?

Instructions for checks above:

  • Checks 1-2: Use the “Security” tab of Screaming Frog described here.
  • Check 3: One can check whether a site is leveraging HSTS by following the steps here.
  • Check 4: One of the easiest ways to check this is to click the lock icon next to the URL in Chrome and navigate to the SSL certificate details.

Mobile Best Practices

Overview:

These are checks to ensure your site is mobile friendly (e.g. legible text and clickable buttons) and checks to ensure Google crawls and indexes all valuable content on the mobile version of your website (whether responsive or on a separate domain).

Importance:

  1. If the mobile version of your site has content that differs from the desktop version of your site, this can impact your rankings.
  2. If your site has mobile usability errors like content being wider than the screen (causes left-to-right scrolling), text that is too small to read, or clickable elements that are too close together, Google may rank you lower for searches made on a mobile device (source).

Checks to make:

See instructions below for how to conduct each check.

  1. Are there URLs with content differences between desktop and mobile? If yes, fail and document.
  2. Does the site avoid incompatible plugins on mobile?
  3. Does the site have appropriately-sized text on a mobile device?
  4. Does the site avoid content wider than the screen on a mobile device?
  5. Does the site have appropriate sizing between clickable elements on mobile devices?
  6. Does the site specify a viewport using the meta viewport tag?
  7. Does the site have the viewport set to “device-width?”
  8. Is your site serving mobile and desktop content on different domains? If no, pass. If yes, are you following the best practices for this approach? If yes, pass. If no, document what needs to be fixed.

Instructions for checks above:

  • Check 1: Conduct the Screaming Frog mobile parity audit described here.
  • Checks 2-7: Use the Google Search Console mobile usability report described here. In this help center article you can find descriptions of the errors and how to fix them.
  • Check 4: Is your mobile site on a different subdomain than your desktop site? For example, do you serve content to desktop users on https://www.example.com/example-page and content to mobile users on https://m.example.com/example-page? If so, are you following the best practices here? If not, document what needs to be fixed.

XML Sitemap

Overview:

XML sitemaps can include information about the pages, videos, and images on your website. XML sitemaps help search engine crawlers find and understand all the content on your website. Here are some important notes about sitemaps:

  • Websites can have a single sitemap for one piece of content (e.g. pages) or multiple sitemaps for multiple types of content (e.g. videos and images).
  • Websites with multiple sitemaps will have a sitemap index file that points search engine crawlers to all the sitemaps on the site. It will look something like this: https://www.yourdomain.com/sitemap_index.xml. In this file will be links to all the sitemaps.

Code sample:

Importance:

  • A correct XML sitemap helps ensure search engines like Google can crawl and index all pages on your site.
  • A correct XML sitemap informs search engines like Google about various aspects of each page such as the last time it was updated.
  • An incorrect XML sitemap may result in search engines like Google not consuming your sitemap or misunderstanding what they do consume. This could result in pages not being crawled, indexed, and ranked properly.

Checks to make:

See instructions below for how to conduct each check.

  1. Does each subdomain on the website have an XML sitemap?
  2. Are the XML sitemap(s) available at the correct location?
  3. Are the XML sitemap(s) referenced in the robots.txt file?
  4. Does Google know about the XML sitemap(s)?
  5. Does Google Search Console show any errors with your XML sitemap(s)?
  6. Do the XML sitemap(s) contain any non-indexable URLs?
  7. Does the website have any URLs not in the XML Sitemap(s)?
  8. Does each sitemap contain less than 50,000 links and/or is under 50MB?
  9. Are all XML sitemap URLs fully qualified (e.g. https://www.example.com/page-1 vs /page-1)?

Instructions for the checks above:

Check 1:

  • First, check the GSC sitemaps report using the instructions here to see if a sitemap is listed. If you cannot find it there, check the following places:
  • Look at the robots.txt file for a reference to the sitemap(s). For example, enter the URL www.yourdomain.com/robots.txt
  • If the robots.txt file has no mention of sitemap(s), enter the URL where the sitemap should be found. For example, www.yourdomain.com/sitemap_index.xml (multiple sitemaps) or www.yourdomain.com/sitemap.xml (single sitemap). Note that while these are standard naming conventions, different naming conventions can be used like www.yourdomain.com/sitemap-1.xml
  • Finally, try the following search to look for only XML files on yourdomain.com:
  • If none of these checks reveal a sitemap, there is a pretty good chance the sitemaps either do not exist or are not optimized.

Check 2: Check to see if the XML sitemap(s) are accessible at the highest level in the subdirectory (e.g. www.yourdomain.com/sitemap.xml).

Check 3: Check to see if the XML sitemap(s) are referenced in the robots.txt file found at www.yourdomain.com/robots.txt.

Check 4-5: Navigate to the sitemap section of Google Search Console and ensure the most recent versions of the sitemap(s) have been submitted and have a status of “success.” If not, use the the instructions here to diagnose the errors.

Check 6-8: Perform a Screaming Frog XML Sitemap Audit using the instructions here.

Check 9: Review the XML sitemap looking for any relative URLs (e.g. /products versus https://subdomain.domain.com/products). A definition of relative versus absolute URLs can be found here.

Additional resources:

Title Tag

Overview:

A title tag is a piece of HTML code describing the contents of a web page. It is used in three main places: 1) Search results 2) In browser tabs 3) On social sites if OG tags are not provided.

Code Sample:

Importance:

  • Organic search visibility
    • Directly impacts rankings by helping search engines better understand the content on your page.
    • Indirectly impacts rankings by influencing the CTR of your search results.
  • Organic search traffic
    • Directly impacts traffic by influencing the CTR of your search results.
  • User experience
    • Helps ensure users have a consistent experience between clicking on your search results and landing on your page.
    • Helps users understand where they are on your site by looking at the title in browser tabs.

Checks to make:

See instructions below for how to conduct each check.

  1. Are there any missing title tags?
  2. Are there any duplicate title tags?
  3. Are there any title tags over 60 characters?
  4. Are there any title tags under 30 characters?
  5. Are there any spelling errors?
  6. Are there any title tags with extra spaces?
  7. Are there any title tags that are not readable?
  8. Are there any title tags that do not make sense given the page’s content?

Instructions for checks above:

  • Checks 1-4: Use the “Page Titles” tab of Screaming Frog described here.
  • Check 5: Navigate to the “Content” tab described here. If the spelling and grammar error sections are blank, you’ll need to configure them and then recrawl the site using the instructions here.
  • Check 6: While this should be caught in the grammar checks, it doesn’t hurt to download the crawl and ctrl+f for double spaces.
  • Checks 7-8: To see if the page title is readable and makes sense, look to see if the title is meant for humans or stuffed with keywords for bots.
    • For example, Green shoes sale – Cheap Green shoes | Shoes.com is hard to read and stuffed with keywords. This would be a candidate for optimization.
    • For large sites, you’ll want to prioritize evaluating titles as this is difficult to do at scale.

Meta Description:

Overview:

A meta description tag is a piece of HTML code describing the contents of a web page. It allows you to provide a little more detail in addition to what you’ve specified in the title tag.

Code Sample: