This guide helps store owners resolve problems with built-in shipping features in WooCommerce. Use the steps below to troubleshoot incorrect rates, missing methods, or unexpected checkout behavior.
What this guide covers
↑ Back to topThis guide focuses on issues with shipping options included in WooCommerce core:
- Flat Rate Shipping – Standard shipping rates per item, class, or order
- Free Shipping – No-cost shipping with optional conditions
- Local Pickup – Customer collection from your store
The guide also provides guidance on where to find support for other shipping plugins and more advanced configurations beyond the core functionality.
Important limitations
↑ Back to topNote:
The built-in WooCommerce shipping features do not include live rates or label printing.
- WooCommerce Shipping is a free extension that can be added to allow you to print USPS, UPS, and DHL labels right from your WooCommerce dashboard and save on shipping
- Live rates require advanced extensions such as USPS, UPS, or FedEx to display real-time rates at checkout
More advanced shipping extensions exist for complex scenarios and products. See the core shipping limitations section below.
Basic troubleshooting steps
↑ Back to topShipping problems typically fall into one of these categories:
- Missing or incorrect shipping rates
- Shipping methods not appearing at checkout
- Unexpected shipping costs
- Shipping zone not matching customer addresses
- Shipping tax not applied or incorrect
Use a staging store to check updates and configuration changes before applying them to your live store. Record the address, cart contents, and expected shipping method so you can repeat the same test after each change.
Step 1: Check if everything is up to date
↑ Back to topMake sure WordPress, WooCommerce, your current theme, and all extensions are using the latest versions. Updates often contain fixes for known issues.
How to check for updates:
- Navigate to Dashboard > Updates in your WordPress admin
- Check for available updates to WordPress core, themes, and plugins
- Update all components before proceeding with troubleshooting
Step 2: Verify basic shipping configuration
↑ Back to topShipping zones
- Go to WooCommerce > Settings > Shipping > Shipping zones
- Confirm the customer’s address matches one of the configured zones
- Make sure each relevant zone has at least one active shipping method
Shipping methods
- Within each zone, verify that the correct methods are enabled (for example: Flat Rate, Free Shipping, Local Pickup)
- Double-check any conditions applied to the method
- For Free Shipping, check if minimum order amounts or coupons are set correctly
Product shipping settings
- From the Product Editor, in the Product data panel, select the option to manage shipping settings
- Confirm that the product has a shipping class (if required by your setup)
- Verify the product type is not set to Virtual, as shipping would not apply to non-physical products
Step 3: Enable shipping debug mode
↑ Back to topWooCommerce includes a built-in debug mode for core shipping methods like Flat Rate, Free Shipping, and Local Pickup. It bypasses the shipping rate cache. On the classic Cart page, it also displays a notice naming the matched shipping zone. Do not rely on this notice appearing in the Cart or Checkout blocks, during AJAX updates, or on the classic Checkout page.
To enable shipping debug mode:
- Go to WooCommerce > Settings > Shipping > Shipping settings
- Select Enable debug mode
- Save changes
- Reload the classic Cart page with a shippable product and the test address entered. Check the matched-zone notice, then confirm the available methods at checkout.
Warning:
Remember to disable debug mode after testing, as it displays on the front-end to customers.
Step 4: Test with default WooCommerce configuration
↑ Back to topOn a staging store, compare the affected page with the standard WooCommerce Cart and Checkout pages. Follow the page setup guide to check the assigned pages, or the Cart and Checkout blocks guide to review the default blocks. If the expected rates appear with the default pages, investigate the custom page builder or checkout plugin.
Advanced troubleshooting steps
Below are tools and techniques to help troubleshoot more complex shipping problems. Use these methods to inspect shipping logic, identify theme or plugin conflicts, and catch hidden errors.
Use browser developer tools to review for JavaScript errors
↑ Back to topIf shipping options stop updating when the address or cart changes, follow the JavaScript troubleshooting guide to collect browser errors. Share the complete error and the steps that caused it with the plugin or theme developer. A developer can inspect checkout requests and make any necessary script changes.
Check for fatal errors
↑ Back to topWooCommerce features a logging system accessible in WP Admin via WooCommerce > Status > Logs, which records PHP fatal errors among other information.
This log serves as a valuable initial resource, mirroring details that would typically be found in PHP error logs on the server. We recommend you consult this log first before proceeding to locate the PHP logs on the server for further troubleshooting.
Learn more about finding PHP error logs.
Check for template overrides
↑ Back to topGo to WooCommerce > Status > System status and review Templates for outdated theme overrides. On a staging store, repeat the same cart and address test with a default theme. If the problem disappears, ask the theme developer to review the overrides using the template update guide. Avoid deleting or renaming theme files as part of a merchant troubleshooting test.
Check for conflicts on a staging or test site
↑ Back to topIf you suspect a conflict on your site, follow our conflict testing guide. This guide walks you through the safest way to identify whether a plugin, theme, or custom code is causing the issue, and best practices to consider before making any changes.
If the issue persists in a conflict test, collect the details listed under Getting help and support.
Use Blueprints to assist with troubleshooting
↑ Back to topNew in WooCommerce version 9.9: Blueprints is a tool for importing and exporting store settings. It helps developers, agencies, and merchants save time by reusing and sharing store configurations—making setup faster and troubleshooting easier.
Where to find Blueprints: You can find Blueprints under WooCommerce > Settings > Advanced > Blueprint. Use the admin interface to export and import the supported settings.
How to use Blueprints for troubleshooting:
With Blueprints, you can export your store settings – including Shipping settings – for troubleshooting.
If you’re still experiencing shipping issues after following the steps above:
- Export your settings using Blueprints
- Set up a staging site using a default theme like Storefront or Twenty Twenty-Five with WooCommerce active (and Blueprints enabled)
- Import the settings into the staging site using Blueprints
If the issue does not occur on the staging site, it may indicate a conflict on your live site rather than a problem with your WooCommerce settings
This process helps recreate your store’s environment for more accurate testing and troubleshooting.
Common issues and solutions
↑ Back to topWarning:
For any of the issues below, if the specified instructions do not help, then please make sure to go through the Basic Troubleshooting Steps and Advanced Troubleshooting Steps first.
No shipping options are available for this address
↑ Back to topThis is a common issue typically related to a misconfiguration in shipping zone settings, but theme or plugin conflicts can also cause this error (for example: a third-party plugin restricting shipping to some countries or regions).
Error message customers see: “No shipping options are available for this address. Please verify the address is correct or try a different address.”
To troubleshoot this issue:
- Check shipping zones: Ensure the customer’s shipping address matches a shipping zone. You can check your set shipping zones at WooCommerce > Settings > Shipping > Shipping zones
- Verify shipping methods: Once you have located your shipping zones and confirmed the customer’s address matches one of your zones, confirm that the matched shipping zone has at least one shipping method enabled
- Review zip code ranges: Check for overlapping or incomplete zip code ranges (especially with wildcards or spacing) on your shipping zones settings page
- Check product settings: In the product edit page, confirm the product is not marked as Virtual, and that weight, dimensions, and shipping class are added as these must match your shipping method condition (depends on shipping method used on your site)
- Enable debug mode: Follow the shipping debug mode steps to check the matched zone
Taxes are being charged on shipping
↑ Back to topIf you see taxes charged on shipping, but should not be, follow these steps to disable taxes on shipping:
- Go to WooCommerce > Settings > Shipping > Shipping zones > Edit the shipping method
- Confirm the method’s Tax status is set to None (if you don’t need taxes being collected for shipping rates)
Taxes not being charged on shipping
If taxes are not applying to shipping costs at checkout, it’s often due to a misconfiguration in your tax settings. Review this troubleshooting guide on shipping tax settings.
Flat rate shipping amount is incorrect or differs from the configured rate
↑ Back to topUnexpected flat rate shipping behavior is often caused by one or more configuration issues:
Check rate calculation settings:
- Verify if the rate should apply per item, per class, or per order
- Use
[qty]to multiply cost per item - Use
[fee]for percentage-based fees - See examples on how to use the formulas for advanced flat rate shipping costs
Review shipping class configuration:
- Make sure the Shipping class cost is defined in the shipping method settings
- Confirm the product is assigned to the correct shipping class
- If using class costs plus base cost, ensure calculation type is set appropriately
- If behavior is inconsistent, try testing with just one product in the cart to narrow down the cause
Free shipping not hiding other methods or not displaying correctly
↑ Back to topBy default, Free shipping appears alongside the other available methods. In WooCommerce 9.9 and later, go to WooCommerce > Settings > Shipping > Shipping settings and enable Hide shipping rates when free shipping is available. Save changes and test a cart that qualifies for free shipping. Other delivery rates should disappear; Local pickup remains available.
On an older WooCommerce version, review the guide to hiding other shipping methods.
Free Shipping option is missing or displaying under incorrect conditions
↑ Back to topMake sure to review the following if Free shipping is missing at checkout or isn’t showing up when the cart meets configured conditions:
- Verify Shipping zones: Ensure the customer’s shipping address matches a configured zone and confirm that the relevant shipping zone includes the correct regions
- Confirm Free shipping method configuration: Confirm Free shipping method is added and check the intended “Free Shipping Requires” dropdown option is selected
- Check the cart conditions: Confirm the minimum amount, coupon requirements, and whether coupon discounts count toward the minimum. Core Free shipping does not exclude products by shipping class; if you use a plugin for exclusions, check its rules separately.
Wrong shipping rate for customer’s location
↑ Back to topReview the following settings if the shipping rate shown at checkout doesn’t match the rate you configured for the customer’s location:
- Verify customer address: Verify that the customer’s full shipping address is entered on the checkout page, including country/state/city/postcode
- Check store address: Ensure that the store address is entered at WooCommerce > Settings > General
- Check the matched zone: Follow the shipping debug mode steps to check the classic Cart notice, then verify the methods at checkout.
- Review zone configuration: Check for overlapping postcode ranges or zone order warnings under WooCommerce > Settings > Shipping > Shipping zones
- Verify location codes: Select the intended countries and states from the zone’s region selector. Do not assume every state identifier has two letters.
- Test plugin conflicts: If a plugin adjusts shipping dynamically (for example: Conditional Shipping & Payments), test logic rules by deactivating the plugin and then checking if the behavior persists
Shipping costs aren’t updating in cart or checkout
If shipping rates don’t reflect changes to products, addresses, or quantities, check the following:
Check shipping zone configuration
Go to WooCommerce > Settings > Shipping > Shipping zones and confirm that the customer’s address matches a defined zone with at least one active shipping method.
Clear browser and site cache
Caching plugins or server-side caching can block live rate updates from appearing correctly. To fix this:
- Clear your browser cache
- Clear your site cache
- If you’re using a caching plugin or your hosting provider offers caching, make sure the following pages are excluded from caching:
- Cart
- Checkout
- My Account
After you clear your site and browser caches and update any shipping method exclusions, reload your site and complete a test checkout to confirm that the correct shipping rates appear.
Check cart updates
On the classic Cart page, select Update cart after changing quantities. The Cart block updates automatically. If rates still do not update, repeat the staging conflict test and collect any browser errors.
General shipping class misconfiguration
↑ Back to topThis section outlines common misconfigurations related to shipping classes and provides steps to resolve them.
Shipping class cost not applied to shipping cost
This can happen when shipping class and their rates are left empty or not configured correctly. Check the following:
- Product class assignment: In the Product data panel, select the option to manage shipping settings. Ensure each product is assigned to the correct class
- Method class rates: Confirm that class-specific rates are defined in the Flat Rate method settings, under the relevant “Shipping class costs” options
Shipping cost always shows $0
If your Flat Rate shipping method is enabled but the cost is returning $0, please review the following:
- Set base costs: Make sure to set at least a base cost or a Shipping class costs
- Configure calculation type: Set the Calculation Type for the shipping class to either “Per class” or “Per order,” depending on how you want shipping costs calculated. This setting directly affects how rates are applied at checkout
Shipping not calculated until customer enters address
↑ Back to topIf the shipping costs are not calculated until the customer enters their shipping address, you can review the following:
- Check calculation settings: In WooCommerce > Settings > Shipping > Shipping settings > Calculations, ensure the “Hide shipping costs until an address is entered” box is unchecked
- Verify geolocation setup: If you’re using Geolocate, please ensure a proper license key for MaxMind Geolocation is entered in the integration tab under WooCommerce > Settings > Integration > MaxMind Geolocation
Shipping classes not applying correctly
↑ Back to topShipping classes define cost rules for methods like Flat Rate shipping. If items with specific classes aren’t showing the correct charges at checkout, review the following settings for possible misconfigurations:
Confirm the product has the correct class assigned: In the Product data panel, select the option to manage shipping settings. Make sure the correct Shipping Class is selected and saved. For variable products, check each variation’s settings individually.
Check the shipping method settings in the correct zone: Go to WooCommerce > Settings > Shipping > Shipping zones. Select the zone your customer falls into and open the Flat Rate (or other applicable) method. Ensure you’ve entered a cost for the relevant shipping class under “Shipping Class Costs.”
Check Calculation type: Per class: Charge shipping for each shipping class individually adds each applicable class cost and is the default for a new Flat rate method. Per order: Charge shipping for the most expensive shipping class adds only the highest applicable class cost. Both are added to the base cost. Review shipping class costs and select the calculation that matches your intended rate.
Additional reference information
↑ Back to topShortcode vs block checkout
↑ Back to topIdentify whether your store uses the classic checkout or the Checkout block. Extension compatibility and troubleshooting steps can differ. Use the WooCommerce page setup guide to review the assigned pages, then repeat the address and cart test with the checkout type your customers use.
Local pickup showing twice on checkout
↑ Back to topIf you’re seeing duplicate pickup options at checkout, it’s likely because the legacy local pickup method was added to a shipping zone before you enabled the block-based Local Pickup option in WooCommerce > Settings > Shipping > Local pickup (you will not see this option if you are not using the Checkout block). This means you have both local pickup options enabled at once.
Warning:
Do not use both pickup options at the same time, as it may confuse customers. A notice will appear on the Local Pickup settings page if both options are active.
Solution: If you’re using a block-based checkout, remove the legacy Local Pickup method from your shipping zones in WooCommerce > Settings > Shipping. The new Local Pickup option for block-based checkout doesn’t need to be added to a shipping zone—it’s managed separately in the Local Pickup settings page at WooCommerce > Settings > Shipping > Local Pickup.
How customers are matched to shipping zones
↑ Back to topWooCommerce matches customers to the first zone that fits their shipping address. If the wrong methods appear, check the zone order as well as the methods and their conditions in the matched zone.
Best practice: To show the right options at checkout, list zones from most specific to broadest—like City, then State, then Country. Learn more about sorting shipping zones.
Zone order warnings on the shipping zones list
↑ Back to topWooCommerce 11.1 and later flags a zone that can never be matched. Go to WooCommerce > Settings > Shipping and look at the zones list. If an earlier zone already covers the same region, WooCommerce shows a warning beside the zone that will be skipped. Both references to a zone name in the warning identify that earlier zone:
This zone will not be matched because “Europe” covers the same region earlier in the list. Move this zone above “Europe” to make it available.
WooCommerce uses the first zone in the list that matches the customer’s address, so the narrower zone has to sit above the broader one. To clear the warning:
- Note the zone name in the warning. That is the zone matching first.
- Drag the flagged zone above the named zone using the handle at the start of its row.
- Select Save changes.
- On a staging store, add a physical product to the cart and enter an address in the overlapping region at checkout. Confirm the expected shipping methods and rate appear before placing an order.
The warning disappears once the flagged zone sits above the zone that was covering it. If several zones overlap, repeat the check until the list runs from most specific to least specific.
Warning:
No warning does not mean no overlap. WooCommerce compares only continent, country, and state coverage when it looks for a shadowed zone. It shows no warning if the earlier zone uses postcodes, or if either zone uses a location type the check does not cover. If a customer still gets the wrong rate, check the zone order yourself instead of treating a clean list as confirmation.
Update shipping method name
↑ Back to topThe title set on a shipping method added to a shipping zone is what is displayed to customers during the checkout process. You can change the shipping method title easily by editing the shipping method added to the shipping zone.
Third-party cart/checkout modules
↑ Back to topTo ensure compatibility with WooCommerce core features, use the default page editor and the core WooCommerce cart and checkout shortcodes or blocks.
If you’re using a third-party theme, builder, or plugin for your cart or checkout pages and you’re troubleshooting shipping issues, switch to the default WooCommerce setup to isolate the cause. Use the default page editor along with the core WooCommerce cart and checkout shortcodes or blocks.
This helps determine whether the issue is related to your custom setup or WooCommerce itself.
Virtual products won’t trigger shipping
↑ Back to topVirtual products do not require shipping. A cart containing only virtual products does not display shipping options; a mixed cart still requires shipping for its physical products.
To set a product as virtual: Edit the product, then select the Virtual checkbox.
Shipping tax defaults to the standard rate
↑ Back to topThe shipping tax is based on cart items or the Standard tax rate. If taxes are not applied to shipping costs at checkout, it’s often due to a misconfiguration in your tax settings. Review this troubleshooting guide on shipping tax settings.
Shipping is not available even when adding weight or dimension
↑ Back to topCore Flat rate, Free shipping, and Local pickup do not calculate rates from product weight or dimensions. Review the matched zone and the method’s conditions. Carrier rate extensions may require weight and dimensions to return a quote.
Rest of the world shipping zone
↑ Back to topWooCommerce applies the “Rest of the World” zone when a customer’s address doesn’t match any other defined shipping zone. You cannot move, rename, or delete this zone.
Specific zip code considerations
↑ Back to topFor specific cases: Like Northern Ireland, you can separate Northern Ireland from the UK using an extension like Shipping Locations Pro.
Setting up postal code zones: You can also set up a new shipping zone based on postal codes with wildcards (*).
How to use zip/postcodes to limit a shipping zone: A local shipping zone can include one or multiple (one per line) of the following: specific postcodes, numeric ranges (for example: 90210…99000), and postcodes with wildcards(*).
Using wildcards: A wildcard can be used to capture all postcodes that share the same beginning, so it is the recommended option for postcodes with non-numeric characters.
Examples:
902*would capture 90210 and also 90288-1234CB23*would capture CB23 1EXCB2*would capture CB2 3AA and CB23 1EX
Note:
Using wildcards in numeric ranges (for example: 902*…990*) is not supported.
Core shipping limitations and alternatives
↑ Back to topThe following options are built into WooCommerce and cover the most common shipping needs for many stores:
Flat Rate Shipping
Allows you to define a standard shipping rate per item, per shipping class, or per order.
Free Shipping
Allows you to add a “free shipping” option for customer orders if they either meet certain criteria (for example: a minimum order spend amount) or if you want to offer free shipping to all customers within a certain geographical area.
Local Pickup (legacy)
Allows you to offer customers the option to collect their purchases directly from your store. Customers must enter an address and must be matched to a shipping zone with this shipping method added to see this shipping option, and taxes are calculated based on the store location.
WooCommerce Blocks: Local Pickup
Allows you to offer one or more pickup locations during checkout using the WooCommerce Checkout block. Customers can select a pickup location without entering a shipping address, and taxes are calculated based on the selected pickup location.
Warning:
WooCommerce core shipping does not offer the option to display live shipping rates at checkout and also does not offer a way to print labels for order fulfillment. Recommendations for these can be found below.
Shipping labels
↑ Back to topThe below solutions enable you to generate and print shipping labels directly from your WooCommerce dashboard or through integrated platforms:
WooCommerce Shipping
Allows you to print discounted USPS, UPS, and DHL labels directly from your WooCommerce dashboard.
ShipStation
Allows you to connect your WooCommerce store to ShipStation for streamlined order fulfillment, including batch label printing, shipping automation, and discounted rates.
Stamps.com
Allows you to generate and print USPS shipping labels directly from your WooCommerce dashboard using your Stamps.com account.
When to use ShipStation over WooCommerce Shipping: WooCommerce Shipping works well for most small to medium-sized stores with moderate shipping needs. Choose ShipStation if you manage high order volumes, wish to print labels in bulk, sell on multiple channels, or require shipping automation.
Live rates
↑ Back to topThese extensions offer carrier shipping rates at checkout. Some fetch rates from a carrier API; others calculate them from published price guides. This is not an exhaustive list. Please check our marketplace for more shipping extensions available on WooCommerce.com
Available carrier rate extensions:
- UPS® Shipping Method – offers UPS live rates at checkout
- USPS Shipping Method – offers USPS live rates at checkout
- FedEx Shipping Method – offers FedEx API rates for domestic and international shipments from US- or Canada-based stores using USD or CAD
- Royal Mail Shipping Method – calculates rates from Royal Mail price guides without an API connection, for UK-based stores using GBP
General tips for troubleshooting API shipping rates
Follow these troubleshooting steps to identify and fix common issues that prevent live shipping rates from appearing at checkout:
- Enable plugin-specific debug/logging tools – Follow the documentation for your shipping extension to enable its own logging tools
- Ensure products have complete weight and dimension data
- Validate API credentials – Incorrect credentials are a common cause of issues when using live rate shipping extensions that rely on an API. These problems often relate to authorization or authentication errors. One example of this can be found in the UPS troubleshooting guide
- Verify shipping origin ZIP code in the plugin’s settings
For more complex shipping logic
↑ Back to topThese advanced plugins let you customize shipping rules and rates to accommodate unique business requirements or specialized shipping scenarios:
Conditional Shipping & Payments
Allows you to conditionally enable or disable the shipping methods (and payment methods) based on factors like cart contents, customer roles, or shipping destinations.
Table Rate Shipping
A highly flexible shipping solution that allows you to set up multiple table rates per shipping zone. It allows you to define multiple shipping rates based on factors like destination, weight, item count, price, or shipping class.
Per Product Shipping
Allows you to define individual shipping costs for specific products, which can be combined with other shipping methods or used as a standalone option.
Distance Rate Shipping
Allows you to calculate shipping rates based on the distance or travel time between your store and the customer’s address, using Google Maps Distance Matrix API.
Other helpful plugins
↑ Back to topThis section highlights additional plugins that can enhance your shipping workflow:
Shipment Tracking
Allows you to add shipment tracking information to WooCommerce orders, enabling customers to track their packages via emails, the order tracking page, and their account dashboard.
Getting help and support
↑ Back to topIf you still need help, collect the following information for the support channel listed under Questions and support. For a shipping extension, contact its developer or use the support included with your subscription.
Required information for support requests:
- Details of the issue you’re facing
- Clear reproduction steps (including the shipping address you are testing with)
- Troubleshooting steps you’ve taken already
- Any error messages from your browser console or PHP error Logs
- A copy of your WooCommerce System Status Report
- Blueprint of your WooCommerce settings or a Staging site
Screenshots to include:
- Cart and checkout pages to display the issue
- Shipping settings, including your shipping zones and shipping methods
- Affected product edit page displaying the shipping configuration
Questions and support
↑ Back to topDo you still have questions and need assistance?
This documentation is about the free, core WooCommerce plugin, for which support is provided in our community forums on WordPress.org. By searching this forum, you’ll often find that your question has been asked and answered before.
If you haven’t created a WordPress.org account to use the forums, here’s how.
- If you’re looking to extend the core functionality shown here, we recommend reviewing available extensions in the WooCommerce Marketplace.
- Need ongoing advanced support or a customization built for WooCommerce? Hire a Woo Agency Partner.
- Are you a developer building your own WooCommerce integration or extension? Check our Developer Resources.
If you weren’t able to find the information you need, please use the feedback thumbs below to let us know.
If you experience accessibility issues with this page, please contact WooCommerce Support.