🌐 Page Analysis API

🏠 Back to Home

✨ This endpoint analyzes a webpage and extracts key SEO information.

Please enter a valid URL starting with http:// or https://.


    

🚀 How to Use

Make a POST request to /analyze-page with the following JSON body:

{
    "url": "https://example.com",
    "render_js": false,
    "check_robots_txt": true,
    "user_agent": "Googlebot"
}

🧩 render_js (optional, default false): set to true to render JavaScript in a headless browser before analysis. Use this for single-page apps whose content is loaded by JS; leave it off for faster analysis of server-rendered pages.

🕷️ check_robots_txt (optional, default true): fetch the site's robots.txt to compute the crawlability verdict. This makes one extra request — set it to false to skip it. user_agent (optional, default Googlebot) picks which bot's robots.txt rules to evaluate.

📝 Response Format

The API returns a JSON object containing:

  • 📌 title: Page title
  • 📄 meta_description: Meta description content
  • 🔗 url: Original URL that was analyzed
  • 📝 body_text: Main text content from paragraph tags
  • 📊 heading_structure: Object containing h1-h6 headings
  • 🔄 internal_links: Array of links to same domain
  • 🌐 external_links: Array of links to other domains
  • 🎯 canonical: Canonical URL if specified
  • 🤖 meta_robots: Robots meta tag content if present
  • 🔢 http_status: HTTP status code returned by the page
  • 🧬 structured_data: Extracted JSON-LD blocks (with schema.org types), Open Graph and Twitter Card tags
  • 📇 indexability: A single indexable verdict combining HTTP status, meta robots, the X-Robots-Tag header and canonical — with the reasons behind it
  • 🕷️ crawlability: A crawlable verdict based on robots.txt (for the chosen bot) plus HTTP status

Example Response

{
    "title": "Example Domain",
    "meta_description": "This is an example page",
    "url": "https://example.com",
    "body_text": "This domain is for use in illustrative examples...",
    "heading_structure": {
        "h1": ["Example Domain"],
        "h2": ["Section 1", "Section 2"]
    },
    "internal_links": ["https://example.com/about"],
    "external_links": ["https://external-site.com"],
    "canonical": "https://example.com",
    "meta_robots": "index,follow",
    "http_status": 200,
    "structured_data": {
        "json_ld": [{"@type": "WebPage", "name": "Example Domain"}],
        "json_ld_types": ["WebPage"],
        "open_graph": {"og:title": "Example Domain"},
        "twitter_card": {"twitter:card": "summary"},
        "counts": {"json_ld": 1, "open_graph": 1, "twitter_card": 1}
    },
    "indexability": {
        "indexable": true,
        "reasons": ["No indexing blockers detected"],
        "notes": [],
        "signals": {"http_status": 200, "meta_robots": "index,follow", "noindex": false}
    },
    "crawlability": {
        "crawlable": true,
        "verdict": "allowed",
        "reasons": ["No crawl blockers detected"],
        "signals": {"checked_user_agent": "Googlebot", "robots_txt_found": true}
    }
}

Error Responses

Errors use a consistent envelope: {"error": {"code": "...", "message": "...", "details": "..."}}

  • 400: Missing/invalid URL, non-JSON body, or invalid options
  • 429: Rate limit exceeded
  • 4xx/5xx: Upstream fetch failure (status mirrors the crawler)

🚀 Benefits

  • 🔍 Gain insights into SEO elements and identify improvement areas
  • 🧠 Understand page structure and optimize for search visibility
  • 📊 Comprehensive analysis with data-driven insights for informed decisions
  • ⏱️ Automates analysis, saving time with a user-friendly interface
  • ⚙️ Customizable for different URLs with clear error handling
  • 🔗 Integrates with other tools and ensures regular updates based on latest practices