v0 Gives You the Best SEO Foundation of Any AI Builder. Then One Line Destroys It.

v0 produces Next.js on Vercel, which means server rendering and a proper metadata API for free. The trap is that adding 'use client' to a page silently disables its metadata, with no error and no warning.

If you build with v0, you start from a better position than anyone else in this category, and it is worth knowing why so that you do not waste time solving problems you do not have.

v0 produces Next.js applications and deploys them on Vercel. That combination gives you server-side rendering as the default behaviour, which means the HTML sent in response to the very first request already contains your content. There is no shell, no crawler-only rendering path, no pre-rendering feature to enable, no paid tier gating your visibility. A search engine asking for your page receives your page.

It also gives you the Next.js Metadata API, which is a genuinely good system for per-page titles, descriptions, Open Graph tags and structured data, and it is built in rather than bolted on.

So the rendering conversation that dominates every other article about vibe-coded apps simply does not apply to you. Which is excellent news, and it makes the specific traps that do apply worth knowing precisely, because they are quiet ones.

The trap: 'use client' silently kills your metadata

This is the single most common way a v0 app ends up with no usable metadata, and the reason it catches everybody is that nothing tells you it happened.

In the Next.js App Router, the Metadata API only works in Server Components. If a file exports metadata or generateMetadata, and that same file has 'use client' at the top, the metadata export stops working.

There is no build error. There is no runtime warning. The page renders perfectly. Everything looks fine. The metadata is simply not there, and you will not find out until you check your source, or notice weeks later that every page in Google carries the same title.

The reason it happens so often is that it is an entirely reasonable thing to do by accident. You have a page. You add a piece of interactivity, a modal, a form with state, a tab switcher. Something needs useState. So you add 'use client' at the top of the page file, which fixes the interactivity immediately. The metadata quietly stops working at the same moment, and nothing connects the two events in your mind.

The fix

Keep the page file a Server Component, and push the interactive part into its own child component that carries 'use client'.

The page file exports metadata or generateMetadata and renders the interactive child. The child holds the state and the event handlers. Both things work, because each is in the right kind of file.

If you are prompting v0 rather than writing this by hand, ask for exactly that: keep the page as a server component that exports metadata, and move the interactive parts into a separate client component.

How to check whether it has already happened to you

Two ways, both quick.

Search your project for 'use client' and look at whether any of those files are page files that should be exporting metadata.

Or, more conclusively, open a few of your deployed pages and view source, then look at the <title> tag. If several different pages share one title, you have found it.

Four other things v0 does not do for you

Rendering and the metadata system are handled. These are not.

A sitemap

Next.js supports this well, through a sitemap.ts file in your app directory that exports a list of your URLs. But it is not created for you, so if you never asked for it, it does not exist. Visit /sitemap.xml on your deployed site and see.

If your pages come from a database or a content directory, generate the list from that source rather than typing it out, so it cannot fall out of date.

A robots.txt

Same arrangement: Next.js supports a robots.ts file, and nothing creates it by default. Point it at your sitemap. Then decide deliberately whether you allow the AI crawlers, because if you want assistants to cite you, they have to be permitted to read you.

metadataBase

A small setting with an annoying failure mode. If you do not set metadataBase in your root layout, relative URLs in your Open Graph tags cannot be resolved into absolute ones, because the server does not know your domain. The result is broken social preview images and, in some cases, broken canonical URLs.

Set it once, in the root layout, to your production URL. It takes one line and it prevents a class of problems that are irritating to debug later.

A domain of your own

Vercel gives you a working address on vercel.app and it is fine for development. Move to your own domain before you publish content, for the ordinary reasons: reputation accumulated on someone else's domain is not portable, visitors read a platform subdomain as unfinished, and moving later means redirects.

And then the part no framework solves

Here is the thing about starting from the best technical foundation: it removes every excuse.

If your v0 app is server-rendered, has correct per-page metadata, a current sitemap, a sane robots.txt, and your own domain, and still nobody is finding it, then the problem is not technical at all. It is that you have one page, and one page can only be found for one thing.

Search engines and AI assistants both do the same job. Somebody asks a question, and they look for the clearest answer to that specific question. Your homepage explains what your product is, which is not a question anybody asks, because they have not heard of your product. People search for their problem in the words of somebody who has that problem and does not yet know what the solution is called.

The apps that get found build a page for each real question. We wrote up a small AI app whose domain was registered on 27 July 2026 and which, in its first 25 days, received 56 visitors from ChatGPT against 23 from Google Search. It happened because the site had specific pages answering specific questions rather than one page describing a tool. The details are in this case study, and the argument in full is in Your App Has One Page. That Is Why Nobody Finds It.

The short version

With v0 you get server rendering, a proper metadata system, and good infrastructure without asking. The specific things to watch are: 'use client' on a page file silently disabling metadata, a missing sitemap.ts, a missing robots.ts, an unset metadataBase, and a vercel.app address you never moved off.

Fix those five and your technical foundation is genuinely finished. Everything after that is writing, which was always the harder half.

Want somebody to check the five?

If you would like a second pair of eyes on your v0 app, including whether your metadata is actually reaching search engines and assistants, we are glad to go through it with you on a call.

Contact us to book a demo.

Related reading:

Rather not do this yourself?

We can simply do it for you

Everything in this article — the website fixes, the content, being found on Google and inside AI assistants like ChatGPT — is exactly the work Licheo does for you, every month. You never learn a tool, and you are never handed a to-do list. You run your business; we make sure your customers can find you.