DEV Community

seller-mind
seller-mind

Posted on

I Built a Free Landing Page SEO Checker: Here's What It Checks and Why

Most landing page SEO tools cost $50-200/month. But if you just want to check a few pages before launch, you don't need a subscription.

I built a free checker that runs 15+ SEO checks in the browser. No signup, no payment, no data collection.

What It Checks

The tool runs these checks against any public URL:

Critical Checks (Will Break Your SEO)

  1. Missing title tag — Google shows "Untitled" in results
  2. Missing meta description — Google auto-generates snippets (usually poorly)
  3. No H1 tag — Confuses content hierarchy
  4. Multiple H1 tags — Dilutes the primary keyword signal
  5. Missing viewport meta — Fails mobile-first indexing

Important Checks (Should Fix)

  1. Title too long (>60 chars) — Gets truncated in SERPs
  2. Title too short (<30 chars) — Misses keyword opportunities
  3. Meta description >160 chars — Gets cut off
  4. Missing Open Graph tags — Bad social media previews
  5. No canonical URL — Risk of duplicate content

Bonus Checks (Nice to Have)

  1. Missing Twitter Card tags
  2. No structured data (JSON-LD)
  3. Images without alt text
  4. Slow-loading resources
  5. Missing sitemap reference

How It Works

The checker uses a CORS proxy to fetch the target page, then parses the HTML:

async function checkSEO(url) {
  // Fetch the page via CORS proxy
  const response = await fetch(`https://api.allorigins.win/raw?url=${encodeURIComponent(url)}`);
  const html = await response.text();

  const parser = new DOMParser();
  const doc = parser.parseFromString(html, 'text/html');

  const results = [];

  // Check title
  const title = doc.querySelector('title');
  if (!title) {
    results.push({ check: 'Title Tag', status: 'FAIL', message: 'Missing title tag' });
  } else if (title.textContent.length > 60) {
    results.push({ check: 'Title Tag', status: 'WARN', message: `Title too long (${title.textContent.length} chars)` });
  } else {
    results.push({ check: 'Title Tag', status: 'PASS', message: title.textContent });
  }

  // Check meta description
  const metaDesc = doc.querySelector('meta[name="description"]');
  if (!metaDesc) {
    results.push({ check: 'Meta Description', status: 'FAIL', message: 'Missing meta description' });
  }
  // ... more checks

  return results;
}
Enter fullscreen mode Exit fullscreen mode

Architecture Decisions

1. Client-Side Only

The entire tool runs in the browser. This means:

  • No server costs
  • No rate limits
  • No data stored
  • Instant results

2. CORS Proxy

Since browsers block cross-origin requests, I use a public CORS proxy. This has limitations:

  • Some sites block the proxy
  • Large pages may timeout
  • No JavaScript rendering (static HTML only)

For most landing pages, this works perfectly since they're typically server-rendered.

3. Scoring System

Each check contributes to an overall score:

  • PASS = +7 points
  • WARN = +3 points
  • FAIL = 0 points

Final score = (earned / possible) × 100

I chose this weighting because some checks are more important than others (missing title is worse than missing Twitter Cards).

What I Learned

  1. Most landing pages fail basic SEO — In testing 100+ sites, ~40% had missing or duplicate H1 tags
  2. Developers over-index on performance, under-index on meta tags — Lots of sites have perfect Core Web Vitals but no meta descriptions
  3. Free tools build audience — The SEO checker drives organic traffic to my other tools

Try It

SaaSLaunch SEO Checker — free, unlimited, no signup.


FTC Disclosure: I built this tool. Completely free, no affiliate links or paid promotions.

What SEO issues do you see most often on landing pages? Share in the comments.

Top comments (0)