Writing sample for a fictional app, "Mirrorlark". Product features and prices are placeholders, not a real company's data.
SEO writing samples

From search to signup: two ways I'd write for an AI chat app

Mirrorlark is a made-up AI character chat app. Version A is a new blog article built from a keyword brief. Version B is a rewrite of an existing pricing page that gets visits but few upgrades. Both show my notes on why each choice was made.

A · New blog articleB · Existing page refreshHow I'd measure it
Version A

New article: "How to write an AI character that stays in character"

Goal: bring in people who already make characters on other apps, show them a better method, and invite them to try it in Mirrorlark.

1. Keyword brief

ItemChoiceWhy
Main keywordhow to write an AI characterA how-to search from people who already use character chat apps. Close to signup: they're about to build one.
SupportingAI character keeps breaking character · character description template · AI roleplay character tipsSame problem, different wording. One article can cover all of them instead of three thin posts.
Search intentInformational → trialThey want a method they can copy, not a product list. The CTA comes after the help.
FormatStep-by-step guide + copyable templateWhat ranks today is guides, so a listicle would miss the intent.
Volume / difficultyPull from Ahrefs or GSC before writingI left this blank on purpose. I don't guess numbers.

2. What's ranking now, and the gap

What I found (search done Nov 12, 2026)

Results are mostly community blogs and platform docs (Inworld's character guide, Anthropic's "keep Claude in character" doc). They agree that vague trait labels fail, and that example dialogue and clear limits help.

What's missing

Almost none show the same character before and after the fix, and few explain why characters drift in long chats. Some state limits for one app as if they apply everywhere. Our angle: one character, rewritten step by step, with a template that works on any app.

3. Title and meta

FieldTextLength
Title tagHow to Write an AI Character That Stays in Character (+ Template)64 chars
Meta descriptionVague traits make AI characters drift. See one character rewritten step by step, then copy a free template that keeps any character consistent.146 chars
URL/blog/write-ai-character-stays-in-characterShort, keyword first

4. The article

Yellow labels are my notes for the editor. They wouldn't be published.

Mirrorlark Blog · Guides · 7 min read

How to Write an AI Character That Stays in Character

You write a character. The first ten messages are great. By message forty, your grumpy ship captain is cheerful, polite and has forgotten his own ship's name.

That isn't bad luck. It usually happens because of how the character was written. Here's how to fix it, with one character rewritten step by step and a template you can copy.

Short answer: describe what your character does, not just what they are. Swap trait labels for if/then rules, add 3–5 short example replies in their voice, list what they won't talk about, and remove anything that contradicts itself. Answer block for AI Overviews + featured snippet

Why AI characters break character

Two things cause most drift:

  • Labels give the model nothing to act on. "Grumpy but kind" doesn't say what to do when someone asks for help. So the model falls back to its default: helpful and polite.
  • Long chats bury the description. As the conversation grows, the newest messages carry more weight than the setup you wrote at the start. If the chat drifts, the character drifts with it.

You can't change how the model reads a long chat, but you can write a description that's harder to forget.

Before: a typical character description

Name: Captain Rook
Personality: grumpy, sarcastic, secretly kind, loyal, brave.
He is a ship captain. He doesn't like people but he cares about his crew.
He is friendly to the user.

Spot the problem? "Doesn't like people" and "friendly to the user" pull in opposite directions. The model will pick one, and it's usually the friendly one.

Step 1: Turn every trait into a rule

For each trait, ask "what does this look like in a reply?" and write that down.

  • Grumpy → If the user asks a simple question, Rook answers in one short sentence and complains about the interruption.
  • Secretly kind → If the user is upset, Rook drops the sarcasm for one line, then covers it with a gruff joke.

Step 2: Show the voice with example replies

Three to five short exchanges teach tone better than another paragraph of adjectives. Keep them short, and make each one show something different: a joke, a refusal, a soft moment.

Step 3: Set clear limits

Write down what the character doesn't know or won't discuss. Rook has never heard of the internet. If asked, he's confused, not helpful. Limits like this keep the character inside their world. Internal link → "Building your character's world" guide

Step 4: Cut contradictions and filler

Read the description once, looking only for lines that fight each other. Then check your app's character length limit. Every app sets its own, so check the help page instead of trusting a number from another app's guide. Source check: limits differ by platform, so I didn't state one

After: the same character, rewritten

Captain Rook commands the cargo ship Gray Heron. He's tired, blunt
and fiercely protective of his crew.

How he replies:
- Simple question → one short sentence, plus a complaint.
- User is upset → one honest, gentle line, then a gruff joke.
- User flatters him → he gets suspicious and asks what they want.

He never: uses modern slang, mentions phones or the internet,
or calls anyone "friend" in the first 20 messages.

Example:
User: Can you help me read this map?
Rook: Upside down. Give it here. ...Who taught you to navigate, a goat?

Copy the template

[Name] is [role] in [place]. Core mood: [2-3 words].
How they reply:
- If [situation] → [behavior].
- If [situation] → [behavior].
- If [situation] → [behavior].
They never: [limit], [limit], [limit].
Examples: [3-5 short exchanges]

FAQ

How long should a character description be?
Long enough for the rules and examples, and no longer. Trim adjectives first.

My character still drifts after 50+ messages. What now?
Remind the character of one key rule in the chat ("Rook, you're still grumpy, remember?"). It brings the description back into recent memory. FAQ schema

Try Captain Rook in Mirrorlark. Paste the template into Mirrorlark's character builder and chat with your character in under two minutes.

Build your character free Verify with product team: builder name, free tier

5. Sources I used, and how much I trust them

SourceUsed forTrust
Inworld docs: Crafting a Character, Core DescriptionListing topics a character won't discuss; contradictions cause odd repliesHigh: platform docs
Anthropic docs: Keep Claude in characterGeneral character-prompt practiceHigh: model maker docs
Community blogs (Character AI guides)The common advice to use if/then rules and example dialogueMedium: cross-checked, not quoted as fact
"Definitions get cut after X characters" claimsNot usedLow: only true for one app, unconfirmed

6. Original insight: a small test I'd run before publishing

Make the "Before" and "After" Captain Rook in Mirrorlark. Send both the same 50-message script. Count how many replies break character (polite, modern slang, forgot the ship). Publish the real counts in the article with the script so readers can repeat it.

VersionOff-character replies (of 50)First break at message
Beforeto be testedto be tested
Afterto be testedto be tested

These are left blank because the test hasn't been run. A real number from our own app would be the article's main selling point.

Version B

Refresh: the "Mirrorlark Plus" pricing page

The situation: the page gets search visits for "Mirrorlark free vs Plus", but few people upgrade. It's not a new article. It's the existing page, fixed.

1. What I'd check first in Search Console

CheckWhat it tells usDecision
Queries the page shows up forAre people asking "is it worth it", "limits", "cancel"?Answer those exact questions on the page
Impressions high, click rate lowTitle/meta don't match the searchRewrite title and meta
Clicks fine, few upgradesThe page doesn't answer the question or the CTA is weakRewrite intro, comparison and CTA
Searches for "cancel Mirrorlark Plus"A trust question, not a sales oneAdd an honest cancel FAQ (builds trust, lowers refunds)

2. Before → after

Before

Title: Plus | Mirrorlark

Intro: Unlock the ultimate AI experience with Mirrorlark Plus! Take your chats to the next level with premium features you'll love.

CTA: Upgrade now

After

Title: Mirrorlark Free vs Plus: What You Get and Is It Worth It?

Intro: Free is enough if you chat a few times a week. Plus is for people who hit the daily message limit or want characters to remember past chats. Here's the difference, line by line.

CTA: Start Plus with [trial length], cancel any time in Settings

Why: the old intro is filler that answers nothing. The new one answers "is it worth it" in the first two lines, which is what the searcher asked, and it's honest about who doesn't need Plus. That builds the trust that gets upgrades.

3. Comparison table (with claim checks)

FeatureFreePlusCheck before publishing
Messages per day[limit][limit or unlimited]Confirm with product. Don't write "unlimited" if there's a fair-use cap
Character memoryCurrent chatAcross chatsTest it myself in the app
Reply speedStandardPriorityOnly say "faster" if it's measured
Price$0[price]/moMatch the checkout page exactly

4. Internal links I'd add

How I'd measure it: visitors, signups, paying users

Traffic alone can mislead. An article can bring 5,000 visits and zero customers. I'd report the three numbers separately.

StageMetricWhere it comes fromVersion A goalVersion B goal
AttractClicks, impressions, average positionSearch ConsoleMainSupporting
SignupAccounts created after readingAnalytics event / signup sourceMainSupporting
PaidUpgrades to PlusBilling data joined to signup sourceBonusMain

When to update, investigate or write new

  • Update when a page ranks 8–20 for its keyword. Close to page 1, so a refresh is the cheapest win.
  • Investigate when clicks drop suddenly. Check if Google changed what it shows (AI Overview, new competitor) before rewriting anything.
  • Write new only when no existing page matches the search intent. Otherwise two of our pages compete for the same search.