ABCDEFGHIJKLMNOPQRSTUVWXYZAAAB
1

The ULTIMATE 50-Point Technical SEO Audit Checklist

You may make a copy of this Google Sheet for your own personal use, but please do not distribute it publicly.

© 2020 Pam Ann Marketing, LLC DO NOT DISTRIBUTE.
If you would like us to perform this audit for you, visit the link on the right for details on our technical SEO audit services. SEO Technical Audit Service
2
CategoryItem #Best PracticesAdditional InformationRelevant Plugins or ToolsStatusNotesWho is Responsible for Resolving This?
3
DOMAIN & CMS1The website should be run by a well-supported open-source CMS, preferably WordPress. FAQ: Why We Prefer Open Source for SEO
4
2All content, including and especially the blog, should be hosted on the primary website domain (definitely NOT on a separate domain, and preferably not a subdomain.)
5
3Use of subdomains for any public-facing content should be avoided whenever possible. If unavoidable, minimize use of them as much as possible.
6
7
MOBILE4A responsive design should be applied to the site, so that the site renders in a device-specific manner dependent upon the specific device accessing the site. Separate mobile sites and/or separate mobile subdomains should be avoided. If this cannot be avoided, take extra care to avoid faulty redirects.
8
5All pages should have the meta viewport tag configured as follows:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
Most responsive themes have this in place already, but it's good to double-check it.
9
6Site should pass the Google Mobile-Friendly Test. Ensure that there aren’t any blocked resources that keep the visual preview from loading properly on the test results, and that there are no on-domain resources that say “Googlebot blocked by robots.txt.” Google Mobile-Friendly Test
10
7Test mobile user experience in Search Console. Eliminate or keep errors to a minimum.Search Console
11
8aGoogle indexes AMP pages to provide a fast, reliable web experience. More information can be found in the “AMP on Google Search Guidelines”.

Currently, because of the additional resources required to properly build out AMP pages, we are only requiring that it be implemented on blog posts. Implementing AMP on pages is great if you can do it, but we are only requiring blog posts as the bare minimum at this time.
AMP on Google Search guidelinesOPTION 1: The “AMP” Plugin by AMP Project Contributors.

(see embedded note for more info)
12
13
OPTION 2: The “AMP for WP” plugin by Ahmed Kaludi & Mohammed Kaludi.

(see embedded note for more info)
14
8bCRITICAL: Implementing either of these plugins does NOT automatically carry over your Google Analytics tracking script to AMP pages. AMP-specific Google Analytics code has to be implemented in the plugin’s “Analytics” settings or through Google Tag Manager. Regardless of the implementation method, AMP-specific Google Analytics code needs to be formatted in JSON as follows.

Replace the purple text with your Google Analytics property ID.

{
"vars": {
"account": "
UA-XXXXXXX-X"
},
"triggers": {
"trackPageview": {
"on": "visible",
"request": "pageview"
}
}

}
(If using plugin option 1, enter "googleanalytics" without quotes as the "type")
15
8cCRITICAL: AMP pages must contain a “rel=canonical” tag that points to the main version of the page. Both of the above plugins should take care of that by default, but we recommend testing this to be sure. Also check for AMP errors in Search Console after all AMP pages have been crawled by googlebot. Search Console
16
17
8dEmbedded videos *should* work on AMP pages when using either of the above two plugins, but definitely double-check this after implementation.Pull up an AMP page or post that has an embedded video in it and make sure it works.

Also check for AMP errors in Search Console after all AMP pages have been crawled by googlebot.
Search Console
18
8eIMPORTANT: Ensure that there are no critical AMP errors in Search Console and that your AMP pages validate with the AMP testing tool.
If you get a structured data error on the AMP testing tool for a missing publisher logo:

If using plugin option 1, add an image under “Site Icon” in Appearance -> Customize -> Site Identity

If using plugin option 2, add an image under AMP settings > Structured Data > Upload Default Structured Data Logo
AMP Testing Tool
19
20
CONTENT LAYOUT9Interstitial pop-ups should generally be avoided, especially on mobile. There is a specific penalty for pop-ups that take up more than 25% of the above-the-fold view or that "block the user from completing tasks." Please see Google’s documentation for more information.
Google Webmaster Blog: Helping users easily access content on mobile
21
10All physical office locations should have their own individual pages with unique content as well as:
22
10aAn embedded Google map, pointing to the company’s verified Google My Business listing (pull embed code from that)
23
10bSchema markup on the address, company name, and telephone number (see Schema section below)
Use the Structured Data Testing Tool to ensure that the Schema markup validates
Structured Data Testing Tool
24
11Duplicate content should be avoided, both within the site (e.g. having two different URLs display the same content or having duplicate Title Tags, Meta Descriptions, and /or H1s), and externally (e.g. copying product descriptions from a manufacturer)Screaming Frog
25
12Avoid duplicate content via www redirects i.e canonical URLs (.htaccess or IIS). This means that the domain name without the “www” typed in should redirect to the version with the “www”, or vice versa, but non-www pointing to www is preferred.
Canonical domain check on httpstatus.iohttpstatus.io
26
13On WordPress sites, avoid duplicate content by setting media and attachment URL redirects to “Yes” in Yoast under SEO -> Search Appearance -> Media.Yoast
27
14Do not use “one page” designs.
28
15Implement a breadcrumb trail (included in WordPress SEO by Yoast plugin, but needs to be manually implemented). Mark up breadcrumb with Schema markup.https://schema.org/BreadcrumbListYoast
29
16Each page should have a conversion form (e.g. a contact form or newsletter signup) placed in a highly visible area.
30
31
AUTHORITY17Author Bylines & Bio Page: Google’s “Authoritative User” patent and Quality Rater Guidelines both indicate that you should display author names on content, and make it easy to read a bio about the credibility of that author.

For YMYL content (“Your Money or Your Life,” i.e. medical, financial, and other life-impacting content), this is of utmost importance.
(See additional general guidance about Schema in the “Schema Markup” section of this document before completing this implementation.)
32
17aByline: All article content on the website (whether blog or knowledge center type articles) should show the author name on the byline, in the same way they use it elsewhere on the social web.(i.e. if Joseph Smith usually goes by “Joe Smith Sr.” on social media, then the byline on their articles should be written that way).
33
17bByline Link & Bio Page: The author name on the byline should click through to a bio about them, with the following properties and Schema markup. On WordPress, by default, the author name on the byline clicks through to the author archive (list of posts by that author.) To satisfy this requirement, either a bio can be added to the top of the author archive, or the byline can be modified to click through to a standard bio page instead
34
17cThe bio page for each author needs to have the following required information

1) First & Last Name
2) Headshot
3) Job Title
4) Description (mentioning as many credibility-boosting facts as possible, i.e. awards, certifications, licenses, college degrees, etc.)
5) Social Media Profile Links (At Least LinkedIn)
35
17d The bio page for each author should be marked up as per the Schema Implementation Guidance documentSchema Implementation Guidance document
36
37
SOCIAL18aMake it VERY easy for visitors to find and follow your presence on social media sites (Facebook, Twitter, LinkedIn, YouTube, etc.) Place links in site footer or sidebar for each profile so that they’re accessible from all website pagesThere is a correlation between content that is shared a lot on social media and content that ranks high on search engines. Share your own content, and encourage others to share it as well, as much as possible.
38
18bMake it VERY easy for visitors to share your content on social media. Social share buttons for all major networks (Facebook, Twitter, LinkedIn) should be on every page.
39
18cMake it perfectly clear which buttons are for following vs. which ones are for sharing.
40
41
SPEED19Site speed optimizations should be in place for desktop and mobile. These optimizations are crucial, as page speed is a ranking factor (now on BOTH desktop and mobile) and dramatically affects bounce and conversion rates -->

WPRocket is our favorite solution for speed optimizations, as it is the most comprehensive. However, a mix of other plugins can be used so long as all of the different aspects of page speed optimization are addressed (i.e. Page Caching, Browser Caching, Cache Preloading, Sitemap Preloading, GZIP Compression, Minification / Concatenation, Database Optimization, Google Fonts Optimization, Remove Query Strings from Static Resources, Lazyload, Defer JS Loading, CloudFlare Compatibility, DNS Prefetching, etc.)
WPRocket
42
19aPage load time is to be kept as low as possible and should be monitored in Google Analytics. Average page load time for both Mobile and Desktop users should not greatly exceed 3 seconds.Behavior -> Site Speed -> Overview. Add segments for "Mobile Traffic" and "Tablet and Desktop Traffic" (or if using a Pam Ann Google account, use "Mobile - United States" and "Desktop - United States")Google Analytics
43
19bGoogle PageSpeed Insights scores should be at or above 90 for desktop and at or above 65 for mobile.PageSpeed Insights
44
19cGTMetrix PageSpeed and Yslow grades for Chrome/Desktop/United States should be no lower than B (ideally A).
(Sign up for a free account in order to be able to change the settings to Chrome/Desktop/United States.)
GTMetrix
45
19dGTMetrix “Onload” and “Fully Loaded Time” for Chrome/Desktop/United States should be around 3 seconds or less.
46
19eServer response time (TTFB) must be less than 200ms on desktop and less than 600ms on mobile.

Use GTMetrix to measure desktop TTFB, and PageSpeed Insights to measure mobile.
Hosting company and hosting package can make a difference in server response time. Shared hosting providers are notorious for overloading their servers with too many clients hosted on a single web server. If you must use one of those hosts, consider upgrading to a VPS or dedicated server hosting package.

However, there are other factors involved in server response time as well - beyond the performance of the physical server. Please read Google’s documentation on this here: https://developers.google.com/speed/docs/insights/Server
47
48
HTTP STATUS CODES20Broken links should be avoided whenever possible. Use 301 redirects (per our guidelines) to correct broken links and preserve existing search engine rankings.

In the case of a website redesign, if URLs change, be sure to redirect ALL old URLs to their new equivalent URLs. To identify which URLs Google has indexed currently, refer to the “Valid” section of the “Index Coverage” report in Search Console.
If a plugin will be used for this, be sure to select one that does not bloat the database with logs of redirect executions. The popular plugin called “Redirection” by John Godley does create log entries by default, but there is an option to turn this off in the settings (highly recommended.)Search Console
49
21302 and 307 Redirects should generally be avoided. They are intended to be temporary and do not pass link equity.Screaming Frog
50
22Implement a monitoring solution to get notified when 404 errors occur. Search Console email notifications can be used for this. Ensure that all people involved in maintaining the website have their email addresses listed as users in Search Console.Search Console
51
23Custom 404 error pages with “human-friendly” language and links in the body of the page (either a high-level sitemap, or a handful of the most frequently visited pages.)
52
53
SCRIPTING24Graceful degradation – when JavaScript is disabled, key content is still visible to Googlebot.
54
25Allow all site resources, such as CSS and JavaScript files, to be crawled. The Google indexing system renders webpages using the HTML of a page as well as its assets such as images, CSS, fonts, and JavaScript files. To see the page assets that Googlebot cannot crawl and to debug directives in your robots.txt file, use the URL Inspection Tool in Search Console to run a "Live Test". Click on "View Tested Page" then "More Info" then "Page resources." If there is anything there from the site's own domain that is labled "Googlebot blocked by robots.txt", then edit the robots.txt file to unblock those resources.Search Console
55
26Do not use Flash.Screaming Frog
56
57
INDEXATION27iFramed text content should be avoided whenever possible.
58
28aDynamic XML sitemap (taken care of by WordPress SEO by Yoast plugin). Yoast
59
28bEnsure that the XML sitemap has been submitted to Search Console and does not contain any errors.Search Console
60
28cEnsure that the XML sitemap does not contain "thank you" / form confirmation pages or any other content that shouldn't be public
61
29aHTML sitemap page that is dynamically generated/updated. WP Sitemap Page by Tony Archambeau generates a shortcode that can be used for this purposeWP Sitemap Page By Tony Archambeau
62
29bLink to the HTML sitemap page from the footer of the website.
63
29cEnsure that the HTML sitemap does not contain "thank you" / form confirmation pages or any other content that shouldn't be public
64
30Robots.txt file that includes the following:

User-agent: *

Allow: /

Sitemap: https://yourdomain.com/your_xml_sitemap_location.xml


ENSURE that the following directive, which blocks the whole site from search engines, is NOT present upon launch of a live/production site.

Disallow: /
Cross Check's Search Engine Visibility Monitoring plugin can generate email alerts if the robots.txt file is blocking search engines via the Disallow / directive.Cross Check's Search Engine Visibility & Robots.txt Monitoring & Email Alerts Plugin for WordPress
65
31The meta robots “noindex” tag should only be used on content that should never show up in search engines, such as contact form confirmation pages (it is a best practice to use the noindex tag on those).

For WordPress sites, please ensure that the Search Engine Visibility box (in WordPress "Reading" settings), is UNCHECKED on all live production sites.

****PLEASE TAKE CARE TO ENSURE THAT THE SEARCH ENGINE VISIBILITY BOX IS UNCHECKED THE MOMENT A SITE IS LAUNCHED FROM DEVELOPMENT INTO PRODUCTION.****
Cross Check's Search Engine Visibility Monitoring plugin can generate email alerts if the Search Engine Visibility checkbox is checkedCross Check's Search Engine Visibility & Robots.txt Monitoring & Email Alerts Plugin for WordPress
66
32Automatic insertion of the canonical tag (taken care of by WordPress SEO by Yoast plugin), unless it is an e-commerce site with products that have multiple variants, such as color or size. In that case, a manual assessment of the best way to canonicalize that particular site should be performed.Yoast
67
33Use text links in navigation as opposed to images
68
34A WYSIWYG (what you see is what you get) editor in the CMS to facilitate internal linking via easy link creation*If using WordPress, this is automatically satisfied
69
35RSS feeds should be present for blog content and any custom post typesIf using WordPress, this is automatically satisfied
70
36aBlog articles should have dates on the byline.
71
36bIf possible, in addition to the original post date, also include a “last updated” field to pull in the date the post was last modified. The plugin WP Last Modified Info by Sayan Datta may be able to help with this.WP Last Modified Info by Sayan Datta
72
36cIf there is a “Resource/Knowledge Center” or information library of some sort with more “evergreen” (timeless) content, those articles should have an author name on the byline, but not a date.
73
37aSecurity hardening tactics: Follow best practices for implementation of website security measures such as not using “admin” as a user login name, implementation of a firewall, automatic malware monitoring, etc.
Google does not want to index sites that have malware on them, and instances of site hacks are at an all time high (even for small business websites), so it is very important to have security best practices in place.
74
37bRegularly scheduled CMS updates: CMS systems like WordPress need to be updated regularly (preferably weekly) so that both the core application and any plugins or add-ons consistently have the latest security fixes applied. Since updates can occasionally conflict, be sure to make a backup prior to implementing each set of updates.
75
76
SCHEMA38Schema.org markup plays a very important role in helping Google understand content via machine knowledge.

IMPORTANT: Ensure that all contents shown in Schema markup match content visible to users on the page. Google specifically prohibits “misleading” Schema markup that is “not representative” of the content on the page, or that refers to content that is hidden from users.

Utilize Schema.org markup as follows:
SCHEMA IMPLEMENTATION GUIDANCE
77
38aCompany names, addresses, and phone numbers should be marked up with schema code per http://schema.org/Organization for national businesses, OR http://schema.org/LocalBusinessIf the company desires to get found by users (or only serves customers) in a certain geographical region, use LocalBusiness. Otherwise, use Organization.
If using LocalBusiness, check under “More specific types” at the bottom of https://schema.org/LocalBusiness to see if there’s a specific subtype that matches the organization. If so, use that instead of LocalBusiness.

See the Schema Implementation Guidance document for required fields.
78
38bVideo schema should be utilized on all video content. See http://schema.org/VideoObject Required properties: name, description, thumbnailUrl, uploadDate

WP YouTube Lyte by Frank Goossens is a plugin that will automatically generate Schema for embedded YouTube videos (but it requires an API key for pulling that data directly from the YouTube channel)
WP YouTube Lyte by Frank Goossens
79
38cArticle markup should be added to article content (blog articles, knowledge/resource center articles, etc.) This markup should be present both on AMP and non-AMP content. See https://schema.org/Article
Article markup should be dynamically generated for each article. Use of a plugin is typically the easiest way to implement Article markup (the two AMP plugins mentioned herein will generate this markup for AMP content, but not for non-AMP content.)

See the Schema Implementation Guidance document for required fields and plugin recommendations.
80
38dImplement Person markup on the author bio page (see “Authority” section of this doc). See https://schema.org/Person

See the Schema Implementation Guidance document for required fields
See the Schema Implementation Guidance document for required fields
81
38eProduct schema is crucial for e-commerce sites. Implement as many properties from http://schema.org/Product as possible (but do not add “Product” schema to product category pages. Only add it to individual product pages.)

Also include Offer, Review, and AggregateRating properties for each product.
82
38fImplement as many other types of Schema markup as is applicable and feasible
83
39CRITICAL: Ensure that all Schema markup validates with the Structured Data Testing Tool
Structured Data Testing Tool
84
85
URLs40Ensure that the site has a valid SSL certificate.In order to satisfy Google’s requirements, SSL certificates must come from a third-party certificate authority (meaning they cannot be self-signed).
86
41301 redirects should be implemented for all HTTP URLs, including image URLs. Internal links should also be adjusted to reflect HTTPS URLs. Care should be taken to avoid redirect chains. Redirects should NOT look like this: http://sitename.com → http://www.sitename.com → https://www.sitename.com
87
42Use of search engine friendly URLs (i.e. no parameters, underscores, file extensions).Screaming Frog
88
89
TITLE, META, and HEADER TAGS43Title tags should contain carefully-chosen often-searched keywords, yet read naturally (shouldn’t sound “stuffed.”) If we have performed keyword mapping for this site, refer to the Flowsheet for what keywords to include in title tags on keyword-mapped pages.Screaming Frog
90
44No ancillary information such as site title or company name should be appended to the page title in the title tag.Remove "Site Title" in Yoast Search Appearance settings.Screaming Frog
91
45aEach page should have exactly ONE H1 tag, as that tells the search engine what the most important heading on the page is. Add a single H1 tag to pages that are missing H1 tags completely, and resolve duplicates on pages that have more than one H1 tag.If we have performed keyword mapping for this site, refer to the Flowsheet for what keywords to include in the H1 tag for each keyword-mapped page.Screaming Frog
92
45bThe homepage (as with all other pages) should have a visible and editable H1 tag that contains 2 to 3 researched phrases, as high as possible on the page. That should be followed by at least one paragraph (but ideally more) of body copy.
If we have performed keyword mapping for this site, refer to the Flowsheet for what keywords to include in the homepage H1 tag.Screaming Frog
93
45cOn the blog index page (the page that shows the whole list of articles), and the index pages for any custom post types, the article titles should be enclosed in H2 tags, and there should be one main title for that page enclosed in an H1.

That H1 tag should be easily editable through a widget or other manner that doesn't require hard coding.
94
45dThe blog index page should show excerpts of articles, not full text.
95
45eCategory pages should also have an editable H1 and (ideally) paragraph copy.
96
46Meta descriptions should be present for key pages, and can be configured via the Yoast plugin settings on each page.

The meta description is displayed on Google search results and is extremely important in influencing the searcher’s decision to click on your page.
Make sure to write a short, yet compelling description that will entice searchers to visit your website. This should be a one-sentence summary of the content, 150 to 170 characters, that contains the page’s primary key phrase.

If we have performed keyword mapping for this site, refer to the Flowsheet for what keywords to include in the meta descriptions on keyword-mapped pages.
Yoast
97
47Images should contain optimized alt text.
Image alt tags should be added to each image on the site, with a short and accurate description of what is represented in the image.

One of the main images for the page/article should also use the primary key phrase(s) assigned to that page (if it is possible to incorporate it in an accurate description of the image.)
Screaming Frog
98
99
TRACKING48Google Analytics code should appear on every page.-Check using the Tag Assistant Chrome Extension in an Incognito window (To enable Tag Assistant in incognito, go to the 3 dot Chrome Menu -> More Tools -> Extensions -> -Click on "Details" by Tag Assistant -> Toggle "Allow in Incognito" to "on.")
-Then open the website in incognito, click on Tag Assistant, click Enable, then refresh.
-As long as you see a Google Analytics tag that is either blue or green (not red) then this passes. If red or missing, fail.
Tag Assistant Chrome Extension
100
49A Google Search Console "Domain Property" should be establishedGo into Search Console, click find the website in the upper right, and ensure that a "domain property" exists for it.

https://pamannmarketing.com/resources/how-to-set-up-a-domain-property-in-search-console/
Search Console