Category pages are the dead zone of most content sites: Google crawls them, but they rarely rank, and most owners never look at them once they go live. This workflow gives content-site owners a repeatable AI-assisted pass to find duplicate intros, missing meta descriptions, JS-only pagination, and orphan-looking hubs — and to ship targeted patches instead of guessing.
What this covers
Category, hub, and tag pages get the same treatment as blog posts in indexing budgets but almost none of the editorial care. You will leave this guide with a checklist that finds the three highest-risk category pages on your site, plus copy-ready patches: a 200+ word unique intro, an internal-link block with 12-20 outbound links, a meta description under 155 characters, and a server-rendered pagination block. 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.
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 pages and you have never audited them, you are the target audience. Single-author niche blogs with 5 categories will get less mileage than multi-author sites with 50+ tag pages.
When to reach for it
Three signals: (1) category pages appear in Search Console with CTR below 1% on branded or near-branded queries; (2) a category page outranks its best child post for the category term; (3) site:search shows multiple category pages competing for the same 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.
Before you start
- Export the full list of category URLs from your sitemap or CMS, not from Search Console (SC under-reports).
- Have a tool ready that can fetch rendered HTML, not just source —
curlis fine for static sites, but use a headless browser (Playwright,chrome --headless) for JS-heavy sites. - Decide your acceptance criteria up front: minimum word count, minimum internal-link count, minimum unique-intro score. Without numbers you will rationalize away problems.
- Pick a 5-page sample (your biggest category + 4 random ones) before scaling.
Step by step
- Inventory. List every category, hub, and tag URL. Pipe into a CSV with columns
url,h1,intro_first_200_chars,child_link_count,has_meta_desc,pagination_type. - Fetch. For each URL run
curl -s URL | tee dumps/$slug.html(static) orchromium --headless --dump-dom URL > dumps/$slug.html(JS). Store the rendered HTML — you will need it again. - Template detection. Paste 5 dumps into your AI of choice: “What’s the shared template across these five HTML files? What’s unique per page? Score uniqueness 1-5 for the intro paragraph alone.”
- Intro audit. For every page scoring 3 or below, ask the AI to draft a 220-word replacement intro that answers (a) what this category contains, (b) who should read it, (c) the most-linked piece, (d) what is new this month.
- 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. - Render check. Ask: “Compare the source HTML to the rendered HTML. Are child URLs present in source, or injected via JavaScript only? Is pagination an
<a href>or a JS click handler?” JS-only pagination is your biggest hidden bug. - 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.”
- 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),
<title>rewrite if needed. - Ship and measure. Apply patches, re-fetch in 30 days, compare CTR and average position in Search Console Performance for the category URL specifically (filter by exact URL, not contains).
First-run exercise
- Pick your single highest-impression category page from Search Console.
- Run the 9 steps above end-to-end on that one URL.
- Ship the patch, set a calendar reminder for 30 days.
- Change only one variable for the second run — usually the AI model or the prompt phrasing — to learn which call is doing the work.
Quality check
- Does the new intro answer a question a real reader has, or does it just contain the keyword?
- Are internal links contextual (“our Notion templates guide”) or naked (“read more”)? Naked anchors waste the slot.
- Did you check the rendered HTML, not just 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?
How to reuse this workflow
- Save your prompt set as a single text file with placeholders for
category_urlanddumps_path. Replace those two variables per run. - Run the full audit quarterly on your top 20 categories; spot-check the long tail twice a year.
- Keep the “before” HTML dump for every patched page so you can A/B the change later or roll back without git archaeology.
Recommended workflow
List categories → fetch rendered HTML → template + uniqueness analysis → internal-link audit → render + pagination check → risk shortlist → apply patches → 30-day Search Console diff.
Common mistakes
- Generic intros where a 200-word template gets the category name plugged in. Google’s near-duplicate detection catches this within a few crawls.
- Category pages with no Featured, Latest, or Start-here block. Readers bounce, dwell time tanks, 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 with no modifier. “Notion Templates” loses to “Notion Templates (47 picks, updated 2026)” every time.
- Auditing source HTML on a JS-heavy site. You’ll 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 to children. Below 8 it looks orphan-like; above 30 the page becomes 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 upside down.
- What word count for the intro?: 200-300 words of unique copy is the floor. The goal is not length but answering the implicit question “what is in this category and why should I care?”
- Do I need schema markup on category pages?:
BreadcrumbListalways,CollectionPageif you want to be explicit.ItemListonly if you can keep it accurate; staleItemListis 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.
- How often should I re-audit?: Quarterly for top 10 by traffic, twice yearly for the rest. Re-audit immediately after a CMS template change.