Place2Page's AI copy was not grammatically wrong, but repeated patterns became obvious across multiple places. At first, it seemed like blocking words such as premium and special experience would solve it. The real issue was not the words themselves. It was unsupported claims. So I changed the final HTML contract from "write more impressively" to "write usefully from the provided place data."
Summary
- Problem: AI-generated landing page copy leaned on generic phrases such as "premium" and "special experience" instead of the actual place information.
- Decision: A grounding contract was more important than a forbidden-words list.
- Fix: Add copy quality constraints to the generation contract just before final HTML generation, and prioritize real business facts such as menu items, location, opening hours, and reservation links.
- Lesson: Good AI copy is less about more polished language and more about making fewer unsupported claims.
Context
Place2Page builds landing pages from place data. For a restaurant, the input may include menus, opening hours, photos, and reviews. For a salon, it may include reservation links and service information. From that data, the page title, intro copy, CTA, and visit information are generated.
The first outputs looked plausible. They had design, sections, and calls to action. But after reviewing several results, the same sentence patterns kept appearing.
Phrases like "premium experience," "unforgettable journey," and "crafted with care" showed up often. In Korean output, phrases like "특별한 경험", "최고의 가치", "프리미엄 공간", and "잊지 못할 순간" repeated too.
One or two examples may look acceptable. Across many places, the repetition quickly starts to read like AI-generated copy.
Problem
At first, this looked like a forbidden-words problem.
When certain words appear too often, it is natural to think blocking those words will help. Rules that avoid terms like "premium," "journey," and "crafted" do have some effect.
But a larger issue became clear.
The weak sentences were awkward not because of one specific word, but because they were not grounded in the actual place data. Instead of using information about the restaurant, menu, location, or reservation availability, the model leaned on pleasant but generic marketing language.
If menu data exists, "we offer a special experience" is weak. Showing real menu names, prices, reservation links, and location information is more trustworthy.
Initial Hypothesis
At first, I thought changing the meta prompt would be enough. If the meta prompt said "be more specific" and "do not exaggerate," final HTML should improve.
In practice, the final HTML stage inflated the language again. Even when the meta prompt stayed restrained, the last generation model pulled in familiar marketing copy while writing the landing page.
That pointed to the contract right before final HTML output. The last generation step needed a stronger rule: write only from the facts present in the input.
Evidence
When I later summarized this in the runbook, the record was fairly clear.
The problem notes mentioned repeated use of phrases in the "premium," "experience," and "special moment" family. Korean output also used phrases such as "특별한 경험", "최고의 가치", and "프리미엄 공간" without data support.
The first suspect was the meta prompt. But comparing the active generation rules showed that the meaningful production change happened in the final HTML contract. The important change was not a more emotional style instruction. It was adding a grounding constraint to the last generation step.
The final HTML prompt points in the same direction. When business facts are available, the visible copy should use concrete cues such as website, price level, opening hours, reservation links, menu items, and photos. The core instruction was not "write more emotionally." It was "make the facts in the input visible."
The evidence came down to three signals.
| Signal | Meaning |
|---|---|
| Repeated generic copy records | The issue was an unsupported sentence pattern, not one bad word. |
| Changed operating rule | The fix belonged in the final HTML prompt contract. |
| Business-facts rule | Better copy meant staying closer to data, not sounding grander. |
Implementation
The core fix was grounding, not a forbidden-words list.
The rules were roughly:
- Use the provided JSON data first: business name, category, location, opening hours, reviews, services, menu items, reservation URL, website, photos, and price level.
- Do not invent awards, origin stories, premium positioning, or emotional claims that are not present in the data.
- If information is unknown, do not fill it in with plausible-sounding copy. Write within what is known.
- Before returning headings and paragraphs, ask whether the sentence could be attached to almost any business.
Some avoid-list language still existed. But the goal was not "do not use this word." The goal was closer to "do not write unsupported sentences."
What Changed
After this rule, the copy direction changes.
Before, it was easy to get a sentence like this:
A special space that delivers an unforgettable premium experience.
It sounds plausible, but it can be attached to almost any place.
With stronger grounding, the direction becomes closer to this:
A pasta restaurant near Hongik University Station where reservations are available. Check signature menu items and opening hours before planning your visit.
The second sentence may look more ordinary. On an actual landing page, it is better. Users need concrete visit information and credible cues before abstract emotional language.
Lesson
"Improving AI copy quality" can sound like making sentences more impressive. In a real product, it was closer to the opposite.
Less invented copy mattered more than more polished copy. The important parts were not saying things absent from the data, avoiding the same phrasing across every place, and putting actionable information first.
This was closer to product writing than prompt engineering. Instead of telling the model, "make it sound good," the better instruction was, "make it useful using only what you know."
How I Would Judge This Next Time
When reviewing AI-generated copy, I will not look only at words. Before deciding which expressions to ban, I will ask why the sentence was possible. If the sentence is not grounded in input data, the fix belongs in the grounding contract more than in the writing style.
For each sentence, I would ask:
- Is this grounded in the provided data?
- Could this sentence be attached to any other place?
- Can it be shorter and more specific?
- Can a user take action based on this sentence?
Forbidden words can be useful. But a forbidden-words list does not create good copy by itself. The real issue is grounding.
