ExampleCo pricing
Plans for teams of every size. Start free, and upgrade when you need more seats.
Your platformNext.js
Next.js gives you good bones. These are the changes we ship most on Next.js marketing sites, and the one problem that hides a page from AI.
Sep to Nov 2026Every change we shipped to Next.js sites in that time, sorted by kind.
Switch readers. Googlebot runs JavaScript, but it doesn’t click. OpenAI, Anthropic and Perplexity don’t say their crawlers run it, and published tests find GPTBot, ClaudeBot and PerplexityBot read only the HTML the server sends. So anything that only loads in the browser can be missing for them.
Plans for teams of every size. Start free, and upgrade when you need more seats.
Plans
Questions
Is there a free plan? Yes, for up to 3 people.
Can I cancel any time? Yes, from Settings.
The fix: render the plans and the FAQ answers on the server.See the fix
Share of the changes we shipped to Next.js sites
Retitle and rewrite a page around the question people search and ask AI, so it can be quoted.
An in-depth page for a question the site had no answer to.
AI repeats what your pages say. A wrong price or an old claim gets quoted back to buyers.
Links from pages Google already keeps to the pages that need the help.
Schema, canonical tags, sitemaps with real dates, redirects and broken links.
“Alternatives” and “vs” pages for the moment a buyer picks between you and a rival.
Calculators and generators people use, link to, and AI points to.
Near copies, leftover notes and claims nobody can back up.
Lighter pages that don’t jump around while they load.
One-off fixes that don’t fit a group.
From every change we shipped to Next.js sites, September to November 2026. Shares are rounded.
Fetch the plans and the answers in a server component, so they are in the HTML every reader gets. Put each answer in a details element: people click to open it, and crawlers read it either way.
This is the kind of change we ship to your site. We check it before it goes live.
app/pricing/page.tsx
// A server component: the plans and answers are in the HTML.
// Before, PlanCards fetched the plans in a useEffect,
// and each answer loaded when someone opened it.
import { getPlans, getFaq } from '@/lib/pricing'
import { PlanCards } from './plan-cards'
export default async function Pricing() {
const [plans, faq] = await Promise.all([getPlans(), getFaq()])
return (
<>
<PlanCards plans={plans} />
{faq.map((q) => (
<details key={q.id}>
<summary>{q.question}</summary>
<p>{q.answer}</p>
</details>
))}
</>
)
}
Give us access to your site or CMS. Real changes ship every day, and we check each one before it goes live.