An incident that will happen to you
You ask an AI to build a landing page for a consultancy. It returns something polished, containing:
- "Trusted by 500+ enterprise clients"
- "Clients grow 3.2× on average"
- Three attributed testimonials with headshots and job titles
- A "2025 Best Service Provider" award badge
All fabricated. You supplied none of it.
Publish that without line-by-line verification and, in many jurisdictions, you've made false advertising claims. What makes it dangerous is how convincing it looks — invented numbers read more plausible than real ones, because they're chosen to be plausible.
Why the model does this
Because you asked for a high-converting landing page, and every high-converting landing page it has seen contains social proof. It is in completion mode, not fact mode. An empty slot reads as an incomplete task.
This isn't a bug. It's the absence of permission to leave things blank.
Guardrail 1: forbid fabrication explicitly
The basic move, and the highest-value one:
Factual constraints: do not invent any specific numbers, percentages,
client names, testimonials, awards, certifications, press mentions
or team member names. Output {{TBD}} for any fact not supplied,
and list every placeholder in a comment at the end of the page.
That last clause matters — making it collect the placeholders gives you a pre-launch checklist instead of a scavenger hunt through the markup.
Guardrail 2: separate structure from content
A stronger variant splits the two jobs:
You produce structure, styling and indicative copy. All indicative copy must be prefixed with
[SAMPLE], e.g.[SAMPLE] We help teams ship faster. Real copy will be supplied later.
The result is visually self-labelling — easier to scan than {{TBD}} markers buried in prose.
Guardrail 3: supply the real material
The complete fix is to give it actual facts:
Available facts (use only these; do not extend):
- Founded 2021
- Team of 8
- Case studies: a logistics company (nameable), a retail brand (anonymise)
- No industry awards
- No public client-count figure
Those last two lines carry weight. An explicit "none" constrains far better than an omission — left unmentioned, the model treats the slot as open season.
Guardrail 4: links, images and dependencies
Fabrication isn't limited to prose:
- References to image-host URLs that don't exist, producing broken images in production
- Invented social media links
- Imports of npm packages that were never published
Resource constraints: use local placeholder images or solid colour blocks;
never reference an external image host. All outbound links must come from
the list I supply — do not generate URLs. Use only the standard library
of {stack} plus the dependencies I list; import nothing else.
That last line also blocks hallucinated dependencies, which are common enough in generated code that attackers now register the invented package names.
The three-minute pre-launch check
However good your guardrails, before publishing:
- Search the page for every number — each one must trace back to a fact you supplied
- Search for every name, personal and corporate, testimonials included
- Click every link and load every image — 404s and broken images are the easiest thing to catch and the easiest thing to skip
Three minutes against a real legal exposure.
The complete guardrail block
Guardrails:
1. Invent no numbers, client names, testimonials, awards, certifications,
press mentions or team members. Unknown facts become {{TBD}},
listed together at the end.
2. Prefix indicative copy with [SAMPLE].
3. Use only the supplied fact list; items marked "none" stay empty.
4. Local placeholder images; only supplied outbound links;
only listed dependencies.
Commercial prompts on MotionSites carry these guardrails by default, so invented claims don't reach production.