Run an SEO Audit
This is the standing process for grading and fixing the SEO of any Launch Industries website (or a client website we maintain). We run this on launchindustries.biz quarterly, after every major redesign, and whenever a client asks us to improve their search visibility.
When to run this
- Quarterly — every 90 days on launchindustries.biz and on any client site we maintain.
- Before a redesign — capture a baseline so we can prove the redesign didn't regress.
- After a redesign — verify scores held or improved.
- When a client requests it — kick off any new SEO engagement with this audit.
Tools you'll need
The process
Run the SEOptimer audit
- Go to seoptimer.com (opens in a new tab).
- Enter the site's homepage URL (or the specific page you want graded).
- Wait ~30 to 60 seconds for the audit to complete.
- Click the download icon in the top right and save the PDF. Name it
[domain]-seoptimer-[YYYY-MM-DD].pdfand drop it in the client's Google Drive folder (or/SEO Audits/Launch/for our own site).
Read the report
SEOptimer grades across six categories. Each one is graded A+ to F-:
| Category | What it measures |
|---|---|
| On-Page SEO | Title length, meta description, headings, keyword consistency, canonical, sitemap, schema |
| GEO | "Generative Engine Optimization" — how readable the page is to LLMs and AI search engines |
| Links | Backlinks, anchor text, on-page link structure, domain strength |
| Usability | Mobile rendering, viewport, favicon, email-in-plain-text exposure |
| Performance | Page weight, JavaScript bundle, image compression, load speed, HTTP/2 |
| Local SEO | Google Business Profile completeness and reviews |
Skim the recommendations list at the top. Each is tagged Medium or Low priority. Medium-priority recommendations are the ones to fix first.
Hand off to Claude Code
Open the website's repo in Claude Code (Cursor, Claude Desktop, or claude CLI). Drop the PDF into the chat and use this prompt template:
Here is our latest SEOptimer report: [path to PDF]. Our current grade is [X]
overall ([list each category score]).
Please evaluate the report against our actual website and identify which
findings you can fix in code. For each fix:
- What the change is
- The expected score impact (e.g. "On-Page SEO A- → A+")
- The risk level (low / medium / high) and what could break
Get my approval before sweeping refactors (anything touching more than ~10
files, or anything that requires a framework migration like SSR).Claude will produce a categorized punch list. Approve the low-risk fixes one batch at a time so you can spot-check the live site after each deploy.
Verify after each deploy
After every Claude-led fix lands in production, re-run the SEOptimer audit on the same URL. Compare:
- Did the targeted grades improve?
- Did any other grades regress? (Usability is the most common surprise — see the warning below.)
- Are any new findings appearing?
Save the new report alongside the old one so the history is clear.
Watch for Usability regressions. SEOptimer parses the HTML source, including content inside <noscript> tags. If Claude adds a <noscript> SEO fallback that contains a plain-text email address, Usability will drop from A+ to C or worse with no other visible cause. The fix is to obfuscate any email text inside <noscript> (e.g. "hello [at] launchindustries.biz") while keeping the mailto: link.
Re-audit after 24-48 hours
Some audit tools cache results. If the audit doesn't reflect your changes within 5-10 minutes, wait a day and re-run. If a finding persists past 48 hours and you've shipped the fix, double-check that the deployed HTML actually contains the change.
What Claude can fix easily
These are the changes that typically take one Claude session and one deploy:
- Title tag length and keyword coverage — most title-tag failures are over 60 chars or duplicate the brand twice.
- Meta description length and keyword inclusion — target 120 to 160 chars.
- Duplicate H1 tags — most often caused by a
<noscript>fallback or a layout wrapper that includes its own H1. - Email Privacy — obfuscating plain-text emails in the Footer /
<noscript>while keepingmailto:links. - Image weight — converting PNG hero images to AVIF and WebP via
sips+cwebpand serving with CSSimage-set(). - JavaScript bundle size — converting eager route imports to
React.lazy()with<Suspense>for SPAs, which often cuts the homepage JS by 60-80%. - Missing structured data — adding JSON-LD schema for Organization, LocalBusiness, BreadcrumbList, FAQPage, Product, etc.
- Keyword coverage in headings — Claude can rewrite H2/H3 text to surface specific service phrases ("Registered Agent", "Technology Automation", "Operations Consulting").
- Friendly internal link text — replacing "click here" / raw URLs with descriptive anchors.
What Claude can't fix
Send these findings to the right human, not Claude:
- Backlinks / referring domains — content + PR play. Claude can write outreach drafts but can't acquire links.
- YouTube subscribers — creator / community play.
- Google Business Profile reviews — customer-relationship play.
- HTTP/2 finding on Vercel — false positive. Vercel serves HTTP/2 and HTTP/3 by default; SEOptimer's detector is wrong. Ignore.
When to escalate to bigger work
If after the easy wins you still need a higher grade, the bigger options on the table are:
- SSR migration (Vite SPA → Next.js or
vite-plugin-ssg). This is the only real fix for "Reduced Rendered Content" on the GEO score. ~1 to 3 days of dedicated work. Worth it if GEO matters (AI search traffic is becoming a real source). - Site-wide inline-styles refactor. SEOptimer flags every
style={{...}}block as a performance concern. Removing them is a 1-2 day project for marginal SEO benefit. Don't do this unless other levers are exhausted. - Friendly Links kebab-case route refactor. If your routes are mixed-case (
/Resources/SEOAudit), refactoring to lowercase-kebab + redirects ~2 to 3 hours.
Anti-patterns to avoid
Don't keyword-stuff the title past 60 characters. Google truncates around 580px wide (~55-60 chars). A 115-char title looks bad in the SERP and SEOptimer marks it down.
Don't add plain-text emails to <noscript> fallbacks. They count toward "Email Privacy" and tank Usability. Use a link to your contact form or an obfuscated format.
Don't trust SEOptimer's HTTP/2 detection on Vercel. It's a known false positive. Verify with curl -I --http2 https://your-domain.com/ — Vercel always returns HTTP/2.
Don't delete the Google Cloud project that owns the calendar service account. See the Calendar Outage runbook for what happens (and what to do) if it gets deleted.
Example: launchindustries.biz, May 2026
In one focused session we moved launchindustries.biz from B+ to A overall:
| Category | Before | After |
|---|---|---|
| On-Page SEO | A- | A+ |
| Performance | D | A- |
| Usability | A+ → C (regression) → A+ | A+ |
| GEO | C+ | C+ |
| Links | D | D |
What moved the needle:
- Title 115 → 59 chars
- Meta 259 → 154 chars (with all keywords)
- Hero PNG 1.2 MB → 72 KB AVIF (95% smaller)
- JS bundle 2.67 MB monolith → 769 KB shell + 235 on-demand route chunks
<noscript>fallback with structured prose for LLMs- Duplicate H1 fixed (was a
<noscript>H1 colliding with the hero H1) - Footer email obfuscated to fix Usability regression
What didn't move:
- Backlinks (Links D) — not a code problem
- GEO (rendered % dropped 60% but still SPA-limited — SSR is the real fix)
Related
- Calendar Outage runbook — what to do when the calendar feed silently goes empty.