Meta tags — the title and description that appear in Google search results — are one of the highest-leverage SEO tasks on any site. A well-written title tag influences click-through rate directly. A well-written meta description sets expectations and pulls qualified traffic.
The problem is volume. A site with 200, 500, or 2,000 pages needs 200, 500, or 2,000 unique, keyword-relevant, character-limited meta tags. That's not a few hours of work — it's weeks, if you're doing it properly.
This guide walks through how to do it with AI batch processing: prepare your data once, write your SEO guidelines once, and generate optimised meta tags for every page in a single job.
Step 1: Prepare your CSV
Your CSV needs one row per page and at least three columns. More detail means better output, so include everything that's readily available:
| page_url | h1 | page_type | top_keyword | content_summary |
|---|---|---|---|---|
| /products/running-shoes/ | Women's Running Shoes | category | women's running shoes UK | 500+ styles, free UK delivery, expert-tested picks |
| /blog/how-to-choose-running-shoes/ | How to Choose Running Shoes | blog | how to choose running shoes | Guide covering pronation, shoe types, fit tips |
Where to get this data:
- Screaming Frog — crawl your site and export URL, H1, and existing meta data in one go. Free up to 500 URLs.
- Google Search Console — export your top queries per page to use as the top_keyword column.
- Your CMS — Shopify, WordPress, and Webflow all have export options for page data.
The content_summary column is optional but valuable. Even a short note about what the page covers helps the model write a more accurate description. If you can't get it easily, the H1 plus page_type is usually enough to produce solid output.
Step 2: Write your batch instructions
This is the prompt you write once — it applies to every row. Be specific about format, character limits, and SEO rules:
Sample batch instructions:
You are an SEO copywriter. Write an optimised title tag and meta description for this web page.
Output exactly this format — no extra text:
TITLE: [title tag]
META: [meta description]
Rules:
— TITLE: 50–60 characters. Include the top_keyword naturally. Brand name "Acme Running" at the end after a pipe: "Women's Running Shoes | Acme Running"
— META: 140–155 characters. Start with the primary benefit or action. Include the top_keyword or a close variant. End with a light call to action.
— Do not use "Welcome to", "Click here", or generic filler phrases
— Character limits are hard limits — count carefully
— Use the page_type to adjust tone: product/category pages should be benefit-led; blog pages should set expectations about what the reader will learn
A few things to get right in your batch instructions:
- Always include your brand name format. Specify exactly how it should appear in the title tag — character, separator, and position.
- Reference column names directly. Use the exact column headers from your CSV (top_keyword, page_type, etc.) — the model will match them to the row data.
- State character limits as hard limits. Left to its own judgement, the model will occasionally run slightly over. Saying "hard limit — count carefully" reduces violations significantly.
Step 3: Choose your model
For meta tag generation, Gemini 2.5 Flash is the right choice for most cases. Meta tags are short, format-constrained, and don't require deep reasoning — Flash produces clean output at a fraction of the cost of Pro.
Use Gemini 2.5 Pro only if your pages are complex (long-form content, technical topics) and you need the model to accurately summarise nuanced material to write the description.
Step 4: Test on a small sample first
Before running your full dataset, run 20–30 rows. Check:
- Are character counts within limits? (Paste output into a character counter — don't trust visual estimation)
- Is the keyword appearing naturally, not forced?
- Is the brand name formatted correctly in the title tag?
- Are page_type differences visible in tone?
Fix any issues in your batch instructions before scaling. A 10-minute check on 20 rows saves you from manually reviewing 2,000.
Step 5: Run the full batch and QA the output
Run the complete dataset. When the output CSV arrives, do a spot-check QA:
- Filter for rows where TITLE length > 60 characters and review those manually.
- Check a random sample of 20–30 rows for quality.
- Look specifically at rows with short or sparse content_summary columns — those are where output quality tends to drop.
Expect to edit around 5–10% of rows. The rest should be import-ready.
Step 6: Import into your CMS
How you get the output into your site depends on your platform:
- WordPress (Yoast/RankMath): Both plugins support CSV import of meta data. Match your column names to the plugin's expected format.
- Shopify: Use the built-in product/collection CSV import, which includes SEO title and description columns.
- Webflow: CMS collections support CSV import with SEO fields mapped directly.
- Custom CMS: If your CMS has a database import or API, the output CSV is already structured correctly — you just need to map column names.
Budget 30–60 minutes for the import step regardless of how clean the output is. Every platform has its own column naming and formatting quirks.
What to expect from the output
With well-prepared input data and clear batch instructions, you should get:
- 90%+ of title tags within character limits
- Natural keyword inclusion without stuffing
- Consistent brand name formatting across all pages
- Noticeably different tone between product pages and blog posts
The 5–10% that need edits are almost always pages where the input data was sparse. The fix is to add a better content_summary for those rows and rerun them, not to edit the output manually.