OptiSearch
Free guide · updated 2026

You shipped it with Cursor.
Did the AI ship your SEO?

Cursor builds whatever you prompt — which means your SEO is whatever you didn't prompt. These five checks catch what the AI silently decided for you.

app.optisearch.se
Action plan · sorted by impact 3 worth doing
Two pages compete for “visitor counter” +7 pts
/pricing ranks #8 but the title wins no clicks +5 pts
Add internal links to /guide/sensors +3 pts
Consolidate both pages onto /visitor-counter, then Copy AI prompt

What Cursor gives you out of the box

Typical output
Whatever you asked for
Rendering
Often client-side unless requested
Sitemap / robots.txt
Only if you asked
Biggest risk
Defaults nobody reviewed

The 5 SEO problems we see on almost every Cursor site

Each one comes with a prompt you can paste straight into Cursor to fix it.

1

The framework chose your SEO for you

Cursor builds whatever you ask — and if you didn’t ask, it usually picks a client-rendered React SPA. That single early choice decides whether Google sees your content or an empty div. Most people discover this months later.

The fix: Check what you actually have: view your page source. If your content isn’t in the raw HTML, move the public pages to SSR or pre-rendering. Step by step: what SEO actually is — how Google works, in plain English.

Paste into Cursor
Check how this project renders: if public pages are client-rendered only, add pre-rendering or server-side rendering for them (e.g. Next.js/Astro static generation, or vite-plugin-ssr/prerendering for a Vite SPA). Every public page must serve its full <title>, meta description, <h1> and main content in the raw HTML response.
2

Default titles left in place

"Vite + React + TS", "Create Next App", "index" — Cursor scaffolds ship with placeholder titles, and they end up as your Google listing. It reads as abandoned, and nobody clicks it.

The fix: Write a real title (≤60 chars) and meta description (≤155 chars) for every page. Step by step: how to add meta titles and descriptions in Next.js.

Paste into Cursor
Find every page in this project and replace any placeholder or duplicated <title> and <meta name="description"> with real, unique, server-rendered text: title max 60 characters describing what the page is for, description max 155 characters that makes someone want to click. Use the site's own language.
3

No sitemap, no robots.txt — Google is guessing

Unless you asked for them, they don’t exist. That means slow discovery, missed pages, and no control over what gets crawled.

The fix: Generate both at build time so they stay in sync with your routes.

Paste into Cursor
Add build-time generation of sitemap.xml (listing every public route with the production domain) and a robots.txt that allows crawling and references the sitemap. Use the framework's ecosystem tool if one exists (e.g. next-sitemap, @astrojs/sitemap); otherwise generate them in the build script. Verify both are served at the site root in production.
4

Structure grew by prompts, not by plan

Vibe-coded sites accrete pages: a landing page here, a feature page there, half of them targeting the same search without you noticing. Google splits your ranking across the duplicates and none of them wins.

The fix: One search intent per page. Merge the overlaps, and give every important topic exactly one home.

Paste into Cursor
List every public page and the search each targets. Where two pages target the same search, pick the stronger one, consolidate the content there, and 301-redirect (or link and de-optimise) the other. Where an important topic has no page, create one focused page for it with its own title, description and h1.
5

Nothing links to anything

Pages built in separate Cursor sessions rarely reference each other. Internal links are how Google finds your pages and understands which ones matter — without them, deep pages are orphans.

The fix: Add in-body links between related pages with descriptive anchors.

Paste into Cursor
Add internal links across this site: from the homepage to every key page, and 1-3 contextual in-body links between related pages using descriptive anchor text (not "click here"). Every important page should be reachable within two clicks of the homepage and linked from at least two other pages.

Not sure which of these your site has?

Run the free scan — it checks your Cursor site's foundations in 15 seconds and tells you what to fix first. Then connect Search Console for the full picture: which searches you're almost winning, and exactly what's holding you back.

Common questions

Does it matter which framework Cursor used for SEO?

Enormously. Server-rendered or statically generated output (Next.js, Astro, SvelteKit) serves Google full HTML by default; a client-rendered SPA serves an empty shell that Google may or may not render. If search traffic matters, that choice outweighs almost everything else.

How do I know if my Cursor-built site is client-rendered?

View page source (not inspect element) and search for your headline. If it isn’t in the raw HTML, the page is client-rendered and Google can’t reliably read it. OptiSearch’s free scanner runs this check for you.

Can I just ask Cursor to "fix my SEO"?

Vague prompts get vague results — Cursor will sprinkle meta tags and call it done. The prompts in this guide are specific about the outcome (server-rendered, per-route, verified in raw HTML), which is what actually moves rankings.

My site is technically fine but still doesn’t rank. Why?

Technique gets you indexed; content gets you ranked. After the foundations, the question becomes which searches you target and whether your pages genuinely answer them — that’s exactly what OptiSearch analyses from your Search Console data.

More platform guides