Bubble seo & core web vitals
★★★★★ 4.5 CE

Bubble SEO & Core Web Vitals 2026

Bubble auto-emits the SEO plumbing and makes each slug indexable, but the app is JS-rendered, so Google indexes it only after a deferred render.

Bubble SEO & Core Web Vitals verdict

Verified today·7 sources checked

Bubble can rank, but it is an app-SEO question, not a CMS.

Bubble auto-emits the SEO plumbing, robots.txt, an opt-in sitemap, canonicals, wildcard 301s, dynamic per-page meta and header JSON-LD, and each dynamic slug is its own indexable URL.

What it means for your rankings

Bubble suits public, content-style pages, marketing, dynamic listings and blogs, where you want SEO handled for you and dynamic slugs indexed. It is less ideal if you need guaranteed server-side rendering, a non-US region, or strong SEO on heavy logged-in app screens.

Honest limits
  • A Bubble app is client-rendered JavaScript, so Google indexes it only after a deferred render, and Bubble documents no server-side or pre-rendering.
  • The shared server environment is US-only, so a closer region needs a dedicated or Enterprise instance. Bubble also admits a base loading time on every page, and every installed plugin's code loads on every page.
  • SEO is relevant only for public pages you want found, so screens behind login are not the SEO surface, and the sitemap is opt-in per page.
Google + JS apps
Renders & indexes (deferred)
Dynamic pages
Each slug = its own URL
SEO controls
robots, sitemap, 301, JSON-LD
Rendering
Client-side (no SSR)
Shared region
US only
View sources

This page covers Bubble's SEO controls and page performance. Migration and pricing live on their own pages.

Can a site built here rank at all?

Technical SEO configuration in Bubble

Under Settings, SEO/Meta tags, the header field is injected between the <head> tags on every page of the app. Use it for organization-level structured data, verification tags and default meta. Schema.org JSON-LD can also be placed in a page's body via an HTML element.

Site-wide header tags (JSON-LD + meta)html
<!-- Settings > SEO/Meta tags > header: injected into <head> on every page -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "My Bubble App",
  "url": "https://www.my-app.com"
}
</script>
<meta name="theme-color" content="#0a0a0a">

Bubble automatically places a robots.txt in your app's root directory and lets you edit it. By default the development version of the app is not indexed. robots.txt is a request to crawlers, an SEO setting and not a security control, so do not rely on it to hide sensitive pages.

robots.txt (auto, editable)text
User-agent: *
Allow: /

# Bubble keeps the dev version (version-test) out of the index by default.
# Add your own rules for pages you do not want crawled:
Disallow: /admin

Sitemap: https://www.my-app.com/sitemap.xml

Bubble takes a before and after URL for permanent 301s. Enabling wildcards lets one rule match many URLs: %1, %2 placeholders capture path segments and are reused in the target, and query strings are copied automatically. Map old paths here so search engines and visitors follow you over.

Wildcard 301 redirectstext
# Settings > SEO/Meta tags > 301 redirects (check 'Allow wildcards')
# Before                After
/old-blog/%1            /blog/%1
/products/%1/%2         /shop/%2
/legacy-page           /about
# %1, %2 capture path segments; query strings are copied automatically.

Can a site built here rank at all?

  • Bubble itself frames SEO as conditional, not universal: it matters only for the public pages you want search traffic on, not for app screens behind login
  • Independently, Google documents that it does render JavaScript apps: it processes them in three phases, crawling, rendering and indexing, with a headless Chromium executing the JavaScript before indexing the rendered HTML
  • The catch Google names is exactly Bubble's architecture: when the initial HTML has no content, Google must execute JavaScript first, and that render is deferred on a queue, so content has to survive the render to be indexed
  • On Bubble's side, dynamic pages are first-class SEO citizens: one page plus a slug becomes many unique indexable URLs, each with its own content

How Google indexes a Bubble app

Googlebot behaviour (independent)What happensWhy it matters for BubbleSource
Processing modelCrawl -> render -> indexBubble pages are evaluated in three phases, not indexed straight from initial HTMLGoogle Search Central
JavaScript executionHeadless Chromium renders JSGoogle does run Bubble's client engine and indexes what it producesGoogle Search Central
Render timingDeferred on a queueIndexing of a Bubble page can lag; the page waits for rendering resourcesGoogle Search Central
Content visibilityMust be in rendered HTMLBubble draws content after JS runs, so it must survive the render to be indexedGoogle Search Central
Blocked pagesNot rendered, not indexedBubble's dev version is noindexed by default; keep public pages crawlableGoogle Search Central

What Google can see and control

SEO controlOn BubbleHow it worksSource
robots.txtAuto (editable)Bubble places robots.txt in the root automatically; dev version is not indexed by default
XML sitemapOpt-in (incl. dynamic)Expose a sitemap file and select pages; dynamic pages pull matching things from the database
Canonical tagsBuilt-in'Point URLs to primary domain for better SEO' enables a Bubble-defined canonical URL tag
301 redirects (wildcards)Built-inBefore/after URLs with wildcard placeholders (%1, %2); query strings auto-copied
Per-page meta (dynamic)Built-inPage title, SEO/OG title and description, social image; each can be static or populated from page data
Structured data (JSON-LD)Via header/bodyHeader accepts meta/structured-data/canonical/language tags injected on every page; Schema.org JSON-LD can sit in the body
Indexing hygiene (auto)HandledBubble's SEO audit auto-handles viewport, HTTP status, not-blocked-from-indexing, valid hreflang and rel=canonical

Bubble performance levers you control

LeverBubble behaviorEffect on speedSource
CDNCloudflare (auto)Static content (images, files, JS) cached worldwide; dynamic DB data is not cached
Server regionUS-only (shared)Shared environment is hosted in the US; a closer region needs a dedicated/Enterprise instance
Base load timeAdmittedBubble adds a baseline load on every page it is still optimizing; reduce page size and on-load work
PluginsLoad on every pageEvery installed plugin's code ships on each page load whether used or not; uninstall unused ones
CapacityWorkload unitsFree/Personal share 'Basic' capacity; over capacity the app is rate-limited and slowed

What to verify before you commit to Bubble

  • Bubble does not document server-side rendering or pre-rendering: pages render client-side, so indexing depends entirely on Google's deferred JavaScript render, which Google says can take longer than a few seconds
  • The shared server environment is US-only and cannot be moved; visitors far from the US wear the latency unless you pay for a dedicated or Enterprise instance located closer
  • Bubble admits a base loading time on every page and loads every installed plugin's code on every page, so an unoptimized app with many plugins can fail Core Web Vitals regardless of Google's render
  • The sitemap is opt-in per page rather than fully automatic: you check which pages to include, so a forgotten dynamic data type can be left out of the index

Bubble SEO & Core Web Vitals FAQ

Can a Bubble app rank on Google?

Yes, for its public pages. Google documents that it renders JavaScript apps with a headless Chromium and indexes the rendered HTML, and Bubble emits the technical-SEO surface: robots.txt, sitemap, canonicals, wildcard 301s, per-page meta and header JSON-LD. The caveat is that rendering is deferred on a queue, so content must survive the render, and Bubble documents no server-side rendering.

Does Bubble support server-side rendering for SEO?

Not in its documentation. A Bubble app's content is drawn client-side after its engine runs, so indexing relies on Google's deferred JavaScript render. There is no documented SSR or pre-rendering option, which is the main SEO risk for content that must be indexed quickly or reliably.

Are Bubble dynamic pages indexable?

Yes. Bubble treats each slug as its own page, so one dynamic page can become hundreds or thousands of unique indexable URLs, each with its own content. The sitemap can include dynamic data types, but it is opt-in, so you must check which pages and types to expose.

Where do I control SEO on Bubble?

App-wide settings live under Settings, SEO/Meta tags, covering robots.txt, header and body tags, canonical, 301 redirects with wildcards and sitemap exposure. Per-page settings, the page title, SEO and OG title and description, and social image, live in the element inspector of the page itself and can be populated dynamically from page data.

Why might a Bubble app be slow for SEO?

Bubble admits a base loading time on every page, every installed plugin's code loads on every page. Database reads always hit Bubble's server, with only static files cached on Cloudflare, and the shared environment is US-only. A heavy, plugin-laden app can fail Core Web Vitals regardless of Google's render.

Sources & verification

Verified by ComparEdgeMethod: Vendor docs, official pages, and selected independent sources
SourceWhat was checkedLast checked
Bubble OfficialOfficial product pageJuly 10, 2026
Bubble Hosting And Scaling How Bubble Hosting WorksHosting And Scaling How Bubble Hosting WorksJuly 10, 2026
Bubble Maintaining An Application Performance And ScaMaintaining An Application Performance And ScalingJuly 10, 2026
Bubble Maintaining An Application SeoMaintaining An Application SeoJuly 10, 2026
Bubble Seo Seo AppSeo Seo AppJuly 10, 2026
Bubble Seo Seo PageSeo Seo PageJuly 10, 2026
Google Javascript Javascript Seo BasicsIndependent referenceJuly 10, 2026

Every fact on this Bubble page is tied to a named source and a verification date. Freshness-sensitive figures trace to the sources above; verify against the vendor before relying on them.