← All guides

How to Write FAQ Answers: 10 Rewrites and a Free Checker

How to write FAQ answers: a weak answer starting with Great question next to a rewrite that starts with Yes

Short answer: To write an FAQ answer, put the answer itself in the first sentence: start with yes, no, a number or a name, then add the one condition or fact the reader needs. Use the words your buyers type, make the answer readable on its own, and cut openers like “Great question” and pointers like “see above.” Microsoft Bing’s writing guide suggests one or two sentences.

Tested on Nov 10, 2026. What we did: wrote 10 weak FAQ answers for a made-up bakery, rewrote each one, and ran both versions through our free script and through the GEO score in our own WordPress plugin (version 1.12.0). We also ran the script on the FAQPage markup of 8 pages that rank on Google or Bing for “how to write faq answers” and “how to write faqs”, and on the 55 FAQ answers on this blog. What we did not test: whether any search engine or AI assistant quotes these answers, any effect on rankings, and FAQ answers that exist only as page text without FAQPage JSON-LD.

What makes a good FAQ answer?

A good FAQ answer settles the question in its first sentence and still makes sense when it is copied somewhere else. Microsoft Bing put it plainly in an Oct 8, 2025 guide by Principal Product Manager Krishna Madhavan: aim for “One- to two-sentence responses that directly address a question” and “Sentences that make sense even when pulled out of context.”

The rest of the advice from the pages we read fits on one list:

  • Lead with the answer. Jimdo’s guide says to start answers to yes/no questions “with a “yes” or a “no”.”
  • Answer in full. The same guide says “Fully answer the question, don’t just link to a different page.”
  • Use facts, not adjectives. Microsoft’s guide warns that terms like “innovative or eco mean little without specifics” and tells writers to “anchor claims in measurable facts.”
  • Write the question the way people ask it. Jimdo’s guide says to avoid jargon and “write like your customers talk.”
  • Keep the list short. Towson University‘s web guidelines say FAQs “should ideally be limited to 10 questions and answers,” grouped under headers past that.

Microsoft’s own example shows the shape. Asked “How loud is the dishwasher?”, the answer is “It operates at 42 dB, which is quieter than most dishwashers on the market.” One sentence, one number, nothing to scroll back for.

How long should an FAQ answer be?

Microsoft Bing’s guide gives a sentence count, not a word count. The word counts you see come from writing guides, and they disagree:

SourceAdviceIts own FAQ answers
Microsoft Bing guide (Oct 8, 2025)“One- to two-sentence responses”No FAQ section
Go Beyond Driven“roughly 30 to 100 words”9 answers, 26 to 35 words
ScoutRival“roughly 40–90 words”7 answers, 49 to 59 words
Helply“keep it under 100 words”9 answers, 16 to 46 words
Word counts from our script, run on each page’s FAQPage JSON-LD on Nov 10, 2026.

Our 10 rewrites below run from 20 to 32 words. Seven are two sentences, the answer and then a condition, a reason or one more fact; rewrites 7, 9 and 10 are one sentence.

What are the most common FAQ answer mistakes?

Here are 10 we see often, each with a weak version and a rewrite. The bakery is made up, so the facts in the answers are examples to copy the shape of, not real policies.

MistakeWeak (question + answer)Rewrite
1. Stock opener before the answerDo you ship cakes?
Great question! Many customers ask us this, and we love that you want to share our cakes. Yes, we ship some cakes within the US.
Yes, we ship our pound cakes and loaf cakes anywhere in the contiguous US. Layer cakes with buttercream are pickup only, because they don't survive two days in a box.
2. It depends, with no conditionsHow long does a custom cake take?
It depends on a lot of factors, so it varies from order to order.
A custom cake takes 7 days from order to pickup. Wedding cakes over three tiers need 21 days, and we confirm the date by email within one business day.
3. The answer is buried after backstoryAre your cakes nut-free?
Since we opened our first oven on Maple Street, our bakers have always cared deeply about every family who walks through the door, including families managing food allergies, which is why we think carefully about ingredients, and the short answer is no.
No, our cakes are not nut-free. We bake with almonds and pecans in the same kitchen, so every item can contain traces of tree nuts.
4. Points at another part of the pageCan I change my order?
As mentioned above, changes follow the same rules as cancellations, so see above for details.
Yes, you can change flavor, size or message up to 72 hours before pickup by replying to your confirmation email. Changes inside 72 hours depend on what we have already baked.
5. Only sends the reader elsewhereWhat is your refund policy?
Visit our refund policy page.
We refund the full price if you cancel at least 72 hours before pickup, and 50% between 72 and 24 hours. Orders canceled less than 24 hours before pickup are not refunded.
6. Vague adjectives instead of factsHow do you package shipped cakes?
We use innovative, eco-friendly packaging that keeps every cake fresh.
Shipped cakes go in a sealed tin inside a recycled cardboard box with two ice packs. The tin keeps a loaf cake fresh for 5 days at room temperature.
7. Question in company words, not buyer wordsWhat is our order fulfillment window?
Our order fulfillment window is 2 business days from payment confirmation.
How fast will my order ship?
We ship within 2 business days of payment, Monday to Thursday, so cakes never sit in a warehouse over a weekend.
8. Stacked hedgesCan you make a gluten-free cake?
We may possibly be able to make some gluten-free options in certain cases, but this could potentially vary.
Yes, we bake a gluten-free chocolate cake and a gluten-free lemon loaf every Friday. Our kitchen also uses wheat flour, so we can't promise they are safe for celiac disease.
9. Two questions in one answerDo you deliver?
We deliver within 10 miles for $15. Also, our gift cards never expire and can be used online or in person, and we offer a 10% discount for teachers.
Yes, we deliver within 10 miles of the bakery for $15, Tuesday to Saturday between 10 AM and 4 PM.
10. A changing fact with no dateWhat are your holiday hours?
Our holiday hours change every year, so they are a little different around the holidays.
For the 2026 holidays we close at 2 PM on December 24, stay closed on December 25 and January 1, and keep normal hours on every other day.
Rewrite 7 fixes the question, not the answer: buyers type “How fast will my order ship?”, not “order fulfillment window.”

Some fixes cut words and some add facts. Rewrite 1 drops 17 words of warm-up. Rewrite 9 deletes the gift-card and discount sentence, which answers questions nobody asked here and belongs under its own questions. Rewrite 10 adds the year, because the weak answer itself says the hours change every year.

Can a script catch weak FAQ answers?

Some of them. Our free script, shown further down, flagged 6 of the 10 weak answers and none of the 10 rewrites. It caught the stock opener, the bare “It depends”, the 42-word buried lead, “As mentioned above”, the answer that only says “Visit our refund policy page”, and the vague packaging line.

It missed mistakes 7 to 10: company jargon in the question, stacked hedges, a second topic in the answer, and a missing date. None of those four is on its list of checks, so a person has to read for them.

We also ran the same 20 answers through the GEO score in our own plugin, AI FAQ Schema 1.12.0, to see whether it agreed. It is our own rule set, not a measure of whether any AI quotes you, and it has gaps:

MistakeWeakRewrite
1. Stock opener7585
2. It depends50100
3. Buried answer7575
4. Points elsewhere on the page60100
5. Only a link65100
6. Vague adjectives75100
7. Company words9090
8. Stacked hedges7585
9. Two topics9090
10. No date7590
GEO score out of 100, one answer at a time, using the analyzer code from the plugin’s block.js.

The score went up for 7 rewrites and stayed flat for 3. It did not treat “Great question!” as filler, because that opener is not on its list. It docked the nut-free rewrite because “No, our cakes are not nut-free.” is 6 words, when the plugin wants a first sentence of 8 to 60 words, and because the answer has no number in it. And it gave Microsoft’s dishwasher example 75, docking it for starting with “It” and for being a single sentence. So treat any score, ours included, as a list of lines to reread.

Do the top “how to write FAQs” pages follow their own advice?

Mostly, yes. We scanned 8 ranking pages: 5 from Google page one and 3 from Bing’s top 10. Four carry FAQPage markup, with 28 answers between them. Our script flagged none of the 28. ScoutRival’s answers stay inside its own 40 to 90 words and Helply’s stay under 100; Go Beyond Driven’s run 26 to 35 words against its “roughly 30 to 100.”

What is out of date is the schema advice around them:

  • Go Beyond Driven says “Google has limited how often FAQ rich results appear in search” and suggests testing with Google’s Rich Results Test.
  • ScoutRival says “Google has narrowed where FAQ rich results appear.”
  • Forzur says “Google’s free Rich Results Test will flag errors.”
  • RicketyRoo says FAQ markup means “your FAQs can appear directly in search results.”

Google’s Search Central changelog says the FAQ rich result would “no longer appear in Google Search starting May 7, 2026,” and Google removed the FAQ documentation in June 2026. Helply was the one page we read that gives the May 7 date. When we tested FAQPage in the Rich Results Test for an earlier post, it reported “No items detected.”

Did our own FAQ answers pass?

Not all of them. The script read 55 FAQ answers across our 10 earlier posts and flagged 3. Two have long first sentences: our list of AI crawlers answer opens with a 46-word sentence, and one answer about duplicate FAQ schema opens with 53 words.

The third flag is “It depends” in “Which AI crawlers should I block?” That answer goes straight on to name which crawler to block for which goal, so the opener is a style choice, not a missing answer. That is why the script calls its results flags: it can tell you where to look, not whether the answer is wrong.

How do I check my own FAQ answers?

Save the script below as faq-answer-check.py and run python3 faq-answer-check.py https://your-site.com/page/. It reads every FAQPage in the page’s JSON-LD, also inside an @graph, and prints each answer’s word count, the length of its first sentence and any flags. It needs Python 3.8 or newer and nothing else; it uses certifi’s CA list when certifi is installed. To check drafts before they go live, pass a JSON file of question and answer pairs instead of a URL.

#!/usr/bin/env python3
"""faq-answer-check.py - flag FAQ answers that bury the answer, lean on other parts
of the page, or use vague words.

Usage:
  python3 faq-answer-check.py https://example.com/page/      # reads FAQPage JSON-LD
  python3 faq-answer-check.py faqs.json                       # [{"question": "...", "answer": "..."}]
  python3 faq-answer-check.py --json URL_OR_FILE              # machine-readable output

Checks (each is a flag to review, not a verdict):
  opener     first sentence starts with a stock opener ("Great question", "It depends", "Well,")
  long-lead  first sentence is longer than 40 words
  refers     answer points at another part of the page ("see above", "click here", "as mentioned")
  vague      answer uses a vague adjective with no fact attached (innovative, seamless, world-class)
  pointer    answer is under 15 words and only sends the reader elsewhere ("Visit our ...")
It also reports word counts. Python 3.8+, standard library; uses certifi's CA list
when certifi is installed.
"""
import html, json, re, ssl, sys, urllib.request

OPENERS = ("great question", "good question", "that's a great question", "it depends",
           "well,", "so,", "basically", "essentially", "actually", "in order to",
           "it is important to", "it's important to", "as you may know", "thanks for asking")
REFERS = ("see above", "see below", "as mentioned", "as discussed", "as noted", "click here",
          "on this page", "the section above", "the section below", "refer to")
VAGUE = ("innovative", "seamless", "world-class", "best-in-class", "cutting-edge",
         "state-of-the-art", "industry-leading", "revolutionary", "game-changing", "eco-friendly")
POINTERS = ("visit our", "see our", "check out our", "contact us", "read our", "go to our")


def ctx():
    try:
        import certifi
        return ssl.create_default_context(cafile=certifi.where())
    except ImportError:
        return ssl.create_default_context()


def text(v):
    if isinstance(v, list):
        v = v[0] if v else ""
    if isinstance(v, dict):
        v = v.get("text", "")
    v = re.sub(r"<[^>]+>", " ", html.unescape(str(v)))
    return re.sub(r"\s+", " ", v).strip()


def walk(node, out):
    """Collect Question/Answer pairs from any FAQPage, also inside @graph."""
    if isinstance(node, list):
        for n in node:
            walk(n, out)
    elif isinstance(node, dict):
        t = node.get("@type")
        types = t if isinstance(t, list) else [t]
        if "FAQPage" in types:
            ents = node.get("mainEntity") or []
            for q in ents if isinstance(ents, list) else [ents]:
                if isinstance(q, dict):
                    out.append({"question": text(q.get("name", "")),
                                "answer": text(q.get("acceptedAnswer", ""))})
        for v in node.values():
            if isinstance(v, (list, dict)):
                walk(v, out)


def load(src):
    if not src.startswith("http"):
        return json.load(open(src, encoding="utf-8"))
    req = urllib.request.Request(src, headers={"User-Agent": "faq-answer-check/1.0"})
    page = urllib.request.urlopen(req, context=ctx(), timeout=30).read().decode("utf-8", "replace")
    faqs = []
    for block in re.findall(r"(?is)<script[^>]*application/ld\+json[^>]*>(.*?)</script>", page):
        try:
            walk(json.loads(block), faqs)
        except ValueError:
            pass
    return faqs


def words(s):
    return len(re.findall(r"\b[\w'-]+\b", s))


def check(q, a):
    first = re.split(r"(?<=[.!?])\s+", a.strip(), maxsplit=1)[0]
    low = a.lower()
    flags = []
    if low.startswith(OPENERS):
        flags.append("opener")
    if words(first) > 40:
        flags.append("long-lead")
    if any(r in low for r in REFERS):
        flags.append("refers")
    if any(re.search(r"\b" + re.escape(v) + r"\b", low) for v in VAGUE):
        flags.append("vague")
    if words(a) < 15 and any(p in low for p in POINTERS):
        flags.append("pointer")
    return {"question": q, "words": words(a), "first_sentence_words": words(first), "flags": flags}


def main(argv):
    as_json = "--json" in argv
    srcs = [a for a in argv if a != "--json"]
    if not srcs:
        sys.exit(__doc__)
    report = {}
    for src in srcs:
        try:
            faqs = load(src)
        except Exception as e:  # report, don't crash on one bad source
            report[src] = {"error": str(e)}
            continue
        report[src] = [check(f.get("question", ""), f.get("answer", "")) for f in faqs]
    if as_json:
        print(json.dumps(report, indent=2))
        return
    for src, rows in report.items():
        print(f"\n{src}")
        if isinstance(rows, dict):
            print("  could not be checked:", rows["error"])
            continue
        if not rows:
            print("  no FAQPage JSON-LD found")
        for r in rows:
            print(f"  [{', '.join(r['flags']) or 'ok'}] {r['words']}w (lead {r['first_sentence_words']}w)  {r['question'][:70]}")


if __name__ == "__main__":
    main(sys.argv[1:])

Here is its output on the 10 weak answers and the 10 rewrites from this post:

rewrites-weak.json
  [opener] 25w (lead 2w)  Do you ship cakes?
  [opener] 14w (lead 14w)  How long does a custom cake take?
  [long-lead] 42w (lead 42w)  Are your cakes nut-free?
  [refers] 15w (lead 15w)  Can I change my order?
  [pointer] 5w (lead 5w)  What is your refund policy?
  [vague] 10w (lead 10w)  How do you package shipped cakes?
  [ok] 11w (lead 11w)  What is our order fulfillment window?
  [ok] 18w (lead 18w)  Can you make a gluten-free cake?
  [ok] 29w (lead 7w)  Do you deliver?
  [ok] 15w (lead 15w)  What are your holiday hours?

rewrites-strong.json
  [ok] 30w (lead 14w)  Do you ship cakes?
  [ok] 29w (lead 10w)  How long does a custom cake take?
  [ok] 25w (lead 6w)  Are your cakes nut-free?
  [ok] 31w (lead 20w)  Can I change my order?
  [ok] 32w (lead 21w)  What is your refund policy?
  [ok] 29w (lead 16w)  How do you package shipped cakes?
  [ok] 21w (lead 21w)  How fast will my order ship?
  [ok] 30w (lead 14w)  Can you make a gluten-free cake?
  [ok] 20w (lead 20w)  Do you deliver?
  [ok] 28w (lead 28w)  What are your holiday hours?

If a site blocks the script, save the page from your browser, copy the questions and answers into a JSON file, and pass the file.

Will better FAQ answers get me into AI answers?

Neither Google nor Microsoft promises it. Google’s AI features guide says “There are no additional requirements to appear in AI Overviews or AI Mode, nor other special optimizations necessary.” Microsoft’s guide says “nothing guarantees selection.”

What Microsoft does say is that “Assistants can often lift these pairs word for word into AI-generated responses.” A clear answer is the version you would want lifted. Write it for the person reading the FAQ, and it is ready for either case. For how FAQ markup itself behaves now, see Does FAQ Schema Still Work in 2026? and our FAQ schema example.

Where does our free plugin fit?

FAQ Schema & AI FAQ Generator is our free WordPress plugin. Its FAQ block shows your questions on the page, writes FAQPage JSON-LD from the same text, and gives each FAQ set an SEO score and a GEO score. As the test above shows, the GEO score misses some weak answers and docks some good short ones, so read its warnings with the list in this post next to you. Not on WordPress? Our free FAQ schema generator builds the same FAQPage code in your browser.

How it works, step by step: Free AI FAQ Generator Plugin for WordPress.

FAQs

How long should an FAQ answer be?

One or two sentences, if you follow Microsoft Bing's guide. Microsoft Bing's Oct 8, 2025 guide suggests one- to two-sentence answers, and writing guides suggest ranges such as 30 to 100 or 40 to 90 words. Our 10 rewrites run from 20 to 32 words.

Should an FAQ answer start with yes or no?

Yes, when the question is a yes/no question. Put the yes or no first, then the condition that matters, as in "Yes, we deliver within 10 miles for $15." Jimdo's FAQ guide gives the same advice.

Can I just link to another page in an FAQ answer?

Not on its own. An answer like "Visit our refund policy page" makes the reader click to learn anything. Give the answer in one or two sentences first, then add the link for details.

How do I write FAQ questions?

Write each question in the words your buyers use, as one question per entry. Ask "How fast will my order ship?" rather than "What is our order fulfillment window?", and split a question that covers two topics into two entries.

Does writing better FAQ answers help with AI Overviews or ChatGPT?

Neither Google nor Microsoft promises it. Google says there are no additional requirements or special optimizations for AI Overviews and AI Mode, and Microsoft says nothing guarantees selection. Clear, self-contained answers are what Microsoft describes assistants lifting, so write for readers first.

Try FAQ Schema & AI FAQ Generator free

Paste your FAQs, see your SEO and GEO scores, and publish with FAQPage schema. It also serves an llms.txt and lets you pick which AI crawlers can read your site.

  • No API key required
  • Works with any theme
  • Free on WordPress.org
Get it on WordPress.org

Want a feature? Ask for it.

The plugin is built around what users ask for. Tell us what’s missing, what broke, or what you’d like us to write about next.