Skip to main content
How-To9 min read

The 'we' to 'I' problem: how plural voice quietly kills your AI-search citability

Most solo-operator agency sites have a voice problem. The brand identity is one person. The copy is plural. "We deliver fixed-price websites." "Tell us about the business." "We'll send a quote." The mismatch reads as harmless marketing instinct: we sounds more credible than I, more like a real company. It isn't harmless. It silently drops your AI-search citability score, and on a brand-new domain you can't afford the hit.

What the audit said

I ran a full GEO audit on cweihan.com the day I launched it. The blog posts scored 84 to 88 on citability. The service pages, same domain, same author, written in the same week, scored 58 to 72. The technical signals were identical: same schema, same crawler access, same SSR. The difference was voice.

Blog post intros opened with claims:

"In Malaysia, WhatsApp isn't a channel. It's the channel. 93% of Malaysian internet users are on WhatsApp."

Service page intros opened with framing:

"Design, build, SEO, WhatsApp, brand, copy, ongoing care. Pick one. Or stack them in a project tier and pay one invoice."

Both passages are technically fine for a human reader. Only one is liftable as an AI-search answer to "what services does cweihan offer". The fragment-y service intro is missing two things AI engines need: the brand entity as a subject ("cweihan offers...") and a single complete sentence that can stand alone as an answer.

The voice mismatch made it worse. The home page positions cweihan as "Wei Han, one person, end-to-end". The services page said "We'll recommend the right approach". Google's entity model has to reconcile two contradictory signals: solo brand, plural staff. Some of the time, it picks the cautious read and demotes the citation.

Why AI search cares about voice consistency

Three reasons, all observable.

Entity resolution. Modern AI search engines build a knowledge graph of the entity the page represents. Schema.org markup establishes the entity in machine-readable form, but body copy reinforces it. Conflicting signals between schema (Organization with one founder) and prose (we, our team, us) introduce noise. Lower confidence equals lower rank.

Citation extraction. When ChatGPT, Claude, or Perplexity quote a website, they prefer passages that can stand alone as factual claims. "cweihan is the one-person practice of Wei Han, based in Kuala Lumpur. Fixed-price websites for Malaysian SMEs in 10 to 21 days." reads as a definitional answer. "We work with small business owners." reads as a fragment that needs context the AI engine doesn't have.

E-E-A-T credibility. Google's quality guidelines reward sites where the author is identifiable. A solo operator with a real name and a real LinkedIn profile scores higher on Authoritativeness than an anonymous "we". I built this. Here are the results. Here's how I work. is a stronger trust signal than Our team delivers. when the team is one person.

The fix took 40 minutes

I'd been writing in plural voice without thinking about it, partly because the Northwork-starter template I forked already had "we" everywhere. Once I noticed, the cleanup was a single afternoon. Here's the actual regex pass I ran:

import re

files = [
    "src/app/contact/page.tsx",
    "src/app/how-i-work/page.tsx",
    "src/app/work/page.tsx",
    "src/content/services/index.ts",
    "src/components/sections/service-detail.tsx",
    "src/components/sections/pricing-comparison.tsx",
    # ... 11 files total
]

subs = [
    (r"\bWe'll\b", "I'll"),
    (r"\bwe'll\b", "I'll"),
    (r"\bWe've\b", "I've"),
    (r"\bwe've\b", "I've"),
    (r"\bWe're\b", "I'm"),
    (r"\bwe're\b", "I'm"),
    (r"\bWe\b", "I"),
    (r"\bwe\b", "I"),
    (r"\bUs\b", "Me"),
    (r"\bus\b", "me"),
    (r"\bOur\b", "My"),
    (r"\bour\b", "my"),
]

for path in files:
    with open(path) as f:
        text = f.read()
    for pat, rep in subs:
        text = re.sub(pat, rep, text)
    with open(path, "w") as f:
        f.write(text)

Word boundaries (\b) are doing the safety work. Without them you'd mangle "trust", "campus", "must", "use", any word that happens to contain "we" or "us" as a substring. With them, the substitutions are surgical.

Total: 50 substitutions across 11 files. Voice singularized site-wide in roughly 40 minutes including manual review.

The edge cases worth knowing

Three traps caught me on first pass.

Blog posts written in period-correct voice. Three blog posts on cweihan.com were written when the agency identity was still plural. I intentionally left them alone. Rewriting historical copy for a positioning shift breaks the implicit contract with readers who saw the original. Forward-looking voice change only.

FAQ answers that reference "our team" or "our process". These need judgment. "Our team handles hosting" becomes "I handle hosting", which is fine. But "Our process is..." sometimes works better as "The process is..." when the sentence isn't about agency. Watch for tone shifts.

Possessives that lose meaning when singularized. "Ours" rarely becomes "Mine" cleanly in a business context. "Our work" is fine becoming "My work". "Ours is faster than the competition" reads weird as "Mine is faster than the competition". I rewrote a few by hand: "My work ships faster than the competition".

The bonus discovery

While verifying the regex pass output, I caught a separate bug the GEO audit didn't flag: telephone: "++60193688489" rendering on every page's LocalBusiness JSON-LD. The schema builder did `+${env}`, but the env value already had a plus. Result: a malformed E.164 number in every schema block, on every page, since launch.

The lesson generalises: when you're running an audit, eyeball the raw HTML even on findings the agent reports as "already good". The audit agent flagged 5 schema fields as problems. 4 of them were false alarms. The one real bug it missed was visible on first inspection.

Did it actually move the score?

The full GEO re-audit runs 48 hours after the voice pass, which is too soon to publish. What's observable already: ChatGPT's web-search tool now returns cweihan.com when asked "web designer Malaysia solo operator", where it previously returned an "I couldn't find a clear answer" response. Perplexity surfaces the home-page lead verbatim. Google's knowledge panel hasn't generated yet but the schema now contains a coherent single entity for the AI engines to render against.

That's anecdotal, not benchmarked. The structural argument is the load-bearing one: when your brand is solo, every place a human reader sees "we" is a place an AI engine sees a contradiction. Removing the contradiction can't hurt, and on a brand-new domain where every signal counts, it's nearly free.

How to do this on your own site

  1. Audit yourself first. Open ChatGPT, ask "tell me about [your brand]". If the answer is fuzzy or makes you sound like a multi-person team, your voice signals are mixed.
  2. Decide your voice posture. If you're a solo operator, commit to singular voice everywhere. If you have one collaborator who's genuinely co-equal, plural is fine. Be specific ("Wei Han and Sarah work together on...") rather than vague ("our team").
  3. Grep before you regex. Run grep -rnE "\\bwe\\b|\\bWe\\b|\\bus\\b|\\bUs\\b|\\bour\\b|\\bOur\\b" src/ and read the actual matches. Some will be in third-party content you can't change.
  4. Run the substitutions. The Python script above is reusable. Word boundaries protect the unintended matches.
  5. Manual review the diff. Edge cases like "ours" need eyes. Tone shifts in long sentences sometimes need a rewrite, not just a substitution.
  6. Update the schema. If your site emits Organization JSON-LD, make sure the founder field is set and sameAs links to your real personal profiles (LinkedIn, X, GitHub). The schema and the prose now both say one person.

It's not a project. It's a Saturday afternoon. The next time someone asks ChatGPT about your work, the answer it pulls will say what you actually are.

If you want a second pair of eyes on your site's voice + schema before AI search engines crawl it next, send me a brief. I'll run the audit and ship the fixes within a week.

More questions?

Easier on a call than in a blog post.

Replying within 4 hours, weekdays