The cart and checkout show Tax: $0.00, or no tax line at all, even though you set up tax rates. Or tax shows for some customers and not others, or only after the address is typed in full. Every order placed like this is one you owe the tax on yourself. WooCommerce adds tax only when taxes are switched on, the product is taxable, and a rate row matches the address it is told to use. Below is a rebuilt example (not a real client), the two checks that find which of those failed, and the fix for each one.
Go to WooCommerce > Settings > General and make sure Enable tax rates and calculations is ticked; without it the Tax tab does not even appear. Then open WooCommerce > Settings > Tax and note two settings: Calculate tax based on (customer shipping address, billing address, or shop base address) and Display prices during cart and checkout. If an automated tax service (WooCommerce Tax, TaxJar, Avalara) is switched on, it replaces your rate tables, so its own connection status matters more than the rows.
Open one product that showed no tax and look at Product data > General: Tax status should be Taxable and note its Tax class (Standard, Reduced rate, Zero rate or your own). Then open that class's table under the Tax tab and compare its rows with a real customer address: country code, state code, ZIP or postcode, city. Check one with a real order: in a private window, add that product and enter the address in full at checkout. Note whether tax appears before or after you type the ZIP.
| What you see | Cause | Fix |
|---|---|---|
| No Tax tab, or Enable tax rates is unticked | Taxes are off for the whole store | Tick it in Settings > General and save, then set up the rates |
| The Standard rates table is empty, or the rates are in a different class | No row exists for the class the products use | Add the rows to the class your products are in, or set the products to the class that has rows |
| One product, or all variations of it, show no tax | Tax status is None or Shipping only, or the variation's class is set to Zero rate (variations can override the parent) | Set Tax status to Taxable; for variations set Tax class to Same as parent; bulk edit fixes many at once |
| Rows exist but nothing matches | The state is typed as a name instead of a code (California instead of CA), the country code is wrong, ZIPs are in one field without the ; separator, or a city row restricts it | Use two-letter codes, separate ZIPs with ; or use ranges like 90001...90899 and wildcards like 902*; leave City blank unless you need it |
| Tax is right on shipping orders but zero on local pickup or virtual products | Calculate tax based on is the shipping address, and those orders have none | Set it to billing address, or set the pickup location's address; WooCommerce uses the shop base address for pickup only when told to |
| Tax shows only after the full address is typed | Normal: WooCommerce cannot match a ZIP row until it has the ZIP. A cart estimate uses the shop base address or none | Set Default customer location to Shop base address or Geolocate so the cart shows an estimate |
| An automated tax service is on and tax is zero | The service is disconnected, the store address is not one it supports, or the nexus/state is not registered in it | Reconnect it, check its supported countries and add the states where you collect tax; switch it off to fall back to your own table |
| Tax is missing from shipping cost only | The rate row's Shipping box is unticked, or Shipping tax class is set to a class with no rows | Tick Shipping on the rows that should tax it, or set Shipping tax class to "based on cart items" |
| You see tax, customers do not | A page cache serves an old checkout, or the customer is a tax-exempt role (some B2B plugins zero it) | Exclude Cart and Checkout from every cache and purge; check the customer's role and any exemption plugin |
In a private window, add a taxable product, go to checkout and enter a full address in each state or country you collect tax for. The tax line should match the rate you set. Then place one real order and open it in WooCommerce > Orders: the tax line must be on the order itself, not only on the checkout screen. Orders already placed without tax are not fixed by this; they stay as they were.
* rate for every country to make a number appear. You will charge tax to customers you should not, which is harder to undo than missing it.Which rate you must charge, and where, is a question for your accountant; this page only gets WooCommerce to apply the rates you give it. If you would rather someone else finds and fixes the setup, that is what the box below is for. Related: WooCommerce checkout not working and WooCommerce "No shipping options were found".