Vì còn một tầng nữa: Router Cache nằm ở phía client, trong bộ nhớ trình duyệt. revalidateTag chỉ dọn cache phía server.
App Router có bốn tầng, cần phân biệt rõ khi debug:
1. Request Memoization — trong một lượt render, dedupe fetch trùng nhau.
2. Data Cache — kết quả fetch lưu trên server, sống xuyên request và xuyên deploy. Vô hiệu bằng cache: 'no-store', next: { revalidate }, revalidateTag, revalidatePath.
3. Full Route Cache — HTML/RSC payload của route static lưu trên server. Bị dọn theo khi Data Cache của route đó bị revalidate, hoặc khi route thành dynamic.
4. Router Cache — payload RSC của các segment đã ghé, lưu trong bộ nhớ tab hiện tại. Điều hướng bằng <Link> và nút Back đọc từ đây; hết khi reload trang.
Cách đồng bộ tầng 4:
- Gọi revalidatePath/revalidateTag bên trong Server Action — action trả về sẽ kèm chỉ thị làm mới router cache cho phiên đó.
- Hoặc router.refresh() từ client sau khi mutate.
- Điều chỉnh thời gian giữ bằng experimental.staleTimes trong next.config.
Lưu ý: nếu mutate qua Route Handler thay vì Server Action thì client không nhận được chỉ thị đó — phải tự gọi router.refresh().