Beta50+ teams already onboard

Your JS app is invisible to search.

Googlebot, ChatGPT, and Claude can't read client-rendered JavaScript. PerfectSearch pre-renders your pages so they can. One line of config.

Works with

Next.jsNuxtShopifyBase44LovableVercelNetlify
middleware.ts
import { perfectSearchMiddleware } from '@perfectsearch/middleware'

export const middleware = perfectSearchMiddleware({
  apiKey: process.env.PERFECTSEARCH_API_KEY!,
})

export const config = {
  matcher: ['/((?!_next|api).*)'],
}

Three lines in middleware.ts. Every bot request gets a fully rendered page.

The Problem

87% of your product pages may be invisible

JavaScript-rendered stores look great in browsers — but Googlebot and AI crawlers only see an empty <div>. They can't index what they can't read.

Without PerfectSearch — what Googlebot sees
<!-- What Googlebot receives -->
<!DOCTYPE html>
<html lang="en">
  <head>
    <title>My Store</title>
    <script src="/bundle.js" defer></script>
  </head>
  <body>
    <div id="root">
      <!-- empty — JS required to render -->
    </div>
    <script src="/chunk.abc123.js"></script>
    <script src="/vendor.xyz789.js"></script>
  </body>
</html>
With PerfectSearch — fully rendered HTML
<!-- What PerfectSearch serves bots -->
<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Merino Wool Sweater – $89 | My Store</title>
    <meta name="description" content="Premium merino wool,
      ethically sourced. Free shipping over $50." />
    <script type="application/ld+json">
      { "@type": "Product", "name": "Merino Wool Sweater",
        "offers": { "price": 89, "priceCurrency": "USD" } }
    </script>
  </head>
  <body>
    <h1>Merino Wool Sweater</h1>
    <p>Premium merino wool, ethically sourced.</p>
    <span itemprop="price">$89.00</span>
    <!-- Full product content — fully indexed -->
  </body>
</html>

0%

of JS storefronts have bot-visibility gaps

more organic traffic after fixing indexing

<0ms

snapshot serve time from cache

How It Works

Up and running in minutes

Two ways to connect. Either way, bots get a fully rendered page.

01

Install in one line

Add our middleware to your Next.js project, or point a CNAME at our edge. No code changes to your app.

Middleware path (Next.js, Nuxt)

import { perfectSearch } from '@perfectsearch/middleware'

DNS path (any framework)

CNAME mystore.com → mystore.edge.perfectline.io
02

We handle the rendering

PerfectSearch detects bot user-agents and serves pre-rendered HTML snapshots in milliseconds. Human traffic passes through untouched.

03

Watch GSC improve

Googlebot and AI crawlers read your full catalog. GSC coverage errors drop, indexed pages climb. Usually visible within days.

Pricing

Straightforward pricing

14-day free trial on all plans. No credit card required.

Starter

For indie makers and small stores just getting started.

$19 / mo
  • Up to 5,000 snapshots / mo
  • 1 site
  • HTML pre-rendering
  • GSC integration
  • Community support
Most Popular

Growth

For stores growing fast enough to care about uptime and AI crawler coverage.

$79 / mo
  • Up to 50,000 snapshots / mo
  • 5 sites
  • HTML + Markdown rendering
  • AI crawler support (ChatGPT, Claude)
  • Priority crawl queue
  • Slack alerts
  • Email support

Scale

For high-traffic storefronts that need a guaranteed uptime SLA.

$249 / mo
  • Unlimited snapshots
  • Unlimited sites
  • All rendering modes
  • 99.9% uptime SLA
  • Custom crawl schedules
  • Dedicated Slack channel
  • Priority support

Built for teams frustrated with Prerender.io pricing and cache staleness. See full plan comparison →

Free Tool

See what bots see on YOUR site

Enter any URL and we'll show you exactly what Googlebot and AI crawlers see — versus the full rendered version. Free, no signup required.