Adding a product is one screen. Getting the product type right first is the decision that saves rework, because changing type after variations and orders exist is genuinely awkward.
Choose the type before filling anything in
Simple: one thing, one price, one SKU. Most products.
Variable: one product with options that change price or stock: sizes, colours. Each combination is its own variation with its own SKU and stock level.
Grouped. A container listing several separate products bought individually.
External: listed on your site, bought elsewhere.
The common mistake is creating separate simple products for each size, then discovering customers cannot switch between them on one page. Converting to variable afterwards means recreating the product.
Variations need attributes first
A variable product does nothing until you define the attributes, tick "used for variations", and generate the combinations.
Define attributes globally (under Products then Attributes) rather than per product. Global attributes are reusable across the catalogue and give you working filters; per-product ones do neither and have to be retyped every time.
Watch how many combinations you generate. Three attributes with five values each is 125 variations, each needing a price and a stock figure, and a product page with that many variations is slow to load and painful to manage.
SKUs
Give everything one, including each variation. They are how you match your store to your stock records, your supplier and your accounts.
Decide a convention before you have two hundred products. Retrofitting one is a day of work that a five-minute decision would have avoided.
Stock management
Enable stock management per product if you want WooCommerce to track quantity and stop selling at zero.
Set backorder behaviour deliberately, allow, allow with notice, or do not allow. The default lets an out-of-stock item become unpurchasable, which is right for some stores and lost revenue for others.
For variable products, stock is tracked per variation. Setting it at parent level looks correct and lets a customer buy a size you do not have.
Images
Upload at a sensible size rather than camera resolution. On a category page with twenty products, oversized images are the single largest thing the visitor downloads, and it is the page that decides whether they browse further.
Use a consistent aspect ratio across the catalogue. Mixed ratios make a product grid look untidy in a way customers notice without being able to say why.
Descriptions
The short description appears next to the price and is what most people read. The long description is further down and is where detail belongs.
Write the short one as the answer to "is this the right thing for me". Dimensions, materials and compatibility belong there rather than in a specification table nobody scrolls to.
Bulk editing
The products list supports bulk edits for price, stock and status, useful for a sale across a category.
For larger changes, the CSV importer updates existing products when the SKU matches. Export first, edit the file, import back. Test on a handful before running it across the catalogue, because a mistake in a spreadsheet applied to two thousand products is a restore rather than an undo.
Before publishing
Check the product page as a customer: the price shows, variations select correctly, adding to cart works, and stock behaves as you configured.
Variable products are where this catches things. A variation missing a price is silently unpurchasable, and nothing on the admin screen flags it.
If the shop is not set up yet, How to Install WooCommerce on WordPress goes into the installation and the setup wizard.
How those products are grouped decides whether anyone finds them. How to Structure WooCommerce Categories and Navigation sets out the structure.
The fields that decide whether it can be sold
A product can look complete on the editing screen and still be unsellable, and the causes are a short list.
The status has to be published rather than draft or private. The catalogue visibility has to include the shop. There has to be a price, since a product without one shows no button at all. And if stock management is on, the quantity has to be above zero or backorders permitted.
wp db query "SELECT p.ID, p.post_title FROM wp_posts p
LEFT JOIN wp_postmeta m ON m.post_id=p.ID AND m.meta_key='_price'
WHERE p.post_type='product' AND p.post_status='publish'
AND (m.meta_value IS NULL OR m.meta_value='') LIMIT 20;"
That lists published products with no price, which is the commonest cause of a product page with no way to buy. Run it after any import.
Imports leave gaps that only show up later
A catalogue moved from elsewhere arrives with the fields the export happened to include, and the missing ones fail quietly.
The frequent gaps are weight and dimensions, which break shipping rates; tax class, which produces the wrong total; the downloadable flag on digital items, which stops delivery; and image attachments, which link to the old site rather than being imported.
wp db query "SELECT meta_key, COUNT(*) FROM wp_postmeta pm
JOIN wp_posts p ON p.ID=pm.post_id AND p.post_type='product'
WHERE meta_key IN ('_weight','_length','_tax_class','_downloadable','_thumbnail_id')
GROUP BY meta_key;"
Compare each count against the number of products. A field present on far fewer rows than there are products is the gap, and finding it this way takes a minute rather than waiting for a customer to report it. Migrating from another platform deals with the import itself.
Large catalogues need different habits
What works for fifty products becomes a performance problem at five thousand.
Variations are the main cost, since each one is a separate record with its own metadata. A product with four options in three sizes and five colours produces sixty of them, and a catalogue built that way grows faster than the product count suggests.
wp db query "SELECT post_type, COUNT(*) FROM wp_posts WHERE post_type LIKE 'product%' GROUP BY post_type;" wp db query "SELECT COUNT(*) FROM wp_postmeta;"
If the variation count is many times the product count, the shop pages will be slow regardless of caching, because the work happens before the cache. Reducing the option combinations offered is a product decision that has a direct performance effect. Database growth goes into what else accumulates.
Retiring a product without breaking the link
Deleting a product removes the address, and that address is in search results, old orders and customer bookmarks.
Where the item is gone permanently, redirect the page to the closest replacement or to its category, so the visitor lands somewhere useful rather than on an error.
Where it may return, setting the status to draft or hiding it from the catalogue keeps the record intact for the orders that reference it. Deleting a product that appears in completed orders makes those orders harder to read later, which matters during a refund or a dispute. Redirecting a domain or page covers the first case.