Back to Blog

Deep Page Analysis: SEO Audit Walkthrough with Real Data

·, Founder·Updated ·Technical SEO
seo auditpage analysiscontent qualitytechnical seoseo walkthrough

Most SEO tools check the basics — is your title tag present, is your meta description the right length, do you have an H1. That is useful, but it is surface-level. It tells you nothing about whether your content is readable, whether AI engines can cite it, or whether your link profile is helping or hurting.

A deep page analysis goes further. It checks rendering and framework detection, readability scoring (Flesch-Kincaid), content humanness, E-E-A-T signals, link quality, and 18 AEO signals. This walkthrough shows you what a complete analysis looks like and how to act on every section.

What Makes a Deep Analysis Different

A surface-level audit checks maybe 10 things: title, description, H1, canonical, robots, OG tags, and a few more. A deep analysis covers six categories:

  • Technical SEO — canonical, robots, viewport, charset, lang, HTTPS, OG tags, heading structure, title/description length
  • Rendering — framework detection, rendering type (CSR/SSR/SSG), SPA detection, SEO impact assessment
  • Content Quality — readability (Flesch Reading Ease, Flesch-Kincaid Grade), humanness scoring, E-E-A-T signals, content depth
  • Link Health — internal/external link counts, anchor text quality, broken link detection
  • AEO Signals — all 18 schema and content structure signals for AI citation readiness
  • Recommendations — prioritized, actionable fixes based on all detected issues

By the end of this walkthrough, you will know how to run this analysis and what to do with every piece of data it returns.

Step 1: Crawl the Page

Start by crawling the page you want to analyze:

$ xyle crawl --url https://example.com/blog/my-post --json

This returns a JSON object with page metadata (title, meta description, headings, word count) plus these sections: technical_seo, rendering, content_quality, link_analysis, aeo_signals and geo_signals. The crawl fetches the page, parses the DOM, detects the framework, extracts structured data, and computes all signals.

Let us walk through each section using example output. The values below are illustrative, and each JSON block is trimmed to the fields discussed.

Step 2: Technical SEO Checklist

The technical_seo section is your foundation. If some of these checks fail, crawlers may index the wrong URL or show a poor result for the page.

{
  "technical_seo": {
    "has_canonical": true,
    "canonical_url": "https://example.com/blog/my-post",
    "has_robots_meta": true,
    "robots_directives": "index, follow",
    "has_viewport": true,
    "has_charset": true,
    "has_lang": true,
    "lang_value": "en",
    "is_https": true,
    "has_og_title": true,
    "has_og_desc": true,
    "has_og_image": true,
    "h1_count": 1,
    "title_length": 35,
    "meta_desc_length": 52
  }
}

Here is what to check:

  • has_canonical: true — Every page needs a canonical URL. Without it, search engines may treat URL variants (with/without trailing slash, query parameters) as duplicate content.
  • h1_count: 1 — Exactly one H1 per page. Zero means missing primary heading. Two or more means the page hierarchy is ambiguous.
  • title_length: 35: On the short side. XeoRank suggests 50 to 60 characters when rewriting a title and flags titles under 30 or over 65. Google sets no fixed limit, but long titles get truncated in results.
  • meta_desc_length: 52: Too short. XeoRank flags descriptions under 70 characters and suggests 120 to 155. Google may write its own snippet from your page content when the description does not fit the query, and 52 characters gives it little to work with.
  • is_https: true — Non-negotiable. HTTPS is a ranking signal and a trust signal. If this is false, fix it before anything else.
  • has_og_title, has_og_desc, has_og_image: Needed for social sharing. Without OG tags, social platforms build their own preview from your page, and it usually looks bad.
  • has_lang: true: Tells browsers and screen readers what language the page is in. Google says it uses the visible content to detect language and ignores the lang attribute, so this one is about accessibility more than rankings.

To check titles, descriptions and OG tags on any URL without the CLI, paste it into the free meta tag checker.

Common Failures and Fixes

CheckCommon FailureFix
CanonicalMissing or self-referencing with wrong protocolAdd <link rel="canonical" href="..."> with full HTTPS URL
H1 Count0 or 2+Ensure exactly one <h1> in page content
Title LengthUnder 30 or over 65 charsRewrite to about 50-60 characters with the target keyword and value prop
Meta DescriptionUnder 70 or over 160 charsWrite a 120-155 character description with a call to action
OG TagsMissing og:imageAdd 1200×630px OG image for every page

Step 3: Content Quality Deep Dive

This is where deep analysis separates from basic SEO tools. The content_quality section measures four dimensions of your content.

Readability Scores

{
  "content_quality": {
    "flesch_reading_ease": 62.4,
    "flesch_kincaid_grade": 8.2,
    "word_count": 1847,
    "sentence_count": 98,
    "avg_words_per_sentence": 18.8,
    "reading_time_minutes": 8
  }
}

Flesch Reading Ease measures how easy your text is to read on a 0-100 scale:

ScoreLevelAudience
90-100Very Easy5th grade
80-89Easy6th grade
70-79Fairly Easy7th grade
60-69Standard8th-9th grade
50-59Fairly Difficult10th-12th grade
30-49DifficultCollege
0-29Very DifficultGraduate/Professional

Technical content aimed at developers usually scores lower than general-audience writing, and that is fine. For general audience content, aim for the 60-70 band in the table above. A score of 62.4 is solid for a technical blog post.

Flesch-Kincaid Grade translates readability to a US grade level. A grade of 8.2 means an 8th grader could understand the text. Developer content often lands a few grades higher. A grade well above 12 usually points to complex sentence structure, not necessarily complex ideas.

Average Sentence Length of 18.8 words is above 15, the point where XeoRank's AEO score gives full credit for sentence length. Shorter sentences are easier to lift out as a standalone answer. This does not mean dumbing down the content; it means breaking compound sentences into simpler ones.

Humanness Score

The humanness score is a simple heuristic for how varied and natural the writing reads. It is not an AI detector. It combines three signals:

  • Sentence length variance: Varied sentence lengths read naturally. Uniform length reads as formulaic. Higher variance scores better.
  • Pronoun usage: Direct address ("you", "we", "I") reads as conversational. Very few pronouns scores lower.
  • Trigram repetition: Repeating the same three-word phrases reads as formulaic and scores lower.

The score ranges from 0 to 1, where higher reads more natural. It does not penalize AI-assisted content. It flags writing that readers may find flat.

E-E-A-T Score

E-E-A-T stands for Experience, Expertise, Authoritativeness, and Trustworthiness — Google's framework for evaluating content quality. The E-E-A-T score checks for concrete signals:

  • Author information — Is there a byline? Does it link to an author page?
  • Publication dates — Are datePublished and dateModified present?
  • Source citations — Does the content link to authoritative external sources?
  • Expert indicators — Are there quotes, credentials, or first-hand experience signals?

A low E-E-A-T score does not mean your content is bad. It means the page does not show who wrote it, when, or what it is based on. Google's guidance on helpful content explains E-E-A-T and notes that it is not a specific ranking factor on its own. Adding an author bio, publication date and a few authoritative citations will raise this score.

Step 4: Link Health Check

Links are both a navigation tool and a quality signal. The link_analysis section of a crawl shows your page's link profile:

{
  "link_analysis": {
    "internal_link_count": 8,
    "external_link_count": 5,
    "nofollow_link_count": 0,
    "links_in_content": 11,
    "generic_anchor_count": 2,
    "anchor_quality": "moderate",
    "external_link_ratio": 0.38,
    "broken_link_sample": []
  }
}

What to Check

Internal links (8): Your page should link to other relevant pages on your site. This distributes page authority and helps crawlers discover content. Aim for at least a few internal links per post, pointing to related content (XeoRank's link score gives full credit at three or more).

External links (5): Outbound links to authoritative sources let readers check your claims. Documentation, research papers and official specs (schema.org, web.dev, MDN) are good targets.

Generic anchors (2): Anchors like "click here" and "read more" are wasted anchor text. Anchor text should describe what the linked page is about. Instead of "click here to learn about SSR," write "learn about server-side rendering." Descriptive anchors help both SEO and accessibility.

External link ratio (0.38): There is no official ideal ratio. A page with only internal links looks insular, and a page with only external links sends readers away. This page's mix of 8 internal and 5 external links is balanced.

Step 5: Run the Full Analysis

Crawling gives you raw signals. Analysis computes scores, applies weights, and generates recommendations:

$ xyle analyze --url https://example.com/blog/my-post --content "..." --json

The output includes an overall SEO score broken into four sub-scores:

{
  "seo_breakdown": {
    "overall": 0.75,
    "technical": 0.88,
    "on_page": 0.72,
    "content": 0.68,
    "links": 0.70
  },
  "aeo_score": 0.61,
  "geo_score": 0.58,
  "recommendations": [...]
}

How the Weighted Average Works

The overall score is a weighted average of four sub-scores:

Sub-ScoreWeightWhat It Measures
Technical SEO25%Canonical, robots meta, viewport, charset, lang, HTTPS, OG tags, favicon
On-Page SEO30%Title, meta description, headings, keyword usage
Content Quality25%Readability, humanness, E-E-A-T, content depth
Link Quality20%Internal/external balance, anchor text, link count

In this example:

  • Technical SEO (0.88 × 0.25) = 0.220
  • On-Page SEO (0.72 × 0.30) = 0.216
  • Content Quality (0.68 × 0.25) = 0.170
  • Link Quality (0.70 × 0.20) = 0.140
  • Total: 0.746 (rounded to 0.75)

Where to Focus Effort

Look at which sub-score is lowest — that is where improvement has the most impact. In this example, Content Quality (0.68) is the weakest. Improving readability, adding author information, or including more citations would raise the overall score more than perfecting technical SEO from 0.88 to 0.95.

The AEO score of 0.61 means some answer-readiness signals pass and others do not. Adding short, direct answers under question headings would raise it. A higher AEO score makes a page easier to quote; it does not guarantee that an AI engine will cite it.

Step 6: Act on Recommendations

The recommendations array contains prioritized, actionable fixes:

{
  "recommendations": [
    {
      "priority": "important",
      "category": "on_page",
      "description": "Meta description is 52 characters. Ideal length is 120-155 characters."
    },
    {
      "priority": "important",
      "category": "content",
      "description": "Average sentence length is 18.8 words. Shorten sentences toward 15 words or fewer."
    },
    {
      "priority": "important",
      "category": "aeo",
      "description": "Few headings are followed by a concise answer. Add a short answer paragraph (under 50 words) after each question heading."
    },
    {
      "priority": "nice_to_have",
      "category": "content",
      "description": "Add author bio with credentials or experience indicators to improve E-E-A-T signals."
    },
    {
      "priority": "nice_to_have",
      "category": "links",
      "description": "Replace 2 generic anchor texts ('click here', 'read more') with descriptive anchor text."
    }
  ]
}

How to Prioritize

Work through recommendations in priority order:

  1. Critical: Problems like a missing canonical, no HTTPS or no viewport tag. Fix them first. This page has none.

  2. Important: These matter but are not blocking. The short meta description takes 2 minutes to fix, so do it now. Shortening sentences and adding direct answers under headings can go into your next content update.

  3. Nice to Have — These improve quality but have smaller individual impact. Batch them together when you are already editing the page.

Example: Fixing the Meta Description

The meta description recommendation says the description is 52 characters, far below the 120-155 character target. Here is the fix:

// Before — too short
export const metadata = {
  description: "A concise description with target keywords...",
};

// After: 153 characters with keyword and CTA
export const metadata = {
  description:
    "Walk through a complete SEO and AEO page analysis with real data. Technical SEO checks, readability scores, link health, and prioritized recommendations.",
};

That is a 2-minute change. Google often uses the meta description as the snippet under your title, and a clearer snippet can earn more clicks at the same ranking position.

Getting Started

Run your first deep analysis:

$ npm install -g @xyleapp/cli
$ xyle login
$ xyle crawl --url https://yoursite.com/page --json

That gives you raw signals. To get scored analysis with recommendations:

$ xyle analyze --url https://yoursite.com/page --content "..." --json

Or skip the CLI and use the XeoRank dashboard: paste a URL and get a visual analysis with score rings, signal checklists, and a prioritized recommendation list. For a quick check of a single URL, the free page analysis gives SEO, AEO and GEO scores from 0 to 100 based on 33 signals.

The pages that rank well and get cited by AI engines are not the ones with the most content. They are the ones with the right structure, the right signals, and the right quality markers. A deep analysis tells you exactly where you stand and exactly what to fix. Start with one page, work through the recommendations, and watch your scores climb.

Ready to optimize your search rankings?

XeoRank connects to Google Search Console, analyzes content gaps with AI, and gives you actionable fixes — from the terminal or dashboard.