Low Content Depth Hurting Indexing

Short, thin pages get deprioritized. What "depth" really means.

Most URLs stuck in “Crawled - currently not indexed” fail on content depth. Google isn’t counting words (a 300-word standout can rank fine) — it’s judging “does this page provide any unique information beyond repeating the main keyword?”

“Depth” doesn’t mean “long.” It means information density: specific examples, exclusive data, firsthand observations, executable steps. Below are the markers and the fix.

Common causes

1. Topical page < 300 words / all generalities

Under 300 words is basically unrecoverable — unless it’s a definitional entry (like a dictionary). Common thin patterns:

  • “Benefits of X” → 5 platitudes (boost productivity, save time, enhance experience…)
  • “How to X” → all verbs no concrete steps (“use the tool”, “configure settings”)
  • “What is Y” → paraphrased Wikipedia intro

How to confirm: Compare your article to the top 10 search results. If you’re under 30% of their word count AND don’t have unique info they lack — depth is missing.

2. No specific examples / numbers / screenshots

Google uses “specificity signals” to judge density. A 1500-word all-abstract article < a 600-word article with 3 screenshots + 2 code blocks + 1 table.

How to confirm:

curl -sL https://yourdomain.com/page | grep -cE '<(img|code|pre|table)'
# < 3 = too abstract

3. No firsthand / exclusive information

Google’s Helpful Content system specifically detects “second-hand information restatement”:

  • Wikipedia / official docs rephrased
  • Other blog posts paraphrased
  • AI-generated content with no human fact-check

What’s needed: experiments you ran, your own screenshots, industry data you measured, your preferences with reasons.

4. Doesn’t answer the user’s adjacent questions

A user searching “Astro deploy Vercel” probably also wants to know:

  • How to configure env vars?
  • How to change the build command?
  • How to enable preview deployments?
  • How to bind a custom domain?

Only answering the title question = user bounces to find another page = Google deprioritizes.

5. Heavy AI generation with no editorial fingerprints

AI text patterns Google now detects:

  • Paragraph structure too “uniform” (3 sentences each, topic-sentence-first)
  • Vocabulary skewed formal, missing colloquial connectors
  • No specific people, times, places
  • Lists with no hierarchy (5 equal-length bullets)

Shortest path to fix

Step 1: Audit thin pages with a density script

// scripts/audit-depth.mjs
import fg from "fast-glob";
import fs from "node:fs";
import matter from "gray-matter";

const issues = [];
for (const f of fg.sync("src/content/**/*.{md,mdx}")) {
  const { content } = matter(fs.readFileSync(f, "utf8"));
  const text = content.replace(/```[\s\S]+?```/g, "").replace(/\!\[.*?\]\(.+?\)/g, "");
  const words = text.split(/\s+/).filter(Boolean).length;
  const images = (content.match(/!\[/g) || []).length;
  const codeBlocks = (content.match(/```/g) || []).length / 2;
  const tables = (content.match(/^\|/gm) || []).length;
  const headings = (content.match(/^##+ /gm) || []).length;

  const score = words + images * 100 + codeBlocks * 80 + tables * 50 + headings * 30;
  if (words < 600) issues.push(`THIN (${words}w, score ${score}): ${f}`);
  if (headings < 3) issues.push(`FLAT (${headings} sections): ${f}`);
  if (images + codeBlocks + tables === 0) issues.push(`ABSTRACT (no img/code/table): ${f}`);
}
console.log(issues.join("\n"));

Output gives you a prioritized fix list.

Step 2: For each thin page, inject density

In this order:

  1. Add 1 real screenshot: your own tool, comparison, flow — beats stock photos 10×
  2. Add 1 table: comparison / pricing / timeline / steps — Google loves structured data
  3. Add 1 code / config / command block: showing beats telling
  4. Add 1 specific number: not “many,” not “several” — “127,” “2.3 seconds,” “$29/month”
  5. Add 1 first-person experience: “We tried X in March 2026 and got Y”

Each article should have at least 3 of these.

Step 3: Add adjacent-question sections

Open AnswerThePublic with your main keyword to surface real adjacent questions users search. Pick 3-5 and turn them into H2 sections.

Or use Google’s own “People also ask” block (search yourself in a SERP).

Step 4: First paragraph signals unique value

Bad:

This article will introduce in detail the complete process of deploying Astro to Vercel, hoping to help you.

Good:

I migrated my blog from Netlify to Vercel in May 2026. The whole thing took 17 minutes. This post documents those 17 minutes, including the two traps I hit (env var case sensitivity + wrong default build command) and how I dropped cold start from 800ms to 150ms.

The opening establishes: this page has specific, exclusive, usable information.

Step 5: Delete the thinnest 20%

Not every page is salvageable. After Steps 1-4, anything still thin gets one of:

  • Merge into a pillar article → 301 redirect
  • Outright 410 delete → remove from sitemap
  • Add noindex and park → revisit when you have time to deepen

Better than leaving a pile of thin pages dragging on site-wide authority.

Step 6: After 4 weeks, check “Crawled - not indexed” count

Re-check Search Console 4 weeks post-fix. Targets:

  • ≥ 50% of fixed URLs entered the index
  • Site-wide “Crawled - not indexed” count down by ≥ 20%

If no movement, the depth added is still too abstract — re-audit.

Prevention

  • Outline before writing — 8+ H2 sections is healthy depth
  • Hard 3-element rule per article: ≥1 screenshot + ≥1 table or code block + ≥1 specific number
  • First paragraph must convey something exclusive — you did / used / measured it, not generalities
  • Skip “What is X” intro-style pieces unless you can offer detail Wikipedia doesn’t
  • AI drafts must be fact-checked + injected with firsthand experience before publishing

Tags: #SEO #Google #Search Console #Indexing