Cache
Regras que detectam padrões que impedem o cache eficaz na Vercel.
Essas regras identificam padrões que contornam o cache de CDN e ISR da Vercel, forçando renderização server-side desnecessária e aumentando custos de computação.
Comportamento por versão
Os diagnósticos de cache adaptam-se à versão major detectada do Next.js:
- Next.js 15: os avisos enfatizam que
fetche handlers GET não são armazenados em cache por predefinição. - Next.js 16+: os avisos priorizam a orientação sobre Cache Components (
"use cache", tags de cache, revalidação direcionada). - Outras/versões desconhecidas: os avisos usam orientação agnóstica ao framework sobre políticas de cache.
nextjs-no-side-effect-in-get-handler
vercel-doctor/nextjs-no-side-effect-in-get-handlerDetecta handlers de rota GET que contêm efeitos colaterais (mutação de cookies, headers ou chamadas a banco de dados) ou estão em segmentos de rota mutantes como /logout, /signout, /delete, etc.
Por que importa: Requisições GET podem ser acionadas por prefetch e são vulneráveis a CSRF. Efeitos colaterais em handlers GET também impedem o cache.
// app/api/logout/route.ts
export async function GET() {
cookies().delete("session");
return Response.json({ ok: true });
}// app/api/logout/route.ts
export async function POST() {
cookies().delete("session");
return Response.json({ ok: true });
}Segmentos de rota mutantes detectados: logout, log-out, signout, sign-out, unsubscribe, delete, remove, revoke, cancel, deactivate.
vercel-no-force-dynamic
vercel-doctor/vercel-no-force-dynamicDetecta páginas com export const dynamic = "force-dynamic".
Por que importa: force-dynamic força renderização server-side em cada requisição, contornando completamente o cache de página inteira.
export const dynamic = "force-dynamic";
export default function Page() { ... }export const revalidate = 3600;
export default function Page() { ... }vercel-no-no-store-fetch
vercel-doctor/vercel-no-no-store-fetchDetecta chamadas fetch com cache: "no-store" ou revalidate: 0.
Por que importa: Essas opções desabilitam o cache completamente, aumentando largura de banda não cacheada e custos de computação em cada requisição.
const data = await fetch(url, { cache: "no-store" });const data = await fetch(url, {
next: { revalidate: 3600 },
});vercel-missing-cache-policy
vercel-doctor/vercel-missing-cache-policyDetecta handlers de rota GET sem nenhuma configuração explícita de cache — sem headers Cache-Control, sem export revalidate e sem export dynamic.
Por que importa: Sem uma política de cache explícita, as respostas podem perder oportunidades de cache no CDN, causando acessos repetidos à origem.
export async function GET() {
const data = await fetchData();
return Response.json(data);
}export const revalidate = 3600;
export async function GET() {
const data = await fetchData();
return Response.json(data);
}vercel-prefer-get-static-props
vercel-doctor/vercel-prefer-get-static-propsDetecta rotas do Pages Router que usam getServerSideProps.
Por que importa: getServerSideProps roda em toda requisição. Mudar para getStaticProps (com ISR opcional) faz cache das páginas no CDN e reduz computação no servidor.
vercel-get-static-props-consider-isr
vercel-doctor/vercel-get-static-props-consider-isrDetecta getStaticProps sem valor de retorno revalidate.
Por que importa: Sem revalidate, todas as páginas são construídas no deploy. Em sites grandes isso desacelera as builds drasticamente. O ISR gera páginas sob demanda e as coloca em cache.
export async function getStaticProps() {
const data = await fetchData();
return {
props: { data },
revalidate: 3600,
};
}Last updated on