How to Use AI to Audit Category Pages (The SEO Surface Owners Forget)

Category and tag pages eat crawl budget but rarely rank. This AI workflow finds duplicate intros, weak internal links, missing descriptions, and JS-only pagination — then ships fixes.

Category pages are the dead zone of most content sites. Google crawls them on the same schedule as your articles, but they rarely rank, and most owners never look at one again after launch. This guide is a repeatable AI-assisted pass that finds the specific failures — duplicate intros, missing meta descriptions, JavaScript-only pagination, orphan-looking hubs — and produces targeted patches instead of vibes.

TL;DR

  • The problem: category, hub, and tag pages consume crawl budget but get near-zero editorial care, so they read as thin or duplicate to Google.
  • The fix: use a long-context AI model (Gemini 3.1 Pro or Claude Opus 4.7, both 1M-token as of June 2026) as a fast HTML pattern-matcher across 5-20 page dumps, then apply human-quality patches.
  • Acceptance bar per page: 200+ word unique intro, 12-20 contextual internal links, meta description under 155 characters, server-rendered pagination using <a href> links.
  • Hard rule from Google: Googlebot only follows links that are <a> elements with an href. JS-only “Load more” buttons and onclick navigation are invisible to crawling.
  • Process: patch your 3 highest-risk pages, wait 30 days, then read the exact-URL Search Console diff before scaling.

Who this is for

Content-site owners and editors whose /blog/category/... or /topic/... URLs show in Search Console with impressions but near-zero clicks. If your site has more than 20 category or tag pages and you have never audited them, you are the target audience. A single-author blog with 5 categories gets less mileage here than a multi-author site with 50+ tag pages.

Three signals tell you it is time:

  1. Category pages appear in Search Console with CTR below 1% on branded or near-branded queries.
  2. A category page is outranked by its own best child post for the category term — your internal-link graph is upside down.
  3. site: search returns several category pages competing for one query (a cannibalization smell).

Skip this if your CMS auto-generates category pages from a strict template you cannot modify. There is nothing to patch.

Why category pages quietly tank sites

Google treats each paginated page as its own URL and indexes links almost exclusively through anchor tags. Two facts decide whether a category hub helps or hurts you:

  • Crawlability: Google’s link best-practices doc is blunt — “Google can only crawl your link if it’s an <a> HTML element with an href attribute.” A <span onclick=...> paginator, a javascript: URL, or an infinite-scroll feed with no anchor fallback means Googlebot sees page 1 and nothing deeper. Your back-catalog loses the internal-link equity the hub is supposed to pass down.
  • Pagination signals: Google deprecated rel="next"/rel="prev" back in 2019. The current guidance is a self-referencing canonical on every paginated page (do not point page 2..N back at page 1 unless you ship a real “view all” page) plus clean <a href="/category/page/2/"> links. Most CMS themes get this wrong by default.

The audit below is built to surface exactly these two failure modes, plus thin/duplicate intros, before they cost you rankings.

Before you start

  • Export the full list of category URLs from your sitemap or CMS, not from Search Console — SC under-reports low-impression URLs.
  • Have a tool that fetches rendered HTML, not just source. curl is fine for static sites; for JS-heavy sites use a headless browser (Playwright, or chrome --headless --dump-dom).
  • Decide acceptance criteria up front: minimum word count, minimum internal-link count, minimum unique-intro score. Without numbers you will rationalize problems away.
  • Pick a 5-page sample (your biggest category plus 4 random ones) before scaling.

Which AI model to use

You are pasting multiple full HTML dumps at once, so context window is the constraint that matters, not raw reasoning.

Model (June 2026)ContextBest forNotes
Gemini 3.1 Pro1M tokensBulk template + uniqueness scoring across 10-20 dumpsIncluded with Google AI Pro ($19.99/mo)
Claude Opus 4.71M tokensPatch drafting, diff generation, careful HTML reasoningClaude Pro $20/mo, or API at $5/$25 per 1M in/out
ChatGPT (GPT-5.5)~320 pages in-app on Plus ($20/mo); full 1M only on $200 ProQuick single-page checksIn-app context is tight; trim dumps to <main>

For most owners, do the wide template scan with a 1M-token model and the per-page patch writing with whichever assistant you already pay for. The point is not “AI-generated content” — it is using AI as a fast pattern matcher across HTML so you can apply human-quality fixes.

Step by step

  1. Inventory. List every category, hub, and tag URL in a CSV with columns url, h1, intro_first_200_chars, child_link_count, has_meta_desc, pagination_type.
  2. Fetch. For each URL run curl -s URL | tee dumps/$slug.html (static) or chromium --headless --dump-dom URL > dumps/$slug.html (JS). Keep the rendered HTML — every later step reuses it.
  3. Template detection. Paste 5 dumps into your long-context model: “What’s the shared template across these five HTML files? What’s unique per page? Score uniqueness 1-5 for the intro paragraph alone.”
  4. Intro audit. For every page scoring 3 or below, ask for a 220-word replacement intro answering: (a) what this category contains, (b) who should read it, (c) the most-linked piece, (d) what is new this month.
  5. Internal-link audit. Ask: “Count outbound links from <main> to child posts. Group by anchor variety. Is there a Featured slot? A Latest list? A start-here entry point?” Flag anything under 10 outbound links as orphan-risk.
  6. Render check. Ask: “Compare the source HTML to the rendered HTML. Are child URLs present in source, or injected by JavaScript only? Is pagination an <a href> or a JS click handler?” JS-only pagination is the biggest hidden bug.
  7. Risk ranking. Ask: “Of these N pages, which 3 are most at risk of being treated as thin, duplicate, or orphan by Google? Justify with specific lines from the HTML.”
  8. Patch generation. For each of the top 3, get a unified diff or HTML snippet: rewritten intro, internal-link block, meta description (under 155 chars), and a <title> rewrite if needed.
  9. Ship and measure. Apply patches, re-fetch in 30 days, and compare CTR and average position in Search Console Performance filtered by the exact URL (not “contains”).

Change only one variable between your first run and your second — usually the model or the prompt phrasing — so you learn which call is actually doing the work.

The patches, with target numbers

SurfacePass conditionFix when it fails
Intro copy200-300 words, unique per categoryRewrite to answer the implicit “what’s in here and why care?”
Internal links from <main>12-20 contextual linksAdd Featured + Latest + start-here blocks; kill naked “read more” anchors
Meta descriptionUnder 155 chars, category-specificRewrite; it must not be true of any other category
<title>H1 plus a modifier”Notion Templates” loses to “Notion Templates (47 picks, updated 2026)“
Pagination<a href> links, self-canonical per pageReplace JS paginator; add server-rendered numbered links
SchemaBreadcrumbList presentAdd it; CollectionPage optional, ItemList only if kept accurate

Quality check before you ship

  • Does the new intro answer a real reader’s question, or just contain the keyword?
  • Are internal links contextual (“our Notion templates guide”) or naked (“read more”)? Naked anchors waste the slot.
  • Did you read the rendered HTML, not the source view? Many CMSes inject content client-side, and you will miss it.
  • Is the meta description specific to this category, or could it apply to any category on your site?

Run the full audit quarterly on your top 20 categories and spot-check the long tail twice a year. Keep every “before” HTML dump so you can A/B a change later or roll back without git archaeology.

Common mistakes

  • Templated intros where a 200-word block gets the category name plugged in. Google’s near-duplicate detection catches this within a few crawls.
  • No Featured, Latest, or start-here block. Readers bounce, dwell time drops, and the page becomes a dead-end signal.
  • JS-only pagination. Crawlers see page 1 only, and your deep posts lose internal-link equity from the hub.
  • Title tag identical to H1, no modifier. A specific, dated modifier wins on CTR.
  • Auditing source HTML on a JS-heavy site. You miss half the content and write the wrong patches.
  • Patching all 50 pages at once. Patch 3, measure 30 days, then scale — otherwise you cannot attribute the lift.

FAQ

  • How many internal links per category page?: Aim for 12-20 contextual outbound links to children. Below 8 it looks orphan-like; above 30 the page reads as a link farm.
  • Should category pages rank for the category term?: Yes. The category is your topical-authority signal; if a child post outranks the hub, your internal-link graph is inverted.
  • What word count for the intro?: 200-300 words of unique copy is the floor. Length is not the goal — answering “what is in this category and why should I care?” is.
  • Do I still need rel="next"/rel="prev"?: No. Google deprecated them in 2019. Use a self-referencing canonical on each paginated page plus crawlable <a href> pagination links instead.
  • Do I need schema on category pages?: BreadcrumbList always; CollectionPage if you want to be explicit. Use ItemList only if you can keep it accurate — a stale ItemList is worse than none.
  • Can I noindex thin category pages instead?: Yes, if the category has fewer than 5 posts and no near-term plan to grow. Noindex is a valid fix, not a defeat. Do not noindex paginated pages 2..N, though — that orphans your deep content.
  • How often should I re-audit?: Quarterly for the top 10 by traffic, twice yearly for the rest, and immediately after any CMS template change.

Tags: #Tutorial #SEO #AI coding #Category pages #Audit