80% off for waitlist membersGet 20+ WooCommerce plugins — Launch from $39.80 or Lifetime from $49.80 

← Back to Guides

WooCommerce Table Rate Shipping: The Complete Setup Guide

WPBundle Team··10
WooCommerce table rate shippingweight based shipping WooCommerceWooCommerce shipping by weight
Table rate shipping lets you charge accurate shipping costs based on weight, cart total, item count, or destination — eliminating the margin erosion that comes with flat rate shipping on heavy or bulky items.

Why Flat Rate Shipping Is Costing You Money

Flat rate shipping is the default choice for most WooCommerce stores because it's simple. Set it to $7.95 and forget about it. But simplicity has a cost: you're subsidizing heavy shipments with margin from lightweight ones, and you're overcharging customers who order small items.

Consider a store that sells both phone cases ($3 to ship) and cast iron skillets ($15 to ship). At a $7.95 flat rate, you're losing $7 on every skillet and making $5 extra on every phone case. If your product mix isn't perfectly balanced, one side of that equation is eating your profit.

Table rate shipping solves this by letting you create rules: shipping cost varies based on weight, cart total, item count, destination, or any combination. The customer sees a shipping cost that reflects what it actually costs to ship their specific order. You protect your margins. They get fair pricing.

Table Rate Shipping Plugins for WooCommerce

WooCommerce Table Rate Shipping (Official Extension — $119/year)

The official extension from WooCommerce is the most reliable option, if not the cheapest. It integrates directly with WooCommerce shipping zones (which we'll cover below) and supports rules based on weight, item count, cart total, and shipping class. The interface is straightforward — you add rows to a table, each row defining a condition and the corresponding shipping cost.

Table Rate Shipping for WooCommerce by JEM Plugins (Free)

The best free alternative. It supports weight-based, price-based, and item-count-based rates within WooCommerce shipping zones. The interface is slightly less polished than the official extension, but functionally it covers 90% of what most stores need. If your shipping rules are based on weight and destination, this plugin is sufficient and costs nothing.

Flexible Shipping by Jetsteer (Free — $89/year)

Flexible Shipping offers a generous free tier that includes weight-based and price-based rules, plus a premium version that adds conditional logic, shipping class support, and cost calculation methods (per order vs per item). It's the most popular table rate shipping plugin in the WordPress repository by active installations.

For most stores, the free JEM Plugins or Flexible Shipping plugins are sufficient. The official WooCommerce extension ($119/year) is worth it if you need complex multi-condition rules or premium support. See our flat rate vs table rate comparison if you're unsure which shipping method fits your store.

Setting Up Weight-Based Shipping Rates

Weight-based shipping is the most common table rate configuration. Here's a step-by-step setup using the official WooCommerce Table Rate Shipping extension:

Step 1: Enter Product Weights

Before your table rates can work, every product needs a weight. Go to Products → All Products and edit each product. Under the Shipping tab, enter the weight in your configured unit (kg or lbs). For variable products, enter weights for each variation.

This is the most tedious part of the setup, but it's essential. If you have hundreds of products, use a bulk editing plugin like WP All Import or the built-in WooCommerce CSV import/export to add weights in batch.

Step 2: Create a Shipping Zone

Navigate to WooCommerce → Settings → Shipping → Shipping zones. Click "Add shipping zone." Name it (e.g., "Domestic" or "United States") and add the appropriate regions. This tells WooCommerce which customers see these rates.

Step 3: Add Table Rate Method

Inside the shipping zone, click "Add shipping method" and select "Table Rate." Click the method name to open configuration.

Step 4: Define Your Rate Table

This is where the magic happens. You'll create rows that define shipping costs based on weight ranges. Example for a domestic zone:

Weight-Based Rate Table Example:

  • 0 - 1 kg → $5.95
  • 1.01 - 3 kg → $8.95
  • 3.01 - 5 kg → $12.95
  • 5.01 - 10 kg → $18.95
  • 10.01 - 20 kg → $29.95
  • 20.01+ kg → $49.95
Base your rate table on actual shipping costs from your carrier, plus a small margin (10-15%). Don't guess — check your carrier's rate calculator or past shipping invoices for real data.

Step 5: Test Thoroughly

Add products of various weights to a test cart and verify the correct shipping rate appears. Check edge cases: exactly 1 kg, exactly 3 kg, a cart with multiple items totaling different weight tiers. Shipping calculation errors are one of the top reasons for cart abandonment — get this right before going live.

Setting Up Price-Based Shipping Rates

Price-based table rates charge shipping based on the cart total rather than weight. This is useful for stores where product weight doesn't vary much, or where you want to incentivize larger orders with lower per-unit shipping costs.

Price-Based Rate Table Example:

  • $0 - $24.99 → $6.95
  • $25 - $49.99 → $5.95
  • $50 - $99.99 → $4.95
  • $100 - $149.99 → $2.95
  • $150+ → Free

This structure naturally encourages customers to add more to their cart to reach the next shipping tier. The $150+ free shipping threshold is a powerful average order value (AOV) driver — see our free shipping threshold guide for the math on setting the right number.

Combining Weight and Destination

The most accurate table rate setup combines weight-based rates with destination-specific zones. This reflects how carriers actually price shipping: cost varies by both weight and distance.

To set this up, create separate shipping zones for different regions (e.g., "Local" for your state/province, "Domestic" for the rest of the country, "International" for overseas) and configure different rate tables in each zone. Your local zone might charge $3-$10, domestic $5-$20, and international $15-$50+ for the same weight ranges.

For international shipping, consider using a live rate plugin (like the official USPS, FedEx, or DHL extensions) instead of table rates. International shipping costs vary dramatically by destination country, making it impractical to maintain accurate table rates for every country.

Using Shipping Classes for Product-Specific Rules

Shipping classes let you group products that need special shipping treatment. Common examples:

  • "Bulky" class: Furniture, large electronics — higher base shipping cost
  • "Fragile" class: Glassware, ceramics — surcharge for packing materials
  • "Digital" class: Downloads, virtual products — no shipping cost
  • "Hazmat" class: Batteries, chemicals — special carrier requirements

Create shipping classes at WooCommerce → Settings → Shipping → Shipping classes. Then assign products to classes in the product editor under the Shipping tab. In your table rate configuration, you can set different rates or surcharges per shipping class.

Common Table Rate Mistakes

1. Forgetting product weights. If any product in the cart has no weight set, the shipping calculation breaks or defaults incorrectly. Use a report plugin or SQL query to find products without weights.

2. Gaps in rate tables. If your table goes 0-5 kg and 10-20 kg, orders between 5-10 kg will have no available rate — meaning the customer can't check out. Always ensure your ranges are continuous with no gaps.

3. Not testing edge cases. Test carts at exactly the boundary of each tier (e.g., exactly 5 kg when your tier changes at 5.01 kg). Off-by-one errors in rate tables are extremely common.

The #1 table rate mistake: gaps in your rate table. If a cart total or weight falls between your defined ranges, the customer sees "No shipping options available" and abandons. Always test edge cases.

4. Ignoring packaging weight. A 2 kg product in a box with padding might actually weigh 2.5 kg. Account for packaging weight in your rate calculations — either add a flat packaging surcharge per order or increase your product weights by a standard percentage (typically 10-20%).

5. Not reviewing rates quarterly. Carriers raise prices at least once a year (usually in January). If your table rates don't keep pace, your margins erode silently. Set a calendar reminder to review and update rates every quarter.

Table Rates and Tax

In many jurisdictions, shipping charges are taxable. WooCommerce handles this automatically if you configure it correctly: go to WooCommerce → Settings → Tax and check the box that applies tax to shipping costs. Your table rates will have tax calculated on top, just like product prices.

If you display prices including tax (common in the EU and Australia), make sure your table rates also reflect inclusive pricing. Otherwise, customers will see a higher-than-expected total at checkout when shipping tax is added.

Table rate shipping is the foundation of an accurate, margin-protecting shipping strategy. For a comparison of when to use table rates versus simple flat rates, see our flat rate vs table rate shipping comparison.

Set up table rate shipping based on weight, price, or destination to charge accurate shipping costs. Use shipping classes for products with special handling needs. Always test edge cases — gaps in your rate table mean lost sales.

Level up your WooCommerce store

Join the WPBundle waitlist and get beta access to our plugin suite completely free.

Join the Waitlist