Bulk edit categories & collections
Plans: Starter ✓ · Growth ✓ · Pro ✓ · Agency ✓
When your catalog grows past a handful of categories, opening each one to tweak its name, slug or SEO metadata becomes a chore. Bulk Edit mode turns the category/collection listing into a flat editable table, Notion-style, so you can sweep across the whole store in one pass.
The same screen handles both BigCommerce Categories and Shopify Collections — the underlying entities differ but Clione's editing model is unified. The per-platform sections below explain exactly what the platform allows you to push back.
Where to find it
Categories (or Collections on Shopify) page → ✎ Bulk Edit button in the top-right header.
Toggling it collapses the hierarchy into a flat alphabetical list and replaces the read-only table with live inputs in every cell. Click ✓ Done editing to return to the tree view.
What's editable
| Column | Type | Notes |
|---|---|---|
| Name | text | The public name, shown on storefront listings |
| Slug | text (monospace) | URL segment — leave empty to keep the platform default |
| Meta Title | text | SEO <title> override for the category page |
| Meta Description | textarea (2 rows) | SEO <meta name="description"> — 150-160 chars optimal |
| Description | textarea (2 rows) | Long-form description shown to shoppers |
| Image URL | text (monospace) | URL of the hero image; upload isn't supported yet (pending) |
The Status column is read-only and shows Visible/Hidden, or a save-progress flash (Saving… / ✓ Saved / ✗ Error) when the row has an in-flight request.
How saving works
There is no global Save button. Every cell auto-saves when you click out of the field:
- Click on a cell → we capture the current value as a snapshot
- Edit freely — changes appear in the UI immediately (optimistic)
- Click out of the field → we diff against the snapshot; if anything changed, we send a
PATCHrequest for that field only - On success, the row flashes ✓ Saved for 2 seconds
- On failure, the row flashes ✗ Error, rolls back to the snapshot value, and a toast explains what went wrong
This means you can Tab across a whole row editing four cells, and each one saves independently. Network blips only roll back the specific cell that failed.
What's not in bulk edit
- Enrichment fields (AI description, reasoning, search keywords, quality scores) — these live on the individual category detail's Edit tab, where they carry OVERWRITE confirmations to avoid accidental loss.
- Image upload — you can paste an existing image URL, but the uploader (with Cloudinary/S3) is pending.
- Visibility toggle — hiding/showing a category isn't bulk-editable yet; use the detail view.
- Reordering — sort order is fixed to what the platform sends.
Per-platform behaviour
BigCommerce — Categories
- Tree — BigCommerce categories are hierarchical. Bulk Edit flattens to alphabetical, but slugs and meta titles still apply to whatever node you edit; the tree structure is restored when you exit Bulk Edit.
- Slug field — maps to
custom_url.urlon the BC v3 catalog. The PATCH sends{ custom_url: { url, is_customized: true } }so BC stops auto-regenerating the URL from the name. - Meta Title — maps to
page_title. - Meta Description — maps to
meta_description. - Meta Keywords (BC-only) — visible on the detail page for the category, not the bulk grid. BC accepts up to 255 chars total for
meta_keywords; comma-separated. - Description — maps to
description(HTML allowed; HTML tags survive but the input is plain-text). - Image URL — maps to
image_url. BC accepts external URLs; if you want to host on BC, upload via BC admin first then paste the resulting URL here. - Visibility —
is_visibleis read-only in the bulk grid (use detail view).
Shopify — Collections
- Manual vs Smart collections — both appear in the bulk grid. Smart collections are flagged with a
Smartchip and theDescriptionfield is editable; the rule set itself is not — open the collection in Shopify admin to edit smart rules. - Slug field — maps to
handleon the Admin GraphQLCollectionresource. Shopify auto-derives the handle from the title on creation; once you set one explicitly, it sticks. - Meta Title — maps to
metafields.global.title_tag. - Meta Description — maps to
metafields.global.description_tag. - Description — maps to
descriptionHtml. Bulk Edit sends plain text; if you have rich HTML you want to keep, edit on the collection detail page (which preserves the HTML editor). - Image URL — maps to
image.src. Shopify also allows alt text but it's not in the bulk grid (yet). - Visibility — Shopify collections don't have a single "visible" toggle; they're either published to the Online Store sales channel or not. The bulk grid shows the published-to-Online-Store state read-only.
Multi-currency (Shopify Markets / BC Channels)
Bulk Edit operates on the default-locale, default-currency values. If you have multiple Markets (Shopify) or Channels (BC), the per-market / per-channel overrides are not surfaced here yet — edit them in the platform's native admin.
What's not in bulk edit
- Enrichment fields (AI description, reasoning, search keywords, quality scores) — these live on the individual category detail's Edit tab, where they carry OVERWRITE confirmations to avoid accidental loss.
- Image upload — you can paste an existing image URL, but the uploader (with Cloudinary/S3) is pending.
- Visibility toggle — hiding/showing a category isn't bulk-editable yet; use the detail view.
- Reordering — sort order is fixed to what the platform sends.
- Per-locale fields — Shopify translated collection metadata isn't editable from the bulk grid. Open the collection detail, then the Translations tab.
- Custom metafields — only
title_taganddescription_tagare surfaced. Other metafields (including your own custom ones) stay platform-side.
Sorting and filtering
The grid is sortable by Name, Slug, Meta Title length, and (when Bulk Edit is OFF) by Status. Click the column header to toggle. The grid header also has a text filter that matches Name, Slug, and Meta Title in real-time.
For larger catalogs (>100 categories), pagination kicks in at 50 rows per page. Sort and filter apply across all pages, not just the visible one.
Tips
- Meta Title sweet spot: 50-60 characters. Anything longer gets truncated in Google SERPs.
- Meta Description sweet spot: 150-160 characters. Two full sentences.
- If a category has no SEO metadata filled in and your platform (BigCommerce especially) also doesn't expose one, shoppers and LLMs will see your raw title/description. Filling Meta Title + Meta Description is one of the highest-ROI things you can do from this screen.
- Use the Length chips that appear under the Meta Title / Meta Description inputs as you type — green when in the sweet spot, amber when close, red when over.
- Don't sweep through changing slugs without setting up redirects first. Shopify automatically creates a 301 for changed handles; BigCommerce does not — you'll need to add the redirect via BC's Storefront → Web pages → 301 Redirects to keep inbound links alive.
Troubleshooting
Edit saves to a flash but reverts on refresh — Optimistic UI rolled back the platform PATCH silently. Open the browser console; if you see a 422 it's almost always a slug conflict (another category already uses that slug). Pick a unique slug.
Slug field rejects characters — Both platforms restrict slugs to [a-z0-9-]. Bulk Edit lowercases and replaces spaces with - on save, but ?, &, %, and accented characters will fail with a 422. Strip them before saving.
Shopify "smart collection" description edit silently does nothing — Shopify ignores descriptionHtml updates on smart collections in certain Theme blocks. The PATCH succeeds (you'll see ✓ Saved) but the live storefront may not pick it up. Confirm in Shopify admin.
BigCommerce category disappears from the grid after editing image URL — BC has a sync race on image_url when the URL is invalid (404). The category is fine, just refresh the page. Validate the image URL first in a browser tab.
Bulk Edit button is disabled — The user role is member without category:write permission, or the store is in read-only mode (read-only is set during a long-running sync). Wait for the sync to finish or ask an admin to grant write permissions.
Keyboard shortcuts
In Bulk Edit mode:
- Tab — move to the next cell in the row.
- Shift+Tab — move to the previous cell.
- Enter — commit the cell and move down to the same column on the next row.
- Esc — discard pending changes in the cell and restore the snapshot value.
- Cmd/Ctrl + S — force-save all pending cells (useful before navigating away).
Save state is preserved if you accidentally close the tab — pending optimistic edits are retried on reopen.
How Bulk Edit interacts with sync
If you're in Bulk Edit while a sync is running:
- BigCommerce: edits are queued and dispatched only after sync finishes (to avoid the catalog PATCH racing the sync's upsert).
- Shopify: edits go through immediately, but Shopify's
metafieldsSetmutation may collide with the sync's read. The grid retries with backoff; you'll see "Saving…" longer than usual but it lands.
If a sync starts while you're editing, you'll see a banner: "Sync in progress — edits will queue". Click Wait to keep editing (queued); click Pause to stop editing until sync finishes.
Audit log
Every cell edit creates an audit entry visible in Store → Audit log:
- User who made the edit
- Entity (category/collection name + ID)
- Field changed
- Old value → new value
- Timestamp
- IP + user-agent
This is essential when multiple admins work on the same catalog — a regression in SEO metadata can be traced and rolled back from the audit log entry itself (click Restore on the entry).
Cross-platform consistency
When you have the same category on both BC and Shopify (e.g. you sell the same products on both), Bulk Edit doesn't sync edits across platforms automatically. Each platform's catalog is edited independently.
If you want consistency, the workflow is:
- Edit on one platform via Bulk Edit.
- Export CSV (under the grid's three-dot menu).
- Import the CSV on the other platform's category page (currently CSV import is on the roadmap; for now, manual mirror).
Per-locale editing (Shopify Markets)
If you've enabled Shopify Markets with multiple languages, the translated meta_title and meta_description live in Translation resources, not in the default metafields. The bulk grid edits the default-locale values only. To edit translations:
- Open the collection detail page in Clione.
- Click the Translations tab.
- Pick the target locale.
- Edit the translated meta fields.
- Save (auto-saves per locale, same as bulk grid).
BigCommerce has limited per-locale support for categories — see the platform's docs. Clione doesn't surface BC's multi-locale fields in the bulk grid today.
Common bulk-edit workflows
- SEO sweep before a launch — open Bulk Edit, sort by Meta Title length ascending. Anything under 30 chars is probably too short. Fix in place.
- Slug cleanup after a rename — sort by Slug column, scan for inconsistent patterns (some with
-, some with_, some with no separator). Standardize. - Image audit — sort by Image URL column with a "is null" filter. Fill the missing ones.
- Category-tree consolidation — exit bulk edit, view the tree, identify duplicates. Open Bulk Edit, rename for clarity, then merge via the detail view.
Validation rules
The grid validates inputs on blur:
| Field | Validation |
|---|---|
| Name | 1-255 chars, no HTML. |
| Slug | [a-z0-9-], 1-100 chars, must be unique within the catalog. |
| Meta Title | 1-255 chars (truncated by Google at ~60). |
| Meta Description | 1-500 chars (truncated by Google at ~160). |
| Description | 0-10000 chars. |
| Image URL | Valid URL (http/https), reachable (HEAD check). |
Validation failures don't auto-save — the cell stays editable with the previous value, and a red icon shows what's wrong.
Sync interaction reference
| Bulk Edit state | Sync starts | What happens |
|---|---|---|
| Idle | — | Sync runs normally. |
| In Bulk Edit, no pending writes | Sync starts | Banner: "Sync in progress, edits will queue". You can keep editing; writes queue. |
| In Bulk Edit, pending write | Sync starts | Pending write completes first, then sync proceeds. |
| In Bulk Edit | Sync errors | Pending writes drain normally; the sync error doesn't affect them. |
| Idle | Sync errors | Sync error shown; entity counts may be stale until next sync. |
How edits propagate
Bulk Edit writes the changes to BC / Shopify directly, then re-reads the platform value to confirm. The re-read uses the platform's standard API endpoint:
- BigCommerce —
GET /v3/catalog/categories/:idto confirm. - Shopify — GraphQL
Collection(id:)query to confirm.
If the confirm differs from what you saved, the row flashes ✗ Error and rolls back. This catches platform-side validation that silently transforms the value (e.g. trailing whitespace stripped, HTML escaping).