You don’t need a “full technical audit” to find what’s holding a small site back. You need a repeatable checklist and a short priority list. This is the 90-minute version (copy/paste it into a doc and tick it off).
Tools (free)
- Google Search Console (GSC)
- PageSpeed Insights (PSI)
- A spreadsheet (Issue → Impact → Effort)
The 90-minute DIY audit workflow
0–10 minutes: Define scope (don’t audit “the whole site”)
Pick 5-10 representative URLs:
- Home
- 2-3 core service/product pages
- 1 location page (if relevant)
- 1-2 blog posts
- Contact
Micro-example: a local dentist site with 12 service pages should include “Emergency dentist” and “Invisalign,” not just “About.”
Decision rule: If a key page isn’t reachable from the main nav (or via obvious internal links), it’s already a problem.
10–25 minutes: Indexing sanity check (GSC)
In GSC, do three checks:
- Pages report (Indexing)
Scan for “Not indexed” reasons that touch important URLs (duplicates, blocked, “crawled – currently not indexed,” etc.). - Sitemaps
Confirm you have a sitemap submitted and it’s being processed. - URL Inspection (2-3 priority pages)
Check:
- Is the page indexed?
- Is the selected canonical what you expect?
- If you just fixed something, request re-indexing.
Fix-first rules:
- Money page not indexed = High impact.
- Wrong canonical pointing elsewhere = High impact.
- Robots.txt blocking important folders = High impact.
In audits, we often see the sitemap present but internal links so weak that Google mostly “discovers” pages slowly and inconsistently.
25–40 minutes: Performance + Core Web Vitals snapshot (PSI + GSC)
Run PSI on three URLs: home + one service + one blog post.
Look at field data if it’s available, and whether Core Web Vitals pass (LCP / INP / CLS).
Then check GSC’s Core Web Vitals report to see if issues affect many URLs.
Decision rules (practical):
- CLS failing: usually layout shifts (missing image dimensions, late banners, sticky elements).
- LCP slow on mobile: often a huge hero image, slider, or heavy script.
- PSI says “unused JavaScript”: usually theme/plugins. Treat as a bigger project, not a same-day tweak.
Micro-example: a small ecommerce site can have fast product pages but a slow home page because of a carousel + chat widget + heatmap script stacked together. Remove one thing and retest.
40–60 minutes: On-page check on priority pages (templates, not every URL)
For each priority page, confirm:
- Title tag matches intent (service + location is fine for local).
- One clear H1 that mirrors the title’s promise.
- Above-the-fold clarity: what you do, where, and for whom.
- Content answers buyer questions (pricing approach, process, timelines, FAQs).
- Internal links to related services and supporting resources.
Google’s own guidance emphasizes people-first, helpful content; use it as a self-check, not a script.
Fast “does this page deserve to rank?” test: if a customer asked one question and your page doesn’t answer it, add the answer or the page stays weak.
60–75 minutes: Content gaps + query-to-page mapping (GSC Performance)
In Performance → Search results:
- Use the last 3 months.
- Sort by impressions.
- Find queries where you’re sitting around positions 8–20.
Map each meaningful query cluster to a page:
- If there’s no page, it’s a gap.
- If two pages match the same intent, it’s a consolidation problem.
Rule: one page should own one primary intent. “General services” pages rarely rank for ten different services.
75–85 minutes: Internal linking pass (5-click test)
Do the 5-click test: from the home page, can you reach every priority service page in five clicks or fewer?
Then:
- Add a few contextual links inside body copy (not just footer links).
- Link from relevant blog posts back to the matching service page.
Anchor text should read naturally. If it sounds weird out loud, rewrite it.
85–90 minutes: Build your priority list (High / Medium / Low)
Use Issue → Impact → Effort.
High impact
- Important pages not indexed / wrong canonicals / accidental noindex
- Robots or sitemap issues blocking discovery
- Duplicate/thin service pages competing with each other
- Site-wide CWV failures tied to theme/plugins
Medium
- Weak internal linking to money pages
- Titles/H1s that don’t match intent
- Missing sections that buyers expect (pricing approach, process, FAQs)
Low
- Minor image alt clean-up
- Small copy edits on pages already performing
- Nice-to-have structured data where it won’t change outcomes
Common red flags (quick read)
- “Crawled – currently not indexed” on key pages: duplication or unclear intent.
- Lots of indexed low-value pages (tags/search pages): site quality/hygiene issue.
- Service pages that look identical apart from a few swapped keywords: cannibalization risk.
- Blog posts with zero internal links: content that can’t support rankings.
What most people get wrong
- They treat every page as equally important.
- They chase performance scores instead of fixing pages and intent.
- They keep adding new pages instead of merging weak duplicates.
Quick wins vs bigger projects
Quick wins (same week)
- Submit/clean up sitemap + obvious indexing blockers.
- Fix titles/H1s on the top 5-10 pages to match intent.
- Add internal links to the pages that make you money.
- Remove the worst home-page bloat (sliders, extra widgets), then retest PSI.
Bigger projects
- Rebuild service architecture (one real intent per page).
- Theme/plugin cleanup for site-wide CWV improvement.
- Content plan that answers buyer questions and feeds internal links into service pages.
When to hire help
Bring in help if (1) key pages won’t index and you can’t pinpoint why in GSC, (2) CWV issues are theme-level and require development, or (3) you’re stuck deciding what to merge vs keep.
A focused audit from Search Pirates is usually a short project: root causes, a prioritized fix plan, and clear notes your dev (or you) can implement.
Conclusion
Run this checklist, then ship three high-impact fixes. Don’t “audit forever.” Once indexing is clean and your key pages are strong, the next gains tend to come from better content and better internal links – not from finding one more error.



