Cả hai làm mới Data Cache trên server sau khi data đổi (thường gọi trong Server Action / Route Handler). Khác nhau ở đơn vị nhắm tới.
revalidatePath(path) — làm mới cache theo đường dẫn route.
ts
revalidatePath('/blog') // làm mới đúng trang /blog
revalidatePath('/blog/[slug]', 'page') // mọi trang khớp dynamic segmentDùng khi bạn biết rõ trang nào bị ảnh hưởng và nó tập trung ở một (vài) route.
revalidateTag(tag) — làm mới mọi fetch đã gắn tag đó, bất kể nằm ở route nào.
ts
await fetch(url, { next: { tags: ['products'] } })
// sau khi sửa sản phẩm:
revalidateTag('products', 'max') // Next 16 buộc có tham số 2; lượt sau vẫn nhận bản cũ rồi làm mới nền ({ expire: 0 } nếu cần hết hạn ngay)Dùng khi cùng một loại data xuất hiện ở nhiều route rải rác (list, detail, sidebar) — chỉ một lệnh là đồng bộ hết.
Quy tắc chọn: ảnh hưởng theo trang → revalidatePath; ảnh hưởng theo loại data dùng chung khắp nơi → revalidateTag. Lưu ý: cả hai invalidate cache nhưng không re-render ngay; trang sẽ regenerate ở request kế tiếp.