pbs-projects/PBS/Tech/cloudflare-cache-woocommerce.md

72 lines
2.4 KiB
Markdown

---
project: cloudflare-cache-woocommerce
type: tech-setup
status: completed
tags:
- pbs
- cloudflare
- woocommerce
- cache
- production
created: 2026-03-24
updated: 2026-03-24
path: PBS/Tech/
---
# Cloudflare Cache Rules - WooCommerce Setup
## Background
After launching the WooCommerce store, a "coming soon" page was sticking around for visitors due to Cloudflare serving a cached version. The root cause was an aggressive "cache all" rule with no WooCommerce exceptions.
## What Was Already in Place
A cache rule set to **All incoming requests → Eligible for cache** was in place to improve cache hit rate (previously 87% of traffic was uncached).
## Problem
With a whole-site cache rule and no exceptions, Cloudflare was caching WooCommerce dynamic pages including:
- Cart
- Checkout
- My Account
- Pages tied to active shopping sessions
This caused stale content to be served to visitors, including the "coming soon" page after the store launched.
## Solution
Created a **new cache rule placed above the existing "cache all" rule** with the following configuration:
### Rule: WooCommerce Bypass
**Order:** First (runs before the cache all rule)
**Filter:** Custom expression
```
(http.request.uri.path contains "/cart") or
(http.request.uri.path contains "/checkout") or
(http.request.uri.path contains "/my-account") or
(http.cookie contains "woocommerce")
```
**Cache eligibility:** Bypass cache
**TTL settings:** None needed (bypass ignores TTL)
## How It Works
Cloudflare cache rules use **first match wins** logic:
- Rule 1 catches all WooCommerce pages and active shopping sessions → bypass cache
- Rule 2 catches everything else → cache it
This means static content (recipes, homepage, product images) still gets cached for performance, while dynamic shopping pages always serve fresh content.
## Key Decisions
- Used `http.cookie contains "woocommerce"` instead of listing individual cookie names — broader match covers all current and future WooCommerce cookies
- No browser TTL needed on the bypass rule — nothing is being stored
- Left the existing "cache all" rule unchanged — exceptions-first approach is cleaner than listing every page to cache
## Result
- WooCommerce cart, checkout, and account pages now always serve fresh content
- Rest of the site continues to benefit from Cloudflare caching
- No stale page issues for customers during active shopping sessions