Category management · tree, SEO, images & AI - all in one modal
Maintain the entire category tree without leaving the Shopware standard: create, move, translate, set SEO URLs, assign images, assign products, generate AI texts and back up the whole tree as CSV or JSON - per sales channel and language.
Opening & structure
The "Categories" button (left of the Feed Generator in the product list) opens the modal. The sales channel/language selector uses the master-data-style channel bar (with icons and field borders). Per channel the tree is built from the navigation root, with the entry category at the top. Loaded directly via the category repository - no separate API endpoint, no separate page. Secured via the dedicated "Manage categories" permission.
Create, edit, move
- New category via the button in the bar - quickly a root category in the selected channel, or as a subcategory. New categories are created in the system language.
- Rename, activate/deactivate, delete directly in the tree or detail area. The delete confirmation is a PIM-CI-style dialog (no browser confirm).
- Drag & drop: move categories under another parent.
- Duplicate in the detail header - duplicates the category including all subcategories (subtree) as siblings with a "(copy)" name addition.
Fields per language, type & layout
Name, description and SEO fields are maintained per language; a language switch reloads tree and detail so translated fields appear. The language selector only shows the languages assigned to the active sales channel - no irrelevant languages that aren't served in the channel. The description is a WYSIWYG editor (sw-text-editor) with visible HTML formatting. Plus:
- Set type & parent category, external link for link categories
- Assign layout (CMS experience), incl. "Create new experience" button (opens the CMS editor in a new tab)
- "Show in main navigation" toggle, custom fields section
- Default sorting (Shopware product_sorting) - stored via the category slot config; "Default (inherited)" removes the override again
Category image & alt text
In the master data (directly above "Show in navigation") sits the category image (cover) with preview: choose from the media library or upload directly, remove. Stored as category.mediaId, uploads land in the category media folder. An alt text field (language-dependent, stored on the media record) improves accessibility and SEO.
SEO URL (slug) per channel & language
In the "Description & SEO" area you can set a SEO URL slug per sales channel and language. On opening, the current canonical URL is loaded; on saving it's written via a backend endpoint:
- The old URL remains as a 301 redirect (old entry becomes non-canonical), the new one becomes canonical and is marked as manual - Shopware won't overwrite it on reindex.
- The slug is additionally stored reliably in the category custom field
staw_pim_seo_url(via the normal save). - Empty field = remove override, Shopware generates automatically again.
Product assignment - stream or preset
The "Products" section controls which products are in the category - in two clearly separated options:
- Dynamic product group (stream): select a Shopware product group (product_stream);
productAssignmentType=product_streamand theproductStreamIdare stored. - Preset (StawPim filter): a StawPim filter (staw_pim_filter) with live hit count. When saving in preset mode, the resolved products are firmly assigned to the category so they appear in the frontend. Safeguard: 0 hits won't empty the category.
The preset display shows parent products and variants separately (like the listing). "No preset" removes the assignment again.
Completeness score
Each category in the tree shows a percentage score (green/yellow/red) based on filled description, meta title, meta description and category image. In the detail area the score is shown live next to the title and updates while editing. A completeness filter next to the search shows incomplete categories specifically.
AI texts & translation
An "AI texts" button generates description, meta title, meta description and keywords - across all four AI providers, with tone selection, output in the active language and a free "Additional instructions to the AI" field. Toggles "Include subcategories" (entire subtree) and "Overwrite existing texts".
- "Translate" is also available separately next to "AI texts" - translating the fields from source to target language via DeepL or an AI provider.
- Bulk: with "Select all" + bulk button, AI texts or translations are generated for all selected categories at once. AI errors show the real cause (curl error + upstream status) instead of just "Proxy HTTP 502".
Bulk actions in the tree
Categories can be multi-selected in the tree via checkbox. A bulk bar shows the count and offers "Set active/inactive" and "Show/hide in nav". Before each action a named snapshot of the previous state is created; a "History" button lists snapshots (restorable) along with the audit log.
Import / export
Via the "Import/export" button the entire category tree of the selected sales channel can be managed:
- CSV export including custom fields as their own
cf.columns. Multilingual: one column per shop language for each translatable field in the formatfield.locale(e.g.name.de-DE,description.en-GB). - CSV import resolves the parent category via the
parentPathcolumn (path with " > "), creates missing categories and updates existing ones (same path + name). With preview and validation (name/type/parent). - Save tree as JSON - full backup incl. all languages, custom fields and IDs, ideal before larger restructurings. Restore = import again.
Copy from default language
When a sales channel uses its own language, no own category texts exist there at first. The storefront falls back to the inherited content, but targeted editing or AI rewriting per channel is not possible without a starting text. The bulk action "Copy from default language" transfers name, description, meta title, meta description and keywords from the default language into the currently selected language.
- Its own dialog: Before starting it states the number of categories, the target language and the fields to be copied, and points out that existing own texts are skipped.
- Progress visible: A progress bar runs while copying; afterwards the dialog closes and the view is refreshed.
- Nothing is overwritten: Existing own texts stay untouched. The message states at the end how many categories were copied and how many were skipped.
- The button only appears when the selected language differs from the default language.
Languages in the tree - what the percentage shows
- Only own texts count: The completeness score per category uses exclusively the own texts of the selected language - matching the editing form next to it, which is also maintained per language. Inherited content is not included.
- Tree follows the channel language: On opening, the tree is built in the language of the first selected sales channel, so names and percentages on the left match the language shown above.
- Changes visible immediately: After bulk actions and after an import, the editing view on the right is refreshed along with the tree.
What's next
Continue to CSV import & export to read product data in and out via files.