Automate E-commerce SEO Bulk Generator — AI Category Descriptions & Meta-Tags for Shopify & WooCommerce in n8n — Step by Step
Your Shopify or WooCommerce store has 200 category pages. Maybe 30 of them have a real description. The rest are empty — a bare list of products with no text for Google to index, no keywords, no reaso
Your Shopify or WooCommerce store has 200 category pages. Maybe 30 of them have a real description. The rest are empty — a bare list of products with no text for Google to index, no keywords, no reason to rank. Every one of those empty categories is a URL that could pull organic traffic and instead pulls nothing. Writing them by hand is a two-week copywriting project nobody on your team wants to own. This article shows you how to close that gap in an afternoon with an n8n workflow that finds every description-less category, generates SEO copy with GPT-4o, and publishes it back to your store automatically — 100+ categories per hour, zero manual copy-paste.
The problem: empty category pages are silent revenue leaks
Category (or "collection") pages are the highest-intent pages in any store. Someone searching "wireless noise-cancelling headphones" is closer to buying than someone reading a blog post. Google knows this, which is why well-optimized category pages routinely outrank individual product pages for commercial keywords. But a category page with no description is just a grid of thumbnails. There's no unique text, no title tag worth showing in search results, no meta description to drive click-through. Google sees a thin page and buries it.
The reason these pages stay empty is boring but real: writing them is repetitive, low-status work. Each description needs to be unique (duplicate text across categories is an active penalty), keyword-aware, and around 150–250 words. Multiply that by 50, 100, or 300 categories and you have a task that gets perpetually pushed to "next sprint." Meanwhile every empty page is a ranking you're conceding to a competitor who did bother to fill theirs in.
The manual math is brutal. A decent copywriter produces maybe 8–10 category descriptions a day at $0.10–$0.15 a word — call it $2,000–$4,000 and three weeks for a 200-category catalog. And the moment you add a new product line, you're back in the queue. This is exactly the kind of high-volume, rule-based writing that a language model does in seconds and a human does in minutes.
The solution: one trigger, full-catalog coverage
The workflow is a single-run automation. You fire it once (manually, or on a schedule if you add categories often). It pulls every category from your store, filters down to only the ones missing a description, and for each one asks GPT-4o to write three things: a 200-word SEO-optimized category description, an SEO title tag (~55–60 characters), and a meta description (~155 characters). Then it writes all three back to the store through the platform's API — Shopify's Admin API or the WooCommerce REST API — and moves to the next category.
Three design choices make this reliable rather than a demo. First, it only touches categories that are actually empty, so re-running it is safe and it never overwrites human-written copy. Second, each prompt includes the category name and a sample of its product titles, so the AI writes about what's actually in that category instead of generic filler. Third, it processes in a loop with pacing, so you respect API rate limits and don't get throttled mid-run. The result: a 200-category backlog cleared in under two hours, all copy unique, all of it published live.
Step-by-step: building it in n8n
1. Trigger. Start with a Manual Trigger node ("Execute Workflow") while you build and test. Once it's proven, swap or add a Schedule Trigger set to run weekly if your catalog changes often — it'll catch any new empty categories automatically.
2. Fetch categories. Add an HTTP Request node. For Shopify, call GET /admin/api/2024-01/custom_collections.json and smart_collections.json (or use the Shopify node's "Get All" on collections). For WooCommerce, use the WooCommerce node with resource "Product Category" and operation "Get All", or an HTTP Request to GET /wp-json/wc/v3/products/categories?per_page=100. Enable pagination — Shopify uses cursor-based Link headers, WooCommerce uses ?page=N — so you pull the entire catalog, not just the first 100.
3. Filter to empty categories. Add a Filter node (or an IF node). Keep only items where the description field is empty. In WooCommerce that field is description; in Shopify collections it's body_html. Condition: {{ $json.description }} is empty, or a string-length check {{ ($json.body_html || '').length }} === 0. This is the guard that makes the whole thing idempotent.
4. Loop. Add a Loop Over Items (Split in Batches) node with a batch size of 1. This gives you clean per-category processing, a natural place to add a delay, and predictable error isolation — one bad category doesn't kill the run.
5. Generate the copy. Inside the loop, add an OpenAI node (or the generic HTTP Request to the Chat Completions endpoint) using the gpt-4o model. Set a system message that pins the role and output format, and a user message that injects the live data:
System: "You are an e-commerce SEO copywriter. Return only valid JSON with keys: description (200 words, HTML-safe, keyword-rich, no fluff), title_tag (max 60 chars), meta_description (max 155 chars)."
User: "Category: {{ $json.name }}. Sample products: {{ $json.sample_products }}. Write unique SEO copy targeting buyers searching for this category."
Set temperature to 0.4 for consistent, on-brand output and enable JSON mode (response_format) so parsing never breaks. To feed sample product titles, add a small HTTP Request before this node to pull 3–5 products per category — it dramatically improves relevance.
6. Parse. Add a Set or Code node to unpack the JSON into clean fields: description, title_tag, meta_description. With JSON mode on, {{ JSON.parse($json.message.content) }} is all you need.
7. Publish back. Add an HTTP Request node with method PUT/POST. Shopify: PUT /admin/api/2024-01/custom_collections/{id}.json writing body_html, plus the metafields for SEO title and description (namespace global, keys title_tag and description_tag). WooCommerce: PUT /wp-json/wc/v3/products/categories/{id} writing description, and use the Yoast or RankMath REST fields (or a meta-data update) for the title tag and meta description. Store your API tokens in n8n Credentials, never hard-coded in nodes.
8. Pace and close the loop. Add a Wait node (1–2 seconds) before looping back, to stay under API and OpenAI rate limits. Wire the last node back into the Loop Over Items node so it processes the next category. Done.
The benefits: what you actually get
Speed. 100+ categories per hour versus 8–10 per day by hand. A backlog that was a three-week project finishes before lunch.
Cost. GPT-4o generates a full description-plus-tags set for roughly a cent or two per category. A 200-category catalog costs a few dollars in tokens instead of thousands in copywriting.
Consistency and uniqueness. Every page gets distinct copy in the same voice, targeting the right intent — no duplicate-content penalties, no tonal drift between pages written by different people on different days.
Compounding SEO. Filled category pages start accumulating impressions and rankings within weeks. Because category pages capture commercial-intent searches, the traffic they pull converts better than blog traffic. And because the workflow is idempotent, you run it again after every product-line launch and stay covered forever.
Common pitfalls (and how to avoid them)
Overwriting good copy. If your filter is loose, you'll clobber human-written descriptions. Be strict: only process categories where the description is genuinely empty. Test the Filter node in isolation before wiring it to the publish step.
Skipping pagination. Both platforms cap results per request (100 for Shopify collections, 100 for WooCommerce). Without pagination you silently process only the first page and think you're done. Confirm the fetched count matches your actual category count.
Rate limits. Shopify's REST API allows 2 requests/second on standard plans; WooCommerce depends on your host; OpenAI has per-minute token caps. The Wait node and batch-size-of-1 loop exist for this reason — don't remove them to "go faster." Getting throttled mid-run leaves your catalog half-updated.
Fragile JSON parsing. If you skip JSON mode, GPT-4o occasionally wraps output in markdown fences or prose, and your parse step throws. Always enable response_format: json_object and keep the schema explicit in the system prompt.
Meta tags going to the wrong field. Writing the description is easy; the title tag and meta description live in different places — Shopify metafields, or Yoast/RankMath fields in WooCommerce. If you only update the body text, you miss the highest-leverage SEO elements. Map those fields correctly and verify one category in the admin before running the full batch.
No dry run. Before publishing to 200 live pages, disconnect the publish node and inspect the generated copy for 5–10 categories. Check length, keyword relevance, and that it actually describes the right products. Ten minutes of review saves you from re-running a fix across the whole catalog.
Ja construimos isso pra voce
Nao comece do zero. O E-commerce SEO Bulk Generator — AI Category Descriptions & Meta-Tags for Shopify & WooCommerce e um workflow n8n pronto para instalar — conecta suas ferramentas em minutos, sem codigo.
Instalar por $49.0 →