Technical SEO audit: the 15 checks that matter
A technical audit is only worth something if it says what to fix first. Here are the fifteen checks that decide whether Google can crawl, understand and show your pages, with how to verify and fix each one.
In short
A technical SEO audit first checks that your pages are reachable (robots.txt, HTTP status, noindex, JavaScript rendering), then that they do not compete with each other (canonical, duplicates), that they describe themselves well (title, description, H1, language, viewport, alt, JSON-LD) and that they are linked and fast (internal links, sitemaps, Core Web Vitals). Fix the errors affecting the most pages first, then crawl again to confirm.
On this page
- How to read this audit
- Access and indexing
- 1. robots.txt and crawler access
- 2. HTTP status
- 3. The noindex directive
- 4. JavaScript rendering
- 5. Canonical URL
- 6. Duplicate content
- Page tags and content
- 7. The title tag
- 8. Meta description
- 9. The H1 heading
- 10. Language and hreflang
- 11. The viewport tag
- 12. Image alt text
- Structure, data and performance
- 13. JSON-LD structured data
- 14. Internal links, orphan pages and sitemaps
- 15. Core Web Vitals
- Summary table
- How the health score is computed
- What the crawl does not check page by page
- Checking by hand
- Prioritise, fix, verify
- Frequently asked questions
How to read this audit
Each check below says why it matters, how to verify it and how to fix it, then gives the code the NeoRank Engine shows when it detects it. The crawler identifies itself as NeoRankBot/1.0 (+https://neorank.ai/bot), honours your robots.txt and its Crawl-delay, and reads the served HTML without executing JavaScript. A quick crawl reads 12 pages; details are in the audit documentation.
The fifteen checks form three families, and the order matters: a page crawlers cannot read makes the other thirteen checks pointless for it. So start with access and indexing, move on to tags, then to structure and performance.
Access and indexing
1. robots.txt and crawler access
An overly broad Disallow rule stops whole sections from being crawled. Google reminds us that robots.txt manages crawling, not indexing. Read the file rule by rule and test your key paths. Check the firewall or CDN too: a crawler blocked at network level never reaches robots.txt. This check is read at site level: the Robots directives view reads your robots.txt for eight AI crawlers, with no per-page code (AI crawler access).
2. HTTP status
A page answering 404 or 500 will not be indexed, and Google handles each family of status codes differently. Fix the link, restore the page or redirect to its equivalent. Code: HTTP_ERROR, for any status of 400 or above.
3. The noindex directive
A noindex left behind by a template or a staging environment silently removes pages from the index. Check every flagged page: is it intended? Code: NOINDEX, a notice, because the directive is sometimes deliberate.
4. JavaScript rendering
Google can execute JavaScript, but later and with limits; a crawler that does not execute JavaScript, such as the NeoRank Engine, sees only the served HTML. If the main content appears only after execution, move to server rendering or static generation. Code: CLIENT_RENDERED.
5. Canonical URL
The canonical names the version to index when several URLs show the same content. Every indexable page should declare one, absolute, pointing to itself or to the original. Codes: CANONICAL_MISSING, CANONICAL_INVALID (unreadable) and CANONICAL_CROSS_ORIGIN (pointing to another domain, to confirm).
6. Duplicate content
Two identical pages compete for the same query and split their links. Merge them, differentiate them or declare a canonical. Common sources: URL parameters, http / https or www and non-www variants, printable versions. Code: CONTENT_EXACT_DUPLICATE, which flags content identical to another crawled page.
Page tags and content
7. The title tag
The title is the main source of the title link in results. Make it unique and descriptive, naming the topic before the brand. Codes: TITLE_MISSING, TITLE_LENGTH and TITLE_DUPLICATE. The 15 to 65 character range is NeoRank's threshold, not a Google rule.
8. Meta description
Google may use it for the snippet when it describes the page better than the body text. Write one per page, specific to it. Codes: META_DESCRIPTION_MISSING and META_DESCRIPTION_LENGTH, outside 50 to 170 characters — again a NeoRank threshold.
9. The H1 heading
The H1 announces the topic to the reader and structures the page. One clear H1 per page is enough. Codes: H1_MISSING (warning) and H1_MULTIPLE (notice).
10. Language and hreflang
The lang attribute declares the language; hreflang annotations connect translated versions, each pointing to the others and to itself. Codes: HTML_LANG_MISSING, HREFLANG_INVALID and HREFLANG_DUPLICATE.
11. The viewport tag
Google indexes the mobile version first. Without a viewport tag, the page renders like a shrunken desktop screen. Code: VIEWPORT_MISSING.
12. Image alt text
Alt text serves accessibility and helps Google understand the image. Describe meaningful images; leave the alt empty for decorative ones. Code: IMAGE_ALT_MISSING.
Structure, data and performance
13. JSON-LD structured data
Structured data describes the entity and the content of the page. A block that does not parse is ignored. Code: JSON_LD_INVALID, a syntax check, not a Schema.org conformance check. The full method is in our JSON-LD guide.
14. Internal links, orphan pages and sitemaps
Google discovers pages through crawlable links and sitemaps. The NeoRank Engine follows the sitemaps declared in robots.txt and /sitemap.xml, up to five files. Codes: INTERNAL_LINKS_MISSING (a page with no crawlable internal link) and ORPHAN_PAGE_CANDIDATE (in the sitemap, with no internal link observed pointing to it).
15. Core Web Vitals
Core Web Vitals measure loading, responsiveness and visual stability. NeoRank reads them through PageSpeed Insights: real-user CrUX data when Google has it, otherwise a Lighthouse lab measurement, with the URL and the date. When capture is not enabled, the card shows “Not measured”, never an invented score (Core Web Vitals in NeoRank).
Summary table
| Check | NeoRank codes | Severity |
|---|---|---|
| HTTP status | HTTP_ERROR | Error |
| Noindex | NOINDEX | Notice |
| JavaScript rendering | CLIENT_RENDERED | Warning |
| Canonical | CANONICAL_MISSING, CANONICAL_INVALID, CANONICAL_CROSS_ORIGIN | Warning, error, warning |
| Duplicates | CONTENT_EXACT_DUPLICATE | Warning |
| Title | TITLE_MISSING, TITLE_LENGTH, TITLE_DUPLICATE | Error, warning |
| Meta description | META_DESCRIPTION_MISSING, META_DESCRIPTION_LENGTH | Warning, notice |
| H1 | H1_MISSING, H1_MULTIPLE | Warning, notice |
| Language and hreflang | HTML_LANG_MISSING, HREFLANG_INVALID, HREFLANG_DUPLICATE | Notice, warning |
| Viewport | VIEWPORT_MISSING | Warning |
| Image alt | IMAGE_ALT_MISSING | Warning |
| JSON-LD | JSON_LD_INVALID | Error |
| Internal linking | INTERNAL_LINKS_MISSING, ORPHAN_PAGE_CANDIDATE | Notice |
How the health score is computed
Each page starts at 100 and loses 15 points per error, 8 per warning and 3 per notice, never going below 0. The site's score is the rounded average of its pages: 80 and above is healthy, 50 to 79 needs watching, under 50 is critical (score details).
What the crawl does not check page by page
To be precise: redirect chains, broken internal links, click depth and per-page blocking of an AI crawler are not crawl findings. For redirects and missing pages, Search Console's page indexing report shows the pages Google did not index and the reason it gives; click depth needs a tool that measures it. A tool that claimed to measure everything without doing so would have you fix imaginary problems and ignore real ones.
Checking by hand
- Served HTML: view the page source (not the browser inspector) to see what a crawler without JavaScript receives.
- HTML rendered by Google: Search Console's URL Inspection tool shows the page as Googlebot processed it.
- JSON-LD: Google's Rich Results Test and the Schema.org validator, alongside NeoRank's syntax check.
- Performance: PageSpeed Insights for one specific URL, telling real-user data apart from lab measurements.
Prioritise, fix, verify
- Sort by severity, then by number of pages affected: a template error is fixed once for hundreds of URLs.
- Open the issue's resolution: why, where, before / after and the list of pages.
- Fix and publish.
- Run the crawl again (paid plans): the issue disappears when the new crawl no longer finds it.
Frequently asked questions
- How often should I run a technical SEO audit?
- After every release that touches templates, navigation or rendering, and at least once a month on a site that publishes regularly. A one-off audit goes stale quickly.
- Do I need to fix every notice?
- No. A notice flags something to check, such as a deliberate noindex or several H1s on a long page. Deal with errors first, then with the warnings that affect many pages.
- Why is my site flagged as client-rendered?
- The NeoRank Engine reads the served HTML without executing JavaScript. If the main content is not in it, crawlers that do not execute JavaScript see an empty page; server rendering fixes the problem.
- Are the title and description lengths Google rules?
- No. Google sets no official length. The 15 to 65 and 50 to 170 character ranges are NeoRank thresholds for spotting titles and descriptions that are probably truncated or too thin.
- Does a health score of 100 guarantee good rankings?
- No. The score measures the absence of detected technical defects, not the quality or relevance of the content. It removes obstacles to crawling and understanding; rankings then depend on what your pages actually give their readers.
See where your site stands
Run the free analysis to see what the NeoRank Engine finds on your site.
Start the free analysisSources
- Introduction to robots.txt
- How HTTP status codes, and network and DNS errors affect Google Search
- Block Search indexing with noindex
- Understand JavaScript SEO basics
- How to specify a canonical URL with rel=canonical and other methods
- Influencing your title links in search results
- Control your snippets in search results
- Tell Google about localized versions of your page
- Mobile site and mobile-first indexing best practices
- Google Images SEO best practices
- Introduction to structured data markup in Google Search
- Link best practices for Google
- Learn about sitemaps
- Web Vitals
- About PageSpeed Insights