The site is fundamentally sound: it is fully HTTPS, has clean service and condition pages, and every location carries LocalBusiness markup. The problems sit in two places: the blog, where an old URL migration left 404s, redirects and orphaned articles, and the 30 suburb-service pages, which share one meta description and are often too thin to rank.
Fixing the five P1 issues takes about two developer days and removes every crawl dead end. The P2 content work is the bigger lift, but it is where the ranking upside sits.
P1 = fix this sprint (crawl and trust problems). P2 = next 4–6 weeks (ranking and click-through). P3 = backlog. Effort: S under half a day, M 1–2 days, L 3+ days.
| Priority | Issue | URLs | Impact | Effort | Owner |
|---|---|---|---|---|---|
| P1 | Broken pages (404) | 9 | High | S | Developer |
| P1 | Internally linked redirects | 13 | High | S | Developer |
| P1 | Redirects via HTTP (extra hop) | 5 | High | S | Developer |
| P1 | Non-indexable URLs in sitemap | 25 | High | S | Developer |
| P1 | Mixed content (HTTP assets) | 4 | High | S | Developer |
| P2 | Thin content (under 250 words) | 15 | High | L | Content |
| P2 | Duplicate meta descriptions | 30 | Medium | M | Content |
| P2 | Missing meta descriptions | 22 | Medium | M | Content |
| P2 | Duplicate titles | 6 | Medium | S | Content |
| P2 | Canonical points to a different URL | 16 | Medium | S | Developer |
| P2 | Orphan pages (no internal links) | 40 | Medium | M | Content |
| P2 | Missing H1 | 7 | Medium | S | Developer |
| P2 | Slow server response (over 1.5 s) | 23 | Medium | M | Developer |
| P3 | Multiple H1s | 5 | Low | S | Developer |
| P3 | Titles over 60 characters | 157 | Low | M | Content |
| P3 | Pages with images missing alt text | 71 | Low | M | Content |
| P3 | Heavy pages (over 3 MB) | 23 | Low | M | Developer |
| P3 | Deep pages (5+ clicks from home) | 54 | Low | M | SEO |
Visitors and search engines hit dead ends; any links pointing at these pages pass no value.
Restore the page or 301 it to the closest live article, then remove it from internal links and the sitemap.
Every internal link to a redirect wastes crawl budget and slows the visitor down.
Update menus, footers and in-content links to point straight at the final URL.
A trip through HTTP adds a second redirect and briefly drops the visitor onto an insecure URL.
Point these redirects straight at the HTTPS destination so each one is a single hop.
The sitemap tells search engines what to index. Listing redirects, 404s and noindex pages erodes trust in it.
Regenerate the XML sitemap so it lists only live, indexable, canonical URLs.
Browsers block or warn about HTTP assets on HTTPS pages, which breaks images and reduces trust.
Swap the HTTP image and script references for HTTPS versions.
Expand the suburb-service pages with local detail (practitioners, parking, FAQs) or consolidate them into the main service page.
Write a unique description per page; for the 30 suburb-service pages use a template with suburb and service fields.
Add a 120–155 character description that includes the page's topic.
Give each article its own title; fix the blog template that falls back to the site name.
Set self-referencing canonicals with the trailing slash the site actually serves.
Link each article from at least one related service or condition page, or retire it.
Fix the template so the page title renders as the single H1.
Enable page caching and compress hero images; re-test with the same crawl settings.
Demote the secondary H1 (usually a banner) to an H2.
Shorten to about 55 characters, keyword first; drop the repeated 'Blog' suffix.
Add short, descriptive alt text; mark purely decorative images as such.
Serve images in WebP/AVIF at display size and lazy-load below the fold.
Add category hubs and related-article links so key content sits within 3–4 clicks.
Crawl: full-site crawl from the home page, following internal links and the XML sitemap. Data was exported to CSV with one row per URL: status, indexability, canonical, title, meta description, H1 count, word count, click depth, inlinks, response time, page weight, image alt text and sitemap membership.
Rules: each issue is a rule over that export (for example, a thin page is an indexable 200 with under 250 words). The rules and thresholds are listed in the accompanying analysis script, so the audit can be re-run after the fixes and compared like for like.
Files: crawl.csv (raw export), issues.json (counts and fixes), issue-urls.csv (every affected URL).
| Page type | URLs |
|---|---|
| blog | 186 |
| location-service | 30 |
| condition | 12 |
| pagination | 12 |
| info | 8 |
| service | 8 |
| location | 6 |
| tag | 6 |
| legacy | 2 |
| home | 1 |