Go to the app

Catalog

Categories

Categories are the groups a shopper walks down on your storefront, with Electronics above Phones and Phones above Smartphones.

A category is a group you put products into, and your categories go inside each other. You might have Phones inside Electronics, and Smartphones inside Phones. A phone you sell goes in the last one. That chain is what a shopper walks down on your storefront, and it is the only part of your catalog that nests this way. Your brands, tags and specification groups are flat lists.

Most people build categories for one of three reasons. You want the shape of your catalog to match the way people shop it. You want that same shape to go out to the stores you sell through. Or you want to find a slice of your products later.

Each category has a name, a description, a thumbnail, a banner, two fields for search engines and a slug. Every product you put in it shares that group.

Your categories do a second job that is easy to miss. A category decides which specifications a product is asked for. Move a product into a different category and the specifications it is expected to fill in can change with it. That is covered further down.

You find your categories under Catalog, in Categories. The Create category button is at the right end of the toolbar above the list. The table under it lists every category you have, one row each, with its full path and a count of the products in it. Click a row and that category opens so you can edit it.

Before you start

Two things can stop you. Everything else on this page can wait until you need it.

What your role lets you do

RoleCreate and edit a categoryDuplicate, merge and deleteChange which accounts get it
AdminYesYesOn one category, or on a selection
ManagerYesYesOn one category, or on a selection
EditorYesNoOn one category at a time

Below Manager, you get no buttons at the end of a row, no checkboxes down the left of the list, and no selection bar. The actions you cannot run are simply not there. Your role is set in team, roles and permissions.

Merging and deleting cannot be undone

A category you delete is gone, and a merge deletes every category you merged away. Neither has an undo, there is no trash, and nothing keeps a copy. Export your categories first if you want one.

How to create a category

  1. Open the category dialog

    From Catalog, select Categories, then click Create category at the right end of the toolbar above the list. A dialog opens over the page with the category’s fields running down it.

  2. Name it

    Type into the Name field at the top of the dialog. The Slug field at the bottom fills itself in as you type.

  3. Choose where it goes

    Click the Parent Category field in the middle of the dialog. A picker opens showing your whole tree. Click one category in it to put your new one under that, or leave the field empty to put your new one at the top level.

  4. Add a description and images

    Write a description in the editor under Name. Below Parent Category you get three drop areas, labeled Thumbnail, Banner and Resources. You can skip all of them.

  5. Save it

    Fill in Meta Title and Meta Description near the bottom if you want them, then click Create.

That is the whole flow. Your category appears in the list right away, in its place under its parent, and a small message confirms it was created. If you have connected a store that keeps categories of its own, your category starts going there on its own.

Only Name and Slug are required. A category with nothing else on it still groups your products and still goes to your stores. Everything below explains the dialog, the list, the tree and the actions at the end of every row. You do not need any of it to create one.

Every option in detail

You get the same dialog whether you are creating a category or editing one. It opens from Create category above the list, or from clicking a row. The button at the bottom reads Create on a new category and Update on one you already have.

Every category has its own web address. A link to one still works after a reload, and you can send it to someone on your team.

Closing the dialog with unsaved edits asks you to confirm first. You can either throw your edits away or go back to editing, and clicking outside the dialog or pressing Escape asks you the same thing. There is no draft for you to come back to.

What goes in each field

The fields run down the dialog in this order.

FieldRequiredWhat you can put in it
NameYesThe category’s own name, with a counter under the box
The description editorNoFormatted text, including images you drop into it
Parent CategoryNoOne category from the picker, or nothing
ThumbnailNoOne image
BannerNoOne image
ResourcesNoFiles of any kind, kept alongside the category
Meta TitleNoThe title a search engine shows, with a counter
Meta DescriptionNoThe snippet a search engine shows, with a counter
SlugYesThe web address, rewritten into slug form when you save

Each counter turns orange at a length you can go past. On Meta Title that is 60 characters, and on Meta Description it is 160. Those are the lengths search engines usually show before they cut a title or a snippet off. Nothing stops you going further, and the color changing is all that happens. The limits table further down has the hard caps.

The three drop areas keep their English names whatever language you read the app in. Use Resources for anything you want kept alongside the category that is not one of the two images, such as a sizing chart or a supplier document. Where those files are kept, and how you reuse one, is covered in assets.

Your category names have to be unique among siblings, not across your whole catalog. You can have the same Accessories under Phones and under Laptops at once. Each one is only compared against the categories that share its parent. Your top-level categories are compared against each other the same way, so two of those still cannot collide. Your slugs work the same way and are checked separately.

What happens when the name or the slug is already taken

A check runs a moment after you stop typing, and it marks the field before you get as far as clicking Create. The message names the exact place it looked. You get either “already exists under” and the parent’s name, or “already exists at the root level” for a category with no parent. Your slug gets its own version of the same message.

Create and Update stay gray while that check is running. They also stay gray until you have actually changed something, so you cannot save a dialog you opened and did not touch.

If the check cannot answer at all, your save still goes through and the conflict is caught as it is written. You get the same message either way.

Saving while someone else has the same category open

You see a small marker in the dialog header naming anyone else viewing or editing the same category. So you usually know before it becomes a problem.

If someone else saves while your dialog is open, your save is rejected rather than writing over theirs. A banner appears at the top of your dialog saying the category changed, with a Reload action. Clicking it pulls in their version and throws your unsaved edits away.

If you had no unsaved edits, your dialog updates itself with no message, and the fields they changed flash blue as the new values appear.

Where the slug comes from

Your slug is the part of a web address that names the category. Your stores build their category page addresses out of it, so it matters more than it looks.

Your slug follows the name while you are creating a category, and never after that. It stops following the moment you type into the Slug field yourself. On a category that already exists, changing the name leaves the slug alone completely.

So renaming Shoes to Footwear keeps the slug at shoes. A link someone already has pointing at shoes keeps working.

If you do want the address to change, edit the Slug field yourself. On a Shopify store, your old address is redirected to the new one for you.

Putting a category under another one

Parent Category is the whole of your tree. There is nothing else for you to set. Leave the field empty and your category goes at the top level. Click the field, pick a category in the picker, and your category goes under that one instead.

Changing Parent Category on a category that already exists moves it, and everything under it moves too. Move Phones from Electronics to Gadgets and Smartphones moves with it. So does everything under Smartphones. The full path of every category in the branch is rebuilt when you save, so the Path column in your list catches up immediately.

The picker shows your whole tree. The category you are editing is grayed out, along with everything under it. That is deliberate. Putting a category inside one of its own children would make a loop with no top, so you can see those rows for orientation but you cannot click them.

How deep you can nest categories

Nothing in the category dialog caps your depth, and normal catalogs never come close to any of the numbers below.

Your Path column stops building the breadcrumb after 20 levels and marks that it stopped. A move whose chain of parents runs past 30 levels is rejected outright. In practice you only see that if something is already wrong with the branch.

A store can be stricter than the PIM. BigCommerce takes 8 levels. A category of yours that is deeper stops with a message saying so, on that store only. It stays exactly where you put it here.

Reading the categories list

Your list is a plain table, one row per category, and it does not fold or unfold.

ColumnWhat it shows you
The first, unlabeled columnThe category’s thumbnail, or a dash
NameThe category’s own name, without its parents
SlugThe slug
PathThe full chain, as Electronics > Phones > Smartphones
ProductsHow many products you have in the category
Created at and Created byWhen the row was made, and who made it
Updated at and Updated byWhen it last changed, and who changed it

There is no drag-and-drop tree here. No folders for you to open and close, and no dragging one row onto another to move it. If you came looking for one, it is not hidden behind a setting.

You read your hierarchy from the Path column instead. Your list is sorted by Path from the start, so children are always directly under their parent until you sort it another way.

To move a category, open it and change Parent Category. That is the same thing a drag would have done for you.

Your Products count includes every product in the category whatever its status. Your archived and draft products are counted too.

Finding the category you want

The search box above your list matches on the name, the slug, the description and the path all at once. Typing a parent’s name finds its children as well, because the parent’s name is part of every child’s path.

For anything narrower, click Filters above the list and build a condition there. You can filter on Name, Slug, Path, the description, Products as a number, and the four audit columns. Two more filter fields are not columns and never show you anything in a row:

  • Is Leaf. Set it to Yes and you get the categories with nothing under them. That is usually the set your products should actually be in.
  • Is Root. Set it to Yes and you get your top-level categories.

Both are dropdowns with Yes and No. How you build a condition, and how you keep one for next time, is covered in filters and saved views.

Putting products in a category

You put a product in a category from the product, never from the category. Open the product, find its Taxonomy section, and click the Categories field there. The picker that opens is the same tree, and you can check as many categories as you want on one product.

Nothing in your categories list assigns anything. Check some row checkboxes and the selection bar that appears gives you Merge, Update integration sync and Delete. That is the entire list. You get no bulk edit here, and no way to move a set of products from one category to another. Merging is the only action on this page that touches which products are where.

The order you pick categories in on a product decides which one counts as first. Your Categories column on the products table prints them all but sorts by the first one. A store that can only accept one answer gets your first one. Nothing labels it on screen, so the only way you change it is to reorder the field on the product itself.

At volume, your categories arrive with a products import instead. The Categories column in your file takes full paths, one per category, written the way your Path column shows them.

A path that is not in your catalog yet is handled the way you tell the import wizard to handle it. On the step that asks what to do about things it cannot find, you choose between skipping the row with a warning, creating the category automatically, and rejecting the row. Imports covers that step.

Choosing which specifications a product is asked for

A specification group with no categories on it applies to every product. A group with categories applies only to products in one of them, and you can exclude a single specification for particular categories.

The match is on the category your product is actually in, never on its parents. A group you scoped to Electronics does not apply to a product filed only under Electronics > Phones. That is true even though Phones is inside Electronics.

So scope your groups to the categories your products are really in, which is usually the ones at the bottom of your tree. Specifications has the full rule.

This is why a category change can change what a product is expected to have, without telling you. Move a product from one category to another and the specifications it is asked for move with it.

Loading and saving a whole tree

Your tree has its own import and its own export, separate from the products ones. A categories import maps nine columns: Category Path, Category Name, Description, Thumbnail URL, Banner URL, Resource URLs, Slug, Meta Title and Meta Description.

Order your file from the top down: parents first, then their children. A row asking for a category under a parent your file has not created yet cannot be placed. It fails with a message naming the missing parent, and that is the most common reason a categories import comes back with errors.

An import can also move your categories, not only create them. In update mode, mapping the Category Path column moves each category to wherever the file says it should be, which is the fastest way to reshape a large tree.

A categories export is already in the top-down order for you. It writes parents above their children, sorted by path, so a file you exported can go right back in.

Your export gives you one extra column, Category Level, that an import ignores. How deep a category goes is calculated from its parent and never read from your file. Which columns you get, and how you run an export, is in exports.

Duplicating a category

Duplicate is the first item in the menu at the end of a row. You also get it in the menu in the top right of the category dialog.

You get a copy under the same parent, named with (Copy) on the end and with -copy on the end of its slug. If that name is taken, you get (Copy 2) and upward. A long name is trimmed so the suffix still fits.

Your copy brings the description, the two meta fields and the assets. It brings neither the child categories nor the products, so your duplicate arrives empty with nothing under it. Use it as a starting point for a category shaped like an existing one, not as a way to clone a branch.

Merging two categories into one

Merging is the only way you can get products off a category. There is no reassign-then-delete anywhere in your taxonomy. So a category you no longer want, but that 400 products are still in, gets merged into the one you are keeping rather than emptied and deleted.

You keep one category out of a merge. Every other category in it is deleted, and their products, their children and their specification scoping move to the one you keep.

  1. Start the merge

    Click Merge in the menu at the end of a row. You can also check two or more row checkboxes and click Merge in the selection bar that appears, or use the menu in the top right of the category dialog.

  2. Say which category you keep

    Starting from a row, the step is called Select to Merge: the row you came from is the survivor, and you get a picker for choosing what to fold into it. Starting from the selection bar, the step is called Select Survivor: you get a list of the categories you checked with a radio button on each.

  3. Read the impact summary

    Both routes end on Preview Impact. It lists the category you are keeping, then the categories to be deleted with a line through their names, then a panel called Impact summary counting what your merge is about to do.

  4. Confirm it

    Click Merge at the bottom right, then confirm on the dialog. It tells you the action is irreversible and names your survivor.

Your merge then runs in the background, and you get a message as soon as it is queued. You can keep working. Another message tells you when it has finished, with how many categories were merged and how many products moved.

Read Impact summary before you confirm, because it is the only preview you get.

RowWhat it counts
Products affectedProducts moving to your survivor, and how many were already in both
Children to re-parentCategories that will move up under your survivor
Spec groups reassignedSpecification groups scoped to a category being deleted
Spec exclusions reassignedSpecification exclusions pointing at one of them
Asset assignments deleted from losersImages and files you simply lose instead of them moving over

A product already in both categories keeps its earlier position. That can move it up your survivor’s list and change which of its categories counts as first.

You can rename your survivor on the way through. Click Rename next to it on the impact screen, type the new name, and click Save. Your name is checked against its siblings while you type, and Merge stays gray while the editor is open. A rename leaves the slug, the parent and the depth alone, so links pointing at your survivor keep working.

Two findings warn you and let you continue anyway. One appears when an import is running, because rows in that file can fail and need re-importing after that. The other appears when the categories you are folding in are not all at the same level of the tree as the one you are keeping.

Two findings stop your merge before it starts. The first is a category you are folding in that is above the one you are keeping, which would leave the tree with nowhere to put it. Move it out of that branch first.

The second is a slug collision between the children being moved. They can collide with children your survivor already has, or with each other, and you get each colliding slug listed. That check reads slugs, not names.

A merge is permanent. Every category except your survivor is deleted, and their images and files go with them rather than moving to the survivor.

Deleting a category

Delete is the last item in the menu at the end of a row, and in the menu in the top right of the category dialog. Two things block your delete outright, in this order:

  • The category still has children. The message tells you how many. Delete or move them first.
  • Products are still in the category. The message tells you how many. Merge it into another category instead, or take the products out one by one.

Neither is a warning you can click through. A category has no archived state and no draft state, so once you delete one it has nowhere to come back from.

Your confirmation dialog names the category and then lists everywhere it disappears from. It starts with PIM and names every connected account the category is live on, because your delete goes to your stores too. If it is not on any store, the dialog tells you that instead.

Deleting a whole selection works differently, and it works from the bottom up. Check a parent together with all of its children and the whole branch goes in one action. Deleting that parent on its own would have been rejected. Any row it still cannot take reports why it was skipped, either because children were left behind, or because products are still in it, or both.

On a very large selection, a parent and its children can be handled in separate rounds, and your parent comes back blocked. Run the delete again and it finishes the job.

Working on a lot of categories at once

Check a row checkbox and you get a selection bar with Merge, Update integration sync and Delete on it. Select all in that bar takes every row your filter matches, not just the page you are looking at. Your set is fixed when you confirm, so a category someone creates while it runs is never included.

Above 100 rows in that mode, your work moves to the background, with its own progress bar and a Cancel you can use. A selection you built by checking boxes always runs there and then, however many rows you checked.

Only one bulk action runs for your organization at a time. Start a second while one is going and you are told to try again shortly. Bulk actions covers the shared behavior.

Stopping a category from going to one account

Every connected account that can take your categories shows as a badge in the header of the category dialog. Hover a badge and a panel opens with a Sync switch on it. Turn that switch off and the account stops getting this category.

Turning it off is not a pause, it is a removal. A category has no life of its own on a store the way a product does. There is nothing there to keep except the group itself, so the only choice you get is deleting it from that store, and the dialog says so before you confirm. Turn the switch back on later and your category is created there again.

To do the same to a whole selection, check the rows and click Update integration sync in the selection bar. You get a list of your connected accounts, and you choose per account whether it starts syncing, stops syncing, or is left unchanged. Nothing is pre-selected for you, and Apply stays off until you touch at least one account.

Limits

WhatLimit
Category name100 characters
Slug200 characters
Meta title200 characters
Meta description300 characters
Files under Resources250
Depth shown in the Path column20 levels
Deepest level a move is allowed to go30 levels
Depth BigCommerce accepts8 levels
Category name length on BigCommerce50 characters
Rows in one checkbox selection10,000
Bulk actions at onceOne per organization

What you cannot do with a category

You cannotDo this instead
Drag a category onto another one to move itOpen it and change Parent Category
Add products to a category from the categories listOpen each product and use its Categories field
Move a set of products from one category to anotherMerge the two categories, or re-import the products
Delete a category that has children or productsMove the children out, or merge the category away
Get a deleted or merged category backExport your categories before you start
Have two siblings share a name or a slugRename one, or move it under a different parent
Send a category to Amazon or to GoogleNothing: those two work from your products only

What a category becomes on each integration

What your categories turn into depends on what the store has of its own. A store that keeps real, nesting categories gets your tree the way you built it. A store whose grouping is flat gets one group per category, with the shape of your tree recorded alongside so a storefront can rebuild it. A marketplace selling against someone else’s catalog gets nothing about your categories at all.

IntegrationWhat your category becomes there
SquareA category in your Square catalog, nested the way you nested it
ShopifyOne collection per connected account, flat, with your tree written onto it
BigCommerceA category in your BigCommerce tree, nested the way you nested it
AmazonNothing
GoogleNothing

Amazon and Google are not gaps waiting to be filled in. On Amazon you manage your offer against a listing someone else owns, so you have no product content to place in a category. Google Merchant Center decides its own product classification, and the PIM deliberately sends none.

On Square

A category is a category. Square categories nest, have a page address, and have their own place in the Square dashboard, so yours arrive as themselves.

They are created when you push a product that is in them, parents first. A category no product is in yet has nothing on the Square side.

After that, your name, your page address built from the slug, your page title and your page description are kept in step with what you have here. That work happens on the next push of a product in the category. So a rename you make today shows up when that category next has something to publish.

Square is also the one integration that adds to your tree. The catalog read when you first connect, and any re-sync you start later, creates a category here for each Square category on a product it is importing, nested to match.

It looks for a category of the same name in the right place first and reuses that one. A new one takes the Square page address as its slug, and the Square page title and description as its meta fields. Deleting the category here later deletes the Square one, as the Square integration describes.

On Shopify

Your category becomes a collection, one per connected account, created as soon as the category exists and before any product goes into it.

The address comes from your slug with cat- on the front, so the category shoes becomes the collection cat-shoes. A brand of the same name becomes brand-shoes instead, so the two never collide.

The push sends your name as the title, plus your description, your meta fields, your banner image and which products are in it. When a category has no banner, your thumbnail goes instead. So a category you only gave a thumbnail still goes to the store with an image.

A Shopify collection has no parent of its own. So the shape of your tree is written onto it as a set of fields the PIM owns: what kind of thing it is, its identifier there, its parent, its direct children, its depth and its path. You cannot edit any of them from the Shopify admin, and they are rebuilt on every push.

Moving a category re-pushes everything under it, because the depth and the path of every one of those changed. One move near the top of your tree queues a collection update for the whole branch hanging below it. That is normal and it settles on its own.

Sometimes the address your category wants is already taken by a collection the PIM cannot prove is its own. The push then fails with The handle 'cat-shoes' is already used by another collection in Shopify. Use a unique slug for this category. It never silently settles for a numbered variation, so the fix is yours: give the category a different slug.

Shopify addresses are flat and your slugs are only unique per parent. Accessories under Phones and Accessories under Laptops both want the same collection address, and the second one pushed reports the conflict. Give one of them a different slug.

Doing that before you connect a store saves you a failed push and a sync error to clear.

Membership goes one way. On every push, the products that go in your collection are decided and the difference is written. That is never read back, so a product you add to the collection inside Shopify is not a product the PIM knows about. A read from Shopify leaves your categories alone entirely: it creates none, and it never changes which categories a product is in.

On BigCommerce

Your category becomes a category in your BigCommerce tree, nested the way you nested it, with the address built from your slug. The push sends your name, your description, your page title and your meta description, and your category is created visible.

Three things about BigCommerce matter before you connect one.

BigCommerce takes 8 levels. A category of yours that is deeper stops with a message saying it is nested too deeply, and it stops for that one category only. Everything above it still goes to your store, and your tree here is untouched.

Your category name is also cut to 50 characters on the BigCommerce side. The name you have here is not changed.

Parents go first, and that is handled for you. A category whose parent has not got to BigCommerce yet cannot be created there. The parent is queued instead and your child is tried again shortly. You may see it wait for a moment, and you do not have to do anything.

If BigCommerce already has a category of the same name in the same place, and the PIM cannot claim it, your push stops and says so. Rename one of the two, and the BigCommerce integration has the rest.

The Shopify Category field is not one of your categories

Shopify Category on a product is not one of the categories on this page. It is one choice out of Shopify’s own published list of product types, which is re-read from Shopify every week.

You find it in the Taxonomy section of the product dialog, right under the Categories field, behind its own picker. It tells Shopify what kind of thing your product is. Shopify publishes that list in English only, so the names in the picker stay English whatever language you read the app in.

The two never touch each other. Setting it does not put your product in any of your categories, and your categories never write it. The first sync from a Shopify store can fill it in, because the store sends back the classification it has. So a product you imported from one may arrive with it already set.

When something goes wrong

Checking whether your category got to a store

Open your category and look at the badges in the dialog header. You get one badge per connected account, and hovering one opens a panel with that account’s status, when it was last pushed, and the text of any error.

StatusWhat it means
SyncedYour category is live on that account and up to date
Not in integrationNothing has been created there yet
Pending creation and Creating…Your first push is queued or running
Pending update and Updating…A change you made is queued or running
Removing…It is being deleted from that account
FailedYour push was rejected, and the panel shows you the message
Sync offYou turned the Sync switch off for that account
Account pausedThe account is paused, so nothing is being sent
Needs re-authenticationYou have to renew the connection to that account

A Failed badge on one account never blocks your others. Fix what the message asks for and your next push clears it. For every error across your whole catalog at once, see integrations.

Messages in the category dialog

What you didWhat you get
Typed a name a sibling already usesA message naming the parent it checked, or saying it checked the root level
Typed a slug a sibling already usesThe same message, about the slug
Cleared the slug and tried to saveA message saying the slug is required
Saved after someone else didA banner saying the category changed, with a Reload action
Tried to close with unsaved editsA dialog with Discard and Keep editing

Messages when you delete or merge

What happenedWhat you get
Your category still has childrenA message counting them and blocking the delete
Products are still in your categoryA message counting them and blocking the delete
A row in a bulk delete could not be takenThat row reports children, products, or both
A merge is already running on one of theseMerge is off, and tells you so when you hover it
Someone changed a category mid-mergeA message asking you to reload and try again
A category was deleted before the merge ranA message asking you to reload and try again
The new name you typed is already takenA message asking you for a different name
The merge ran too long and was started againA message asking you to try again

Nothing is retried for you after a failed merge, and nothing was half done. A merge either completes or leaves both categories exactly as they were. Start it again once you have fixed what the message named.

Messages from a categories import

Five of the six things that go wrong here are about the order of your file or the shape of your tree.

What your file asked forWhat it means
A category under a parent that is not there yetSort your file top down, roots first
A move under a parent that is not there yetThe same, or fix the path in your file
A category as its own parentYour path points at the row itself
A move into the category’s own branchYour target is one of its own children
A category that is already thereUse update mode to change it instead of creating it
A name a sibling already usesPick a different name, or move it elsewhere

Every one of these fails only the row it is on. The rest of your file still imports, and you re-import the failed rows once you have fixed them.

Where to go next