View Categories

Make URL Coupons Work for Guests and Cached Sites

If a URL coupon works for logged-in users but not for guests, or fails on a heavily cached store, the fix is almost always in how the session and data storage are configured in Coupons & Add to Cart by URL Links for WooCommerce. This article walks through the free settings that make coupon links reliable for everyone. Every option here is free.

Symptom #

  • A coupon link applies the discount when you are logged in, but does nothing for a guest (not logged in) visitor.
  • The coupon works on a staging site but not on the live, cached site.
  • The discount briefly appears, then the cart looks empty again (common with page caching plugins).

Cause #

Applying a coupon needs a WooCommerce session. Guests do not always have one started yet, and full-page caching can serve a cached copy of the page before the session is created, so the coupon never gets a chance to apply. The plugin has several options that force a session early and change where coupon data is stored, which together solve this.

Fix: work through these settings in order #

All of these are on the Advanced and General sub-tabs at WPFactory > Coupons by URL (also reachable at WooCommerce > Settings > URL Coupons). Change one at a time and re-test as a guest in a private browser window.

  1. Keep Force session start on. On the General sub-tab, Session > Force session start when a URL with the coupon key is accessed is on by default. It starts a guest session as soon as a coupon link is opened. Leave it enabled.
  2. Turn on the earlier session start. If guests still miss the coupon, tick Force session start earlier and everywhere. This starts the session sooner in the page load, which helps on cached sites.
  3. Switch the main hook. On the Advanced sub-tab, change Main hook > Hook from WP Loaded to Init (or back), then re-test. Different themes and hosts fire these at slightly different times.
  4. Store data in a cookie. On the Advanced sub-tab, set Data storage type to Cookie. Cookies survive page caching better than sessions on some hosts.
  5. Enable Javascript reload. Also on Advanced, tick Javascript reload. It reloads the page once via Javascript when a coupon is detected in the URL, so a cached first response does not block the coupon. This works best with Data storage type set to Cookie.
  6. If you use WP Rocket, tick WP Rocket: Disable empty cart caching to stop an empty-cart page being cached and served after the coupon is applied.

Options reference #

Label Option ID Default Free/Pro
Force session start alg_wc_url_coupons_force_start_session Yes Free
Force session start earlier and everywhere alg_wc_url_coupons_force_start_session_earlier No Free
Main hook alg_wc_url_coupons_main_hook wp_loaded Free
Data storage type alg_wc_url_coupons_data_storage_type session Free
Javascript reload alg_wc_url_coupons_javascript_reload No Free
WP Rocket: disable empty cart caching alg_wc_url_coupons_wp_rocket_disable_cache_wc_empty_cart No Free

Still not applying? #

  • Test as a true guest in a private or incognito window. A logged-in admin session can hide the guest-only problem.
  • Exclude the cart, checkout, and any coupon landing page from full-page caching in your caching plugin.
  • If the coupon should apply only after a product is added, that is the Delay coupon feature, not a bug. See the guide on delaying a URL coupon.

Need a hand? #

If coupons still will not apply for guests after these steps, our team answers every ticket on the URL Coupons support forum. Tell us your caching setup and host so we can point you to the right combination.