Why Your AI-Generated App Has No SEO (And the 7-Fix Production Checklist) | Deployxa

AI assistants build SPAs with no SEO: no meta tags, no sitemap, no SSR. Here are the 7 reasons AI apps have no SEO and the production checklist to fix them.

← Back to Dispatch Articles
Engineering Log

Why Your AI-Generated App Has No SEO (And the 7-Fix Production Checklist)

AI assistants build SPAs with no SEO: no meta tags, no sitemap, no SSR. Here are the 7 reasons AI apps have no SEO and the production checklist to fix them.

Why Your AI-Generated App Has No SEO

You built an app with Cursor, deployed it, and waited for users to arrive from Google. They did not. You checked Google Search Console, and your app was not indexed. You searched for your app's name on Google, and it did not appear. What happened? Your app works, so why does Google not see it? This is the SEO gap, and it is one of the most common failure modes for AI-generated apps. AI assistants build SPAs (single-page apps) that render content with JavaScript, which Google can index but slowly and unreliably. Without meta tags, sitemaps, structured data, and SSR, your app is invisible to search engines. Here are the 7 reasons AI-generated apps have no SEO, and the production checklist to fix each one.

The direct answer is that SEO (search engine optimization) is a set of practices that make your app visible to search engines like Google. AI assistants generate code that works for users but is invisible to search engines, because they do not include the metadata, structure, and server-side rendering that search engines need. The 7 reasons are: no meta tags, no sitemap, no SSR (server-side rendering), no structured data, no canonical URLs, slow load time, and no internal linking. Each one has a known cause and a known fix, and the production checklist below covers all 7. For more on why AI apps fail in production, see our article on why AI apps break on the first real user.

Reason 1: No Meta Tags

The most common reason AI-generated apps have no SEO is missing meta tags. Meta tags are HTML elements that tell search engines what your page is about: the title, description, keywords, and Open Graph tags. AI assistants often forget to add meta tags, because they are not visible to users and are easy to overlook. Without meta tags, Google does not know what your page is about, so it cannot rank it for relevant queries. The fix is to add meta tags to every page: a unique title (50-60 characters), a unique description (140-160 characters), and Open Graph tags (for social sharing). For Next.js, use the metadata export or the component. For Vite, use react-helmet or react-head. For more on metadata, see our article on the environment variable guide, which covers configuration that affects SEO.

Reason 2: No Sitemap

The second reason is no sitemap. A sitemap is an XML file that lists all the pages on your site, which helps Google discover and index them. AI assistants rarely generate sitemaps, because they are not needed for the app to function. Without a sitemap, Google has to discover your pages by crawling links, which is slower and less reliable. The fix is to generate a sitemap automatically and submit it to Google Search Console. For Next.js, use the app/sitemap.ts file (or next-sitemap for the pages router). For Vite, generate the sitemap at build time with a script. The sitemap should include all public pages, with their last-modified date, change frequency, and priority. Submit the sitemap to Google Search Console to speed up indexing.

Reason 3: No SSR (Server-Side Rendering)

The third reason is no SSR. AI assistants often build SPAs (single-page apps) that render content with JavaScript, which means the initial HTML is empty (just a

). Google can index JavaScript-rendered content, but it is slower and less reliable than indexing static HTML. For SEO-critical content (blogs, marketing pages, documentation), you need SSR (server-side rendering) or SSG (static site generation), which produces fully-rendered HTML that Google can index immediately. The fix is to use a framework that supports SSR/SSG, like Next.js, Nuxt, or Astro. For existing Vite SPAs, you can migrate to Next.js or add SSR via Vite's SSR plugin. For more on SSR vs SPA, see our article on SPA vs SSR hardware sizing.

Reason 4: No Structured Data

The fourth reason is no structured data. Structured data (Schema.org) is a standardized format for telling search engines what your content is about: is it an article, a product, an event, a FAQ? AI assistants rarely add structured data, because it is not needed for the app to function. Without structured data, Google does not know the type of your content, so it cannot display rich results (e.g., star ratings, event dates, FAQ accordions) in search results. The fix is to add structured data to your pages using JSON-LD (the recommended format). For a blog post, the structured data might look like:

For Next.js, use the next-seo library or add the JSON-LD directly. Test your structured data with Google's Rich Results Test.

Reason 5: No Canonical URLs

The fifth reason is no canonical URLs. A canonical URL tells Google which URL is the "official" version of a page, which prevents duplicate content issues (e.g., if your page is accessible at both example.com/page and example.com/page?utm_source=email). AI assistants rarely add canonical URLs, because they are not needed for the app to function. Without canonical URLs, Google might index multiple versions of the same page, which dilutes your search ranking. The fix is to add a tag to every page, pointing at the official URL. For Next.js, use the metadata.alternates.canonical field. For Vite, add the tag via react-helmet.

Reason 6: Slow Load Time

The sixth reason is slow load time. Google uses page speed as a ranking factor, so slow-loading apps rank lower. AI-generated apps, which often include large JavaScript bundles, high-resolution images, and complex animations, can take 5+ seconds to load, which is too slow for SEO. The fix is to optimize for performance: code-split your JavaScript, compress your images, use lazy loading, and minimize the use of heavy animations. For Next.js, the framework handles code splitting and image optimization automatically. For Vite, you need to configure code splitting manually. For more on performance, see our article on why AI apps break on mobile, which covers mobile performance optimization.

Reason 7: No Internal Linking

The seventh reason is no internal linking. Internal links (links from one page on your site to another) help Google discover and index your pages, and they help users navigate your site. AI assistants rarely add internal linking, because it is not needed for the app to function. Without internal linking, Google has to discover your pages by crawling the sitemap, which is slower. The fix is to add internal links throughout your site: link from blog posts to related blog posts, from the homepage to key pages, and from the navigation to all major sections. Each internal link should use descriptive anchor text (not "click here"), which helps Google understand the context of the linked page. For more on internal linking, see our article on the CORS trap, which covers cross-origin linking patterns.

Step-by-Step: The 7-Fix SEO Checklist

Here is the production checklist for fixing SEO in AI-generated apps.

Fix 1: Add meta tags

For Next.js (app router):

export const metadata = {
  title: 'My App - Build Amazing Things',
  description: 'My App is the best way to build amazing things. Try it free today.',
  openGraph: {
    title: 'My App - Build Amazing Things',
    description: 'My App is the best way to build amazing things.',
    images: ['/og-image.png'],
  },
};

Fix 2: Generate a sitemap

For Next.js (app router):

// app/sitemap.ts
export default function sitemap() {
  return [
    { url: 'https://myapp.com', lastModified: new Date() },
    { url: 'https://myapp.com/features', lastModified: new Date() },
    { url: 'https://myapp.com/pricing', lastModified: new Date() },
    { url: 'https://myapp.com/blog', lastModified: new Date() },
  ];
}

Fix 3: Enable SSR or SSG

Migrate from Vite SPA to Next.js, or enable SSR in your existing framework. For Next.js, SSR is the default. For Vite, you can add SSR via the vite-plugin-ssr plugin.

Fix 4: Add structured data

For a blog post: