Cloudflare Pages SEO

Your Cloudflare Pages App Is Invisible to Google

Cloudflare Pages is fast, free, and easy to deploy to. But if your app is a client-side rendered SPA -- React, Vue, Svelte, or anything that renders in the browser -- Google sees an empty HTML shell when it crawls your site. No content, no meta tags, nothing useful to index.

Your app works perfectly for humans. But search engines need the rendered HTML, and Cloudflare Pages does not provide server-side rendering out of the box.

What RndrKit Does

RndrKit sits in front of your Cloudflare Pages app and handles bot traffic. When Googlebot or any other crawler visits, RndrKit renders the page with a headless browser and returns the fully rendered HTML. Human visitors are proxied directly to your Cloudflare Pages app -- no change to their experience.

Setup

Step 1: Find Your Cloudflare Pages URL

Every Cloudflare Pages project has a default URL:

your-project.pages.dev

Find this in the Cloudflare dashboard under Workers & Pages > your project. This is your origin URL.

Step 2: Remove Your Custom Domain from Cloudflare Pages

This must happen before you change DNS. If your custom domain is still configured in Cloudflare Pages, it will conflict with RndrKit.

  1. Go to the Cloudflare dashboard.
  2. Navigate to Workers & Pages and select your project.
  3. Go to Custom domains.
  4. Remove your custom domain (e.g., www.example.com).
  5. Keep the default *.pages.dev URL as your origin.

Step 3: Sign Up for RndrKit

Create your account at rndrkit.io.

Step 4: Add Your Domain

Click Add Domain in the RndrKit dashboard:

FieldExampleDescription
Your Domainexample.comThe domain your visitors use
Origin URLyour-project.pages.devYour Cloudflare Pages default URL

Step 5: Configure DNS

Since your domain is likely already on Cloudflare, add the records right in the Cloudflare DNS dashboard. Cloudflare supports CNAME at the apex (CNAME flattening), so you can point both www and @ to rndrkit.io.

TypeNameValueProxy Status
CNAMEwwwrndrkit.ioDNS only
CNAME@rndrkit.ioDNS only

Important: The proxy status must be DNS only (gray cloud icon). RndrKit needs to receive traffic directly to run bot detection — if Cloudflare proxies (orange cloud), it will intercept responses and break rendering.

See DNS Configuration for more details.

Step 6: Verify

In the RndrKit dashboard, open your domain and click Verify DNS. DNS typically resolves within a few minutes (up to 48 hours for full propagation). RndrKit provisions SSL automatically — usually within a few minutes after DNS is verified. SSL status is shown on the Settings tab.

Then test from the command line:

# Bot request -- should return fully rendered HTML
curl -s -A "Googlebot/2.1" "https://www.example.com/" | head -50

# Human request -- should return your SPA shell
curl -s "https://www.example.com/" | head -50

Platform-Specific Notes

Remove Custom Domain from Pages First

If your custom domain is still attached to your Cloudflare Pages project, Cloudflare will route traffic directly to Pages and bypass RndrKit entirely. You must remove it from the Pages custom domains before updating DNS.

Always Use Gray Cloud (DNS Only)

The CNAME records must stay set to DNS only (gray cloud). RndrKit needs to receive traffic directly so it can inspect the request and decide whether to serve pre-rendered HTML (for bots) or proxy to your origin (for humans). If Cloudflare proxies the traffic (orange cloud), it caches responses at its own edge and bypasses RndrKit's bot detection.

Cloudflare Workers and Functions

If you use Cloudflare Workers or Pages Functions for server-side logic, those will continue to run on your *.pages.dev origin. RndrKit proxies human traffic to your origin unchanged, so your backend logic stays intact.

Already Using Cloudflare DNS?

If your domain's nameservers are already on Cloudflare (which is common), the DNS change is easy -- just edit the CNAME record right in the Cloudflare dashboard. No nameserver changes needed.

SEO Quick Wins

Once RndrKit is serving rendered HTML to bots, make sure your app includes:

  • Title tags on every page -- unique and descriptive
  • Meta descriptions for each page
  • Open Graph tags for social media previews
  • Canonical URLs pointing to your custom domain, not pages.dev
  • Structured data (JSON-LD) where appropriate

Verify It Works

curl -s -A "Googlebot/2.1" "https://www.example.com/" | head -100

You should see your page content in the HTML. If you see an empty shell, double-check that the custom domain was removed from Cloudflare Pages and that the CNAME is set to DNS only.

See troubleshooting if you run into issues.

Next Steps

  • Analytics -- See which bots are crawling your site
  • Cache Warming -- Pre-render important pages ahead of time
  • SEO Audit -- Identify SEO issues on your pages
  • Sitemaps -- Submit a sitemap to search engines

Outgrew Cloudflare Pages?

If you've hit the ceiling — export controls, pricing, flexibility — RndrKit comes with you. Point us at your new origin, your SEO doesn't miss a beat.

See the migration guide →