Breaking down a prompt for generating Title and Description tags
Writing meta tags for a hundred pages by hand is a lost week. Here is the full prompt that does it in an hour, and why it is built the way it is.
The full prompt text
"You are an SEO specialist working with search results in Uzbekistan. Your task is to write a Title and Description for a page. Inputs: page URL, page type (home, service, category, product, article), primary query, two or three secondary queries, target city, page language (Russian or Uzbek), company name. Constraints: Title up to 60 characters including spaces, primary query within the first 40 characters, company name only if space remains; Description 140–160 characters, contains one benefit and one call to action, does not repeat the Title verbatim. Forbidden: exclamation marks, the words 'best', 'top', 'number one', comma-separated lists of cities, repeating any word more than twice. Return a table: URL, Title, Title length, Description, Description length. If the inputs are insufficient, ask clarifying questions rather than inventing facts."
The prompt is deliberately long. Every sentence in it closes a specific failure you will hit by the second batch of pages.
What each block is for
The role in the opening line sets the vocabulary: without it the model drifts into advertising copy. Naming Uzbek search results keeps it from substituting Russian phrasing and Russian cities.
The input list forces you to supply data consistently. Page type matters more than it looks: a category Title and an article Title follow different patterns, and without it the model averages them into something bland.
Limiting length in characters rather than words is the only version that works. Requiring the model to output the length matters even more: its count is imprecise, but the act of counting makes it trim, and you get a column showing which rows need manual review.
The forbidden list carries half the quality
The forbidden block saves more editing than everything else combined. Without it every third Description contains 'Best prices in Tashkent!', a phrasing Google discounts as promotional noise and users scroll past.
Comma-separated city lists are a local problem of their own: the model happily writes 'Tashkent, Samarkand, Bukhara, Namangan' into a Description and eats half the limit. One city per page; the rest belong on separate landing pages.
Banning word repetition beyond twice cures keyword stuffing: without it 'website' appears five times across a single Title and Description.
Working in Uzbek
For Uzbek pages add a line: 'Language is Uzbek, Latin script, no Cyrillic characters.' The model regularly mixes both scripts in one sentence, and without the explicit ban you get half-Cyrillic titles.
Check the suffixes. Generation gets Uzbek inflection wrong more often than Russian, especially possessive forms. Have a native speaker proofread each batch: ten minutes per fifty rows.
Do not translate the Russian Title into Uzbek. Query volumes differ between the two languages; generate from the Uzbek query itself, not from the Russian text.
Typical generation failures
First, the model invents facts: delivery times, guarantees, years in business. Scan every Description for concrete claims and cut anything you cannot back up.
Second, identical Descriptions across similar pages. Submit similar pages in one batch and add the requirement that each row must differ by at least one substantive element.
Third, character-based trimming that cuts a word in half. Run the output through a length counter and check how each line renders in a snippet preview.
Fitting it into the workflow
Export pages from Screaming Frog: URL, current Title, H1, page type. Add a column with the primary query from your keyword map and submit batches of twenty to thirty rows; larger batches lose the format.
Load the finished table back into the CMS and compare CTR in Google Search Console a week later for the changed pages. Rewrite by hand anything whose CTR dropped: generation is a draft, not a final edit.