{"id":8059,"date":"2026-06-07T03:02:13","date_gmt":"2026-06-07T03:02:13","guid":{"rendered":"https:\/\/singularity.digital\/?page_id=8059"},"modified":"2026-06-08T16:13:35","modified_gmt":"2026-06-08T16:13:35","slug":"query-fan-out-tool","status":"publish","type":"page","link":"https:\/\/singularity.digital\/pt\/resources\/query-fan-out-tool\/","title":{"rendered":"Query Fan-Out Tool"},"content":{"rendered":"\n<script>\n  const QFO_CONFIG = {\n    apiUrl: 'https:\/\/qfo-tool.patrick-4a6.workers.dev',\n    posthogKey: 'phc_wRGNL7WNutvE3MwJPHZr5jy9pUduaMJuwfnRNgYMYSzr',\n    posthogHost: 'https:\/\/us.i.posthog.com',\n  };\n<\/script>\n\n<!-- \u2500\u2500 Styles \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n<style>\n  \/* Scoped to #qfo-tool to avoid clashing with WordPress theme styles *\/\n  #qfo-tool {\n    --primary: #1a1a2e;\n    --accent: #e94560;\n    --border: #e5e7eb;\n    --radius: 8px;\n    --shadow: 0 1px 4px rgba(0,0,0,0.07);\n    --text: #111827;\n    --muted: #6b7280;\n    --success: #059669;\n    font-family: inherit;\n    color: var(--text);\n    max-width: 800px;\n    margin: 0 auto;\n    padding: 0 16px 64px;\n  }\n\n  #qfo-tool * { box-sizing: border-box; }\n\n  \/* Header *\/\n  .qfo-header { margin-bottom: 32px; }\n  .qfo-header h1 { font-size: clamp(1.6rem, 4vw, 2.2rem); margin: 0 0 10px; color: var(--primary); }\n  .qfo-header p  { margin: 0 0 8px; color: #ffffff; line-height: 1.6; }\n  .qfo-header a  { color:ffffff var(--accent); text-decoration: none; }\n  .qfo-header a:hover { text-decoration: underline; }\n\n  \/* Input area *\/\n  .qfo-input-wrap { margin-bottom: 32px; }\n  .qfo-textarea {\n    width: 100%;\n    padding: 14px 16px;\n    border: 1.5px solid var(--border);\n    border-radius: var(--radius);\n    font-family: inherit;\n    font-size: 1rem;\n    line-height: 1.5;\n    resize: vertical;\n    min-height: 72px;\n    transition: border-color .15s;\n    color: var(--text);\n  }\n  .qfo-textarea:focus { outline: none; border-color: var(--primary); }\n  .qfo-textarea:disabled { background: #f9fafb; cursor: not-allowed; }\n\n  .qfo-input-meta {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    margin-top: 6px;\n  }\n  .qfo-char-count { font-size: 0.8rem; color: #ffffff; }\n  .qfo-char-count.over { color: var(--accent); font-weight: 600; }\n\n  .qfo-submit {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    background:#F4EF01;\n    color: #12293c;\n    border: none;\n    border-radius: var(--radius);\n    padding: 12px 24px;\n    font-size: 1rem;\n    font-family: inherit;\n    font-weight: 600;\n    cursor: pointer;\n    transition: opacity .15s;\n    margin-top: 12px;\n  }\n  .qfo-submit:hover:not(:disabled) { opacity: 0.88; }\n  .qfo-submit:disabled { opacity: 0.6; cursor: not-allowed; }\n\n  \/* Spinner *\/\n  .qfo-spinner {\n    width: 18px; height: 18px;\n    border: 2.5px solid rgba(255,255,255,0.4);\n    border-top-color: #fff;\n    border-radius: 50%;\n    animation: qfo-spin .7s linear infinite;\n    display: none;\n  }\n  @keyframes qfo-spin { to { transform: rotate(360deg); } }\n\n  \/* Error *\/\n  .qfo-error {\n    background: #fef2f2;\n    border: 1px solid #fecaca;\n    border-radius: var(--radius);\n    padding: 14px 16px;\n    color: #b91c1c;\n    margin-top: 16px;\n    display: none;\n  }\n\n  \/* Results *\/\n  #qfo-results { display: none; }\n\n  .qfo-results-header {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    flex-wrap: wrap;\n    gap: 10px;\n    margin-bottom: 16px;\n  }\n  .qfo-results-summary { font-weight: 600; color: #ffffff; }\n\n  .qfo-copy-all {\n    background: transparent;\n    border: 1.5px solid #ffffff;\n    color: #ffffff;\n    border-radius: var(--radius);\n    padding: 7px 14px;\n    font-size: 0.875rem;\n    font-family: inherit;\n    font-weight: 600;\n    cursor: pointer;\n    transition: background .15s, color .15s;\n  }\n  .qfo-copy-all:hover { background: #ffffff; color: var(--primary); }\n\n  \/* Table *\/\n  .qfo-table {\n    width: 100%;\n    border-collapse: collapse;\n    background: #fff;\n    border-radius: var(--radius);\n    overflow: hidden;\n    box-shadow: var(--shadow);\n    font-size: 0.95rem;\n  }\n  .qfo-table thead tr {\n    background: var(--primary);\n    color: #fff;\n  }\n  .qfo-table th {\n    padding: 12px 16px;\n    text-align: left;\n    font-size: 0.75rem;\n    font-weight: 700;\n    text-transform: uppercase;\n    letter-spacing: .07em;\n    white-space: nowrap;\n  }\n  .qfo-table td {\n    padding: 12px 16px;\n    border-bottom: 1px solid var(--border);\n    vertical-align: middle;\n    color: var(--text);\n  }\n  .qfo-table tbody tr:last-child td { border-bottom: none; }\n  .qfo-table tbody tr:hover { background: #f9fafb; }\n  .qfo-table td:first-child { width: 100%; line-height: 1.4; }\n  .qfo-table td:nth-child(2) { white-space: nowrap; }\n  .qfo-table td:nth-child(3) { white-space: nowrap; }\n\n  .qfo-badge {\n    display: inline-block;\n    background: #f3f4f6;\n    color: var(--muted);\n    border-radius: 4px;\n    padding: 3px 8px;\n    font-size: 0.7rem;\n    font-weight: 700;\n    text-transform: uppercase;\n    letter-spacing: .05em;\n    white-space: nowrap;\n  }\n\n  .qfo-copy-btn {\n    background: transparent;\n    border: 1px solid var(--border);\n    border-radius: var(--radius);\n    padding: 5px 12px;\n    font-size: 0.8rem;\n    font-family: inherit;\n    cursor: pointer;\n    white-space: nowrap;\n    color: var(--muted);\n    transition: border-color .15s, color .15s;\n  }\n  .qfo-copy-btn:hover { border-color: var(--primary); color: var(--primary); }\n  .qfo-copy-btn.copied { color: var(--success); border-color: var(--success); }\n\n  \/* PRF sources accordion *\/\n  .qfo-sources { margin-top: 24px; }\n  .qfo-sources-toggle {\n    background: none;\n    border: none;\n    padding: 0;\n    font-family: inherit;\n    font-size: 0.875rem;\n    color: #ffffff;\n    cursor: pointer;\n    display: flex;\n    align-items: center;\n    gap: 6px;\n  }\n  .qfo-sources-toggle:hover { color: #ffffff; opacity: 0.8; }\n  .qfo-sources-arrow { transition: transform .2s; display: inline-block; }\n  .qfo-sources-toggle.open .qfo-sources-arrow { transform: rotate(90deg); }\n  .qfo-sources-list {\n    display: none;\n    margin-top: 10px;\n    padding: 12px 16px;\n    background: #f9fafb;\n    border: 1px solid var(--border);\n    border-radius: var(--radius);\n  }\n  .qfo-sources-list a {\n    display: block;\n    font-size: 0.8rem;\n    color: var(--accent);\n    text-decoration: none;\n    margin-bottom: 5px;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n  }\n  .qfo-sources-list a:hover { text-decoration: underline; }\n  .qfo-sources-list a:last-child { margin-bottom: 0; }\n\n  @media (max-width: 640px) {\n    .qfo-table th:nth-child(2),\n    .qfo-table td:nth-child(2) { display: none; }\n    .qfo-results-header { flex-direction: column; align-items: flex-start; }\n  }\n<\/style>\n\n<!-- \u2500\u2500 Markup \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n<div id=\"qfo-tool\">\n\n  <div class=\"qfo-header\">\n    <p>\n      Enter any search query to generate semantically diverse reformulations \u2014 the same query expansion technique Google uses internally.\n      Grounded in real search results for accuracy.\n    <\/p>\n    <p><a href=\"https:\/\/singularity.digital\/insights\/what-is-query-fan-out\/\">Learn how query fan-out works \u2192<\/a><\/p>\n  <\/div>\n\n  <div class=\"qfo-input-wrap\">\n    <textarea id=\"qfo-input\" class=\"qfo-textarea\" placeholder=\"e.g. best practices for technical SEO audits\" rows=\"2\" maxlength=\"520\"><\/textarea>\n    <div class=\"qfo-input-meta\">\n      <span class=\"qfo-char-count\" id=\"qfo-char-count\">0 \/ 500<\/span>\n    <\/div>\n    <button class=\"qfo-submit\" id=\"qfo-submit\">\n      <span class=\"qfo-spinner\" id=\"qfo-spinner\"><\/span>\n      <span id=\"qfo-btn-label\">Generate fan-out queries<\/span>\n    <\/button>\n  <\/div>\n\n  <div class=\"qfo-error\" id=\"qfo-error\"><\/div>\n\n  <div id=\"qfo-results\">\n    <div class=\"qfo-results-header\">\n      <span class=\"qfo-results-summary\" id=\"qfo-summary\"><\/span>\n      <button class=\"qfo-copy-all\" id=\"qfo-copy-all\">Copy all<\/button>\n    <\/div>\n    <div id=\"qfo-groups\">\n      <table class=\"qfo-table\">\n        <thead>\n          <tr>\n            <th>Query Reformulation<\/th>\n            <th>Category<\/th>\n            <th><\/th>\n          <\/tr>\n        <\/thead>\n        <tbody id=\"qfo-table-body\"><\/tbody>\n      <\/table>\n    <\/div>\n    <div class=\"qfo-sources\">\n      <button class=\"qfo-sources-toggle\" id=\"qfo-sources-toggle\">\n        <span class=\"qfo-sources-arrow\">\u25ba<\/span> Sources used for context\n      <\/button>\n      <div class=\"qfo-sources-list\" id=\"qfo-sources-list\"><\/div>\n    <\/div>\n  <\/div>\n\n<\/div>\n\n<!-- \u2500\u2500 Logic \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n<script>\n(function () {\n  'use strict';\n\n  const input        = document.getElementById('qfo-input');\n  const submitBtn    = document.getElementById('qfo-submit');\n  const spinner      = document.getElementById('qfo-spinner');\n  const btnLabel     = document.getElementById('qfo-btn-label');\n  const charCount    = document.getElementById('qfo-char-count');\n  const errorBox     = document.getElementById('qfo-error');\n  const resultsEl    = document.getElementById('qfo-results');\n  const summaryEl    = document.getElementById('qfo-summary');\n  const groupsEl     = document.getElementById('qfo-groups');\n  const tableBody    = document.getElementById('qfo-table-body');\n  const copyAllBtn   = document.getElementById('qfo-copy-all');\n  const sourcesToggle = document.getElementById('qfo-sources-toggle');\n  const sourcesList  = document.getElementById('qfo-sources-list');\n\n  const MAX_LEN = 500;\n  let lastResults = [];\n\n  \/\/ \u2500\u2500 Character counter \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  input.addEventListener('input', () => {\n    const len = input.value.length;\n    charCount.textContent = `${len} \/ ${MAX_LEN}`;\n    charCount.classList.toggle('over', len > MAX_LEN);\n  });\n\n  \/\/ \u2500\u2500 Submit \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  submitBtn.addEventListener('click', handleSubmit);\n  input.addEventListener('keydown', (e) => {\n    if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) handleSubmit();\n  });\n\n  async function handleSubmit() {\n    const query = input.value.trim();\n    if (!query) return;\n    if (query.length > MAX_LEN) {\n      showError('Query must be 500 characters or fewer.');\n      return;\n    }\n\n    setLoading(true);\n    clearError();\n    clearResults();\n\n    const requestStart = Date.now();\n\n    \/\/ PostHog event\n    safeCapture('qfo_query_submitted', { query_length: query.length, query });\n\n    try {\n      const res = await fetch(QFO_CONFIG.apiUrl, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application\/json' },\n        body: JSON.stringify({ query }),\n      });\n\n      const data = await res.json();\n\n      if (!res.ok) {\n        handleApiError(data);\n        return;\n      }\n\n      lastResults = data.reformulations || [];\n      renderResults(data, Date.now() - requestStart);\n\n    } catch (err) {\n      showError('Something went wrong. Please try again.');\n      safeCapture('qfo_error', { error_type: 'network_error' });\n    } finally {\n      setLoading(false);\n    }\n  }\n\n  \/\/ \u2500\u2500 Render \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  function renderResults(data, timeMs) {\n    const refs = data.reformulations || [];\n    const sources = data.prf_sources || [];\n\n    \/\/ Summary\n    summaryEl.textContent = `Generated ${refs.length} reformulations from query: \"${data.original_query}\"`;\n\n    \/\/ Render as table rows\n    tableBody.innerHTML = '';\n    refs.forEach((item, i) => {\n      tableBody.appendChild(buildRow({ ...item, _index: i }));\n    });\n\n    \/\/ Sources\n    sourcesList.innerHTML = '';\n    sources.forEach((s) => {\n      const a = document.createElement('a');\n      a.href = s.url;\n      a.target = '_blank';\n      a.rel = 'noopener noreferrer';\n      a.textContent = s.title || s.url;\n      sourcesList.appendChild(a);\n    });\n\n    resultsEl.style.display = 'block';\n\n    \/\/ PostHog\n    const intentTypes = [...new Set(refs.map((r) => r.intent_label || r.intent))];\n    safeCapture('qfo_results_received', {\n      reformulation_count: refs.length,\n      intent_types: intentTypes,\n      time_ms: timeMs,\n    });\n  }\n\n  function buildRow(item) {\n    const tr = document.createElement('tr');\n\n    \/\/ Query cell\n    const tdQuery = document.createElement('td');\n    tdQuery.textContent = item.query;\n\n    \/\/ Category cell\n    const tdCat = document.createElement('td');\n    const badge = document.createElement('span');\n    badge.className = 'qfo-badge';\n    badge.textContent = item.intent_label || item.intent || '';\n    tdCat.appendChild(badge);\n\n    \/\/ Copy cell\n    const tdCopy = document.createElement('td');\n    const copyBtn = document.createElement('button');\n    copyBtn.className = 'qfo-copy-btn';\n    copyBtn.textContent = 'Copy';\n    copyBtn.addEventListener('click', () => {\n      copyToClipboard(item.query);\n      copyBtn.textContent = 'Copied!';\n      copyBtn.classList.add('copied');\n      setTimeout(() => {\n        copyBtn.textContent = 'Copy';\n        copyBtn.classList.remove('copied');\n      }, 2000);\n      safeCapture('qfo_reformulation_copied', {\n        reformulation: item.query,\n        intent: item.intent_label || item.intent,\n        position: item._index,\n      });\n    });\n    tdCopy.appendChild(copyBtn);\n\n    tr.appendChild(tdQuery);\n    tr.appendChild(tdCat);\n    tr.appendChild(tdCopy);\n    return tr;\n  }\n\n  \/\/ \u2500\u2500 Copy all \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  copyAllBtn.addEventListener('click', () => {\n    if (!lastResults.length) return;\n    const text = lastResults.map((r) => r.query).join('\\n');\n    copyToClipboard(text);\n    const orig = copyAllBtn.textContent;\n    copyAllBtn.textContent = 'Copied!';\n    setTimeout(() => { copyAllBtn.textContent = orig; }, 2000);\n    safeCapture('qfo_copy_all_clicked', { count: lastResults.length });\n  });\n\n  \/\/ \u2500\u2500 Sources accordion \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  sourcesToggle.addEventListener('click', () => {\n    const open = sourcesToggle.classList.toggle('open');\n    sourcesList.style.display = open ? 'block' : 'none';\n  });\n\n  \/\/ \u2500\u2500 Utilities \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  function setLoading(on) {\n    submitBtn.disabled = on;\n    input.disabled = on;\n    spinner.style.display = on ? 'block' : 'none';\n    btnLabel.textContent = on ? 'Fetching results and generating reformulations\u2026' : 'Generate fan-out queries';\n  }\n\n  function showError(msg) {\n    errorBox.textContent = msg;\n    errorBox.style.display = 'block';\n  }\n\n  function clearError() {\n    errorBox.textContent = '';\n    errorBox.style.display = 'none';\n  }\n\n  function clearResults() {\n    resultsEl.style.display = 'none';\n    tableBody.innerHTML = '';\n    sourcesList.innerHTML = '';\n    sourcesToggle.classList.remove('open');\n    sourcesList.style.display = 'none';\n    lastResults = [];\n  }\n\n  function handleApiError(data) {\n    const errorMessages = {\n      rate_limit_exceeded: \"You've made too many requests. Please wait an hour before trying again.\",\n      search_unavailable: \"Couldn't fetch search results. Please try again in a moment.\",\n      invalid_input: data.message || 'Invalid input.',\n      generation_failed: 'Failed to generate reformulations. Please try again.',\n    };\n    const msg = errorMessages[data.error] || 'Something went wrong. Please try again.';\n    showError(msg);\n    safeCapture('qfo_error', { error_type: data.error || 'unknown' });\n  }\n\n  function copyToClipboard(text) {\n    if (navigator.clipboard) {\n      navigator.clipboard.writeText(text).catch(() => fallbackCopy(text));\n    } else {\n      fallbackCopy(text);\n    }\n  }\n\n  function fallbackCopy(text) {\n    const el = document.createElement('textarea');\n    el.value = text;\n    el.style.cssText = 'position:fixed;left:-9999px;top:-9999px';\n    document.body.appendChild(el);\n    el.select();\n    document.execCommand('copy');\n    document.body.removeChild(el);\n  }\n\n  function safeCapture(event, props) {\n    try {\n      if (typeof posthog !== 'undefined') posthog.capture(event, props);\n    } catch (_) {}\n  }\n})();\n<\/script>\n\n<!-- \u2500\u2500 PostHog \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n<script>\n!function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(\".\");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement(\"script\")).type=\"text\/javascript\",p.crossOrigin=\"anonymous\",p.async=!0,p.src=s.api_host+\"\/static\/array.js\",(r=t.getElementsByTagName(\"script\")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a=\"posthog\",u.people=u.people||[],u.toString=function(t){var e=\"posthog\";return\"posthog\"!==a&&(e+=\".\"+a),t||(e+=\" (stub)\"),e},u.people.toString=function(){return u.toString(1)+\".people (stub)\"},o=\"capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags getFeatureFlag getFeatureFlagPayload reloadFeatureFlags group updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures getActiveMatchingSurveys getSurveys onSessionId\".split(\" \"),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);\nposthog.init(QFO_CONFIG.posthogKey, { api_host: QFO_CONFIG.posthogHost });\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Enter any search query to generate semantically diverse reformulations \u2014 the same query expansion technique Google uses internally. Grounded in real search results for accuracy. Learn how query fan-out works \u2192 0 \/ 500 Generate fan-out queries Copy all Query Reformulation Category \u25ba Sources used for context<\/p>","protected":false},"author":1,"featured_media":0,"parent":4032,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-8059","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.7 (Yoast SEO v27.7) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Query Fan-Out Generator Tool \/\/<\/title>\n<meta name=\"description\" content=\"Use the Query Fan Out Generator for accurate and semantically diverse query expansions like Google does internally.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/singularity.digital\/pt\/resources\/query-fan-out-tool\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Query Fan-Out Tool\" \/>\n<meta property=\"og:description\" content=\"Use the Query Fan Out Generator for accurate and semantically diverse query expansions like Google does internally.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/singularity.digital\/pt\/resources\/query-fan-out-tool\/\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/singularityagency\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-08T16:13:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/singularity.digital\/wp-content\/uploads\/2021\/06\/4-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"608\" \/>\n\t<meta property=\"og:image:height\" content=\"681\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@singularity_seo\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/singularity.digital\\\/pt\\\/resources\\\/query-fan-out-tool\\\/\",\"url\":\"https:\\\/\\\/singularity.digital\\\/pt\\\/resources\\\/query-fan-out-tool\\\/\",\"name\":\"Query Fan-Out Generator Tool \\\/\\\/\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/singularity.digital\\\/#website\"},\"datePublished\":\"2026-06-07T03:02:13+00:00\",\"dateModified\":\"2026-06-08T16:13:35+00:00\",\"description\":\"Use the Query Fan Out Generator for accurate and semantically diverse query expansions like Google does internally.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/singularity.digital\\\/pt\\\/resources\\\/query-fan-out-tool\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/singularity.digital\\\/pt\\\/resources\\\/query-fan-out-tool\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/singularity.digital\\\/pt\\\/resources\\\/query-fan-out-tool\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/singularity.digital\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Resources\",\"item\":\"https:\\\/\\\/singularity.digital\\\/pt\\\/resources\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Query Fan-Out Tool\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/singularity.digital\\\/#website\",\"url\":\"https:\\\/\\\/singularity.digital\\\/\",\"name\":\"Singularity Digital Marketing\",\"description\":\"SaaS Search Marketing, Solved.\",\"publisher\":{\"@id\":\"https:\\\/\\\/singularity.digital\\\/#organization\"},\"alternateName\":\"Singularity Digital\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/singularity.digital\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/singularity.digital\\\/#organization\",\"name\":\"Singularity Digital Marketing\",\"alternateName\":\"Singularity Digital\",\"url\":\"https:\\\/\\\/singularity.digital\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/singularity.digital\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/singularity.digital\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/logo-black-on-white-e1698072836904.png\",\"contentUrl\":\"https:\\\/\\\/singularity.digital\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/logo-black-on-white-e1698072836904.png\",\"width\":368,\"height\":361,\"caption\":\"Singularity Digital Marketing\"},\"image\":{\"@id\":\"https:\\\/\\\/singularity.digital\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/singularityagency\",\"https:\\\/\\\/x.com\\\/singularity_seo\",\"https:\\\/\\\/www.instagram.com\\\/singularity.digital\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/singularitiy-digital\\\/\"],\"description\":\"Singularity Digital is a marketing agency specializing in SEO and growth for B2B SaaS companies, particularly founder-led businesses in the $2\u201310M ARR range. Known for its focus on revenue impact over vanity metrics, the agency combines traditional SEO with emerging Generative Engine Optimization (GEO) to help clients gain visibility on both Google and AI platforms. Singularity Digital works internationally, maintaining long client relationships through transparent processes, scalable strategies, and consistent growth results.\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Query Fan-Out Generator Tool \/\/","description":"Use the Query Fan Out Generator for accurate and semantically diverse query expansions like Google does internally.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/singularity.digital\/pt\/resources\/query-fan-out-tool\/","og_locale":"pt_BR","og_type":"article","og_title":"Query Fan-Out Tool","og_description":"Use the Query Fan Out Generator for accurate and semantically diverse query expansions like Google does internally.","og_url":"https:\/\/singularity.digital\/pt\/resources\/query-fan-out-tool\/","article_publisher":"https:\/\/www.facebook.com\/singularityagency","article_modified_time":"2026-06-08T16:13:35+00:00","og_image":[{"width":608,"height":681,"url":"https:\/\/singularity.digital\/wp-content\/uploads\/2021\/06\/4-1.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_site":"@singularity_seo","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/singularity.digital\/pt\/resources\/query-fan-out-tool\/","url":"https:\/\/singularity.digital\/pt\/resources\/query-fan-out-tool\/","name":"Query Fan-Out Generator Tool \/\/","isPartOf":{"@id":"https:\/\/singularity.digital\/#website"},"datePublished":"2026-06-07T03:02:13+00:00","dateModified":"2026-06-08T16:13:35+00:00","description":"Use the Query Fan Out Generator for accurate and semantically diverse query expansions like Google does internally.","breadcrumb":{"@id":"https:\/\/singularity.digital\/pt\/resources\/query-fan-out-tool\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/singularity.digital\/pt\/resources\/query-fan-out-tool\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/singularity.digital\/pt\/resources\/query-fan-out-tool\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/singularity.digital\/"},{"@type":"ListItem","position":2,"name":"Resources","item":"https:\/\/singularity.digital\/pt\/resources\/"},{"@type":"ListItem","position":3,"name":"Query Fan-Out Tool"}]},{"@type":"WebSite","@id":"https:\/\/singularity.digital\/#website","url":"https:\/\/singularity.digital\/","name":"Singularity Digital Marketing","description":"SaaS Search Marketing, Solved.","publisher":{"@id":"https:\/\/singularity.digital\/#organization"},"alternateName":"Singularity Digital","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/singularity.digital\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/singularity.digital\/#organization","name":"Singularity Digital Marketing","alternateName":"Singularity Digital","url":"https:\/\/singularity.digital\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/singularity.digital\/#\/schema\/logo\/image\/","url":"https:\/\/singularity.digital\/wp-content\/uploads\/2023\/10\/logo-black-on-white-e1698072836904.png","contentUrl":"https:\/\/singularity.digital\/wp-content\/uploads\/2023\/10\/logo-black-on-white-e1698072836904.png","width":368,"height":361,"caption":"Singularity Digital Marketing"},"image":{"@id":"https:\/\/singularity.digital\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/singularityagency","https:\/\/x.com\/singularity_seo","https:\/\/www.instagram.com\/singularity.digital\/","https:\/\/www.linkedin.com\/company\/singularitiy-digital\/"],"description":"Singularity Digital is a marketing agency specializing in SEO and growth for B2B SaaS companies, particularly founder-led businesses in the $2\u201310M ARR range. Known for its focus on revenue impact over vanity metrics, the agency combines traditional SEO with emerging Generative Engine Optimization (GEO) to help clients gain visibility on both Google and AI platforms. Singularity Digital works internationally, maintaining long client relationships through transparent processes, scalable strategies, and consistent growth results."}]}},"_links":{"self":[{"href":"https:\/\/singularity.digital\/pt\/wp-json\/wp\/v2\/pages\/8059","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/singularity.digital\/pt\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/singularity.digital\/pt\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/singularity.digital\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/singularity.digital\/pt\/wp-json\/wp\/v2\/comments?post=8059"}],"version-history":[{"count":6,"href":"https:\/\/singularity.digital\/pt\/wp-json\/wp\/v2\/pages\/8059\/revisions"}],"predecessor-version":[{"id":8070,"href":"https:\/\/singularity.digital\/pt\/wp-json\/wp\/v2\/pages\/8059\/revisions\/8070"}],"up":[{"embeddable":true,"href":"https:\/\/singularity.digital\/pt\/wp-json\/wp\/v2\/pages\/4032"}],"wp:attachment":[{"href":"https:\/\/singularity.digital\/pt\/wp-json\/wp\/v2\/media?parent=8059"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}