{"id":48897,"date":"2026-03-15T11:22:23","date_gmt":"2026-03-15T03:22:23","guid":{"rendered":"https:\/\/www.geobok.com\/geo-toolkit\/ai-question-map\/"},"modified":"2026-04-03T10:58:00","modified_gmt":"2026-04-03T02:58:00","slug":"ai-question-map","status":"publish","type":"page","link":"https:\/\/www.geobok.com\/en\/geo-toolkit\/ai-question-map\/","title":{"rendered":"AI Question Map"},"content":{"rendered":"\n<style>\n.qm-category { margin-bottom: 20px; }\n.qm-cat-head { display: flex; align-items: center; gap: 8px; padding: 10px 16px; background: var(--geo-bg-page); border-radius: var(--geo-radius-sm) var(--geo-radius-sm) 0 0; border: 1px solid var(--geo-border); border-bottom: none; }\n.qm-cat-name { font-size: 14px; font-weight: 700; color: var(--geo-text-primary); }\n.qm-cat-count { font-size: 12px; color: var(--geo-text-faint); background: var(--geo-border); padding: 1px 8px; border-radius: var(--geo-radius-pill); }\n.qm-cat-list { border: 1px solid var(--geo-border); border-radius: 0 0 var(--geo-radius-sm) var(--geo-radius-sm); overflow: hidden; }\n.qm-q-item { display: flex; align-items: center; gap: 10px; padding: 10px 16px; border-bottom: 1px solid var(--geo-border); font-size: 14px; color: var(--geo-text-body); transition: background 0.1s; cursor: pointer; }\n.qm-q-item:last-child { border-bottom: none; }\n.qm-q-item:hover { background: var(--geo-primary-light); }\n.qm-q-item::before { content: \"Q\"; font-size: 11px; font-weight: 800; color: var(--geo-primary); background: var(--geo-primary-light); width: 22px; height: 22px; display: flex; align-items: center; justify-content: center; border-radius: 4px; flex-shrink: 0; }\n.qm-q-item__copy { opacity: 0; font-size: 11px; color: var(--geo-text-faint); margin-left: auto; transition: opacity 0.15s; white-space: nowrap; }\n.qm-q-item:hover .qm-q-item__copy { opacity: 1; }\n.qm-l2-block { margin-top: 16px; padding: 16px; border-radius: var(--geo-radius-md); border: 1px dashed var(--geo-border); background: #fafbfd; }\n.qm-l2-topic { font-size: 14px; font-weight: 700; color: var(--geo-text-body); margin-bottom: 8px; display: flex; align-items: center; gap: 6px; }\n.qm-l2-topic::before { content: \"\u21b3\"; color: var(--geo-primary); font-weight: 800; }\n.qm-l2-list { display: flex; flex-wrap: wrap; gap: 6px; }\n.qm-l2-tag { font-size: 13px; padding: 4px 12px; border-radius: var(--geo-radius-pill); border: 1px solid var(--geo-border); background: #fff; color: var(--geo-text-body); cursor: pointer; transition: 0.15s; }\n.qm-l2-tag:hover { border-color: var(--geo-primary); color: var(--geo-primary); background: var(--geo-primary-light); }\n.qm-cat-icons { font-size: 18px; }\n<\/style>\n\n<div class=\"geo-card\">\n    <div class=\"geo-hero\">\n        <h2 class=\"geo-hero__title\">\ud83d\uddfa\ufe0f AI Question Map Generator<\/h2>\n        <p class=\"geo-hero__desc\">Query Google, Bing, and Wikipedia in parallel \u2014 cross-reference to discover the questions people actually ask AI, powering your GEO content strategy.<\/p>\n    \n<div class=\"geo-about\">\n    <details class=\"geo-about__section\">\n        <summary>\ud83d\udcd6 What can this tool do?<\/summary>\n        <div class=\"geo-about__body\">\n            <p>Effective GEO monitoring starts with a well-built question bank. Enter a seed keyword, fan out across multiple search platforms, cross-reference autocomplete suggestions, and surface the questions people actually ask AI chatbots \u2014 auto-categorized by intent and ready for citation testing.<\/p>\n            <p class=\"geo-about__ref\">See <em>Make AI Speak for You: The Definitive Guide to GEO<\/em>, Ch. 8<\/p>\n        <\/div>\n    <\/details>\n    <details class=\"geo-about__section\">\n        <summary>\u2753 FAQ: GEO Impact<\/summary>\n        <div class=\"geo-about__body\">\n            <div class=\"geo-faq-item\"><h4>How is this different from a keyword tool?<\/h4><p>Keyword tools optimize for search rankings. The Question Map mines conversational, natural-language queries people use when talking to AI.<\/p><\/div>\n            <div class=\"geo-faq-item\"><h4>What do I do with the results?<\/h4><p>Feed them into the Citation Report as your test bank, or use them as content briefs \u2014 build an answer block for each high-frequency question.<\/p><\/div>\n            <div class=\"geo-faq-item\"><h4>What are cross-platform hot keywords?<\/h4><p>Terms returned by two or more platforms \u2014 multi-platform overlap signals broad interest, so prioritize these for content creation.<\/p><\/div>\n        <\/div>\n    <\/details>\n<\/div>\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"How is this different from a keyword tool?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Keyword tools optimize for search rankings. The Question Map mines conversational, natural-language queries people use when talking to AI.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What do I do with the results?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Feed them into the Citation Report as your test bank, or use them as content briefs \u2014 build an answer block for each high-frequency question.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What are cross-platform hot keywords?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Terms returned by two or more platforms \u2014 multi-platform overlap signals broad interest, so prioritize these for content creation.\"\n      }\n    }\n  ]\n}\n<\/script>\n\n<\/div>\n\n    <div class=\"geo-action\">\n        <div class=\"geo-form-grid\">\n            <div class=\"geo-input-row\">\n                <input type=\"text\" id=\"qm-keyword\" class=\"geo-input\" placeholder=\"Enter a keyword, e.g. projector\">\n                <button id=\"qm-btn\" class=\"geo-btn\">Generate question map<\/button>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <div id=\"qm-result\" class=\"geo-result\" style=\"padding: 0 var(--geo-space-xl) var(--geo-space-xl);\"><\/div>\n<\/div>\n\n<script>\ndocument.addEventListener('DOMContentLoaded', function(){\n    var t = GeoAPI.t;\n    var btn = document.getElementById('qm-btn');\n    var result = document.getElementById('qm-result');\n    var CAT_ICONS = {\n        '\u9009\u8d2d\u51b3\u7b56':'\ud83d\uded2', '\u4ef7\u683c\u6210\u672c':'\ud83d\udcb0', '\u4f7f\u7528\u65b9\u6cd5':'\ud83d\udd27', '\u539f\u7406\u77e5\u8bc6':'\ud83d\udcda', '\u5176\u4ed6\u95ee\u9898':'\ud83d\udcac',\n        'Purchase Decision':'\ud83d\uded2', 'Pricing & Cost':'\ud83d\udcb0', 'How-to & Usage':'\ud83d\udd27', 'Knowledge & Basics':'\ud83d\udcda', 'Other':'\ud83d\udcac'\n    };\n\n    btn.addEventListener('click', async function(){\n        var keyword = document.getElementById('qm-keyword').value.trim();\n        if(!keyword){ GeoAPI.showError(result, t('err.empty_keyword')); return; }\n\n        GeoAPI.disableBtn(btn, t('qmap.btn.loading'));\n        GeoAPI.showLoading(result, t('qmap.loading'));\n\n        try {\n            var data = await GeoAPI.post('\/geo\/question-map', GeoAPI.withLang({ keyword: keyword, depth: 2 }));\n            renderMap(data);\n        } catch(e) {\n            if(!e._geoAuthHandled) GeoAPI.showError(result, e.message);\n        } finally { GeoAPI.enableBtn(btn, t('qmap.btn')); }\n    });\n\n    function renderMap(data) {\n        var html = '';\n        var isEn = GeoAPI.LANG === 'en';\n        var pCount = (data.platforms_queried||[]).length;\n\n        html += '<div class=\"geo-section\"><h3 class=\"geo-section__title\">\ud83d\uddfa\ufe0f ' + (isEn ? 'AI Question Map: ' : 'AI \u95ee\u9898\u5730\u56fe\uff1a') + GeoAPI.escapeHtml(data.keyword) + '<\/h3>'\n              + '<span class=\"geo-section__desc\">' + (isEn\n                  ? 'Found ' + (data.total_suggestions||0) + ' suggestions from ' + pCount + ' platforms, distilled into ' + data.total_questions + ' AI-relevant questions'\n                  : '\u4ece ' + pCount + ' \u4e2a\u5e73\u53f0\u6316\u6398\u5230 ' + (data.total_suggestions||0) + ' \u6761\u5efa\u8bae\u8bcd\uff0c\u63d0\u70bc\u51fa ' + data.total_questions + ' \u4e2a AI \u9ad8\u9891\u95ee\u9898')\n              + '<\/span><\/div>';\n\n        \/* \u5e73\u53f0\u6765\u6e90\u7edf\u8ba1 *\/\n        var stats = data.platform_stats || {};\n        var platformNames = isEn\n            ? {'google':'Google','bing':'Bing','wikipedia_en':'Wikipedia','baidu':'Baidu','360':'360','sogou':'Sogou','taobao':'Taobao','jd':'JD','bilibili':'Bilibili','zhihu':'Zhihu','wikipedia':'Wikipedia'}\n            : {'baidu':'\u767e\u5ea6','bing':'\u5fc5\u5e94','360':'360','sogou':'\u641c\u72d7','taobao':'\u6dd8\u5b9d','jd':'\u4eac\u4e1c','bilibili':'B\u7ad9','zhihu':'\u77e5\u4e4e','wikipedia':'\u7ef4\u57fa\u767e\u79d1','google':'\u8c37\u6b4c','wikipedia_en':'Wikipedia'};\n        var statsKeys = Object.keys(stats);\n        if(statsKeys.length > 0) {\n            html += '<div style=\"display:flex;flex-wrap:wrap;gap:8px;margin-bottom:20px;\">';\n            statsKeys.forEach(function(p) {\n                var n = stats[p];\n                var label = platformNames[p] || p;\n                var color = n > 0 ? 'var(--geo-success-bg)' : 'var(--geo-bg-page)';\n                var borderColor = n > 0 ? 'var(--geo-success-border)' : 'var(--geo-border)';\n                html += '<span style=\"font-size:12px;padding:4px 12px;border-radius:20px;background:' + color + ';border:1px solid ' + borderColor + ';font-weight:600;\">' + label + ' ' + n + (isEn ? '' : '\u6761') + '<\/span>';\n            });\n            html += '<\/div>';\n        }\n\n        \/* \u591a\u5e73\u53f0\u4ea4\u53c9\u70ed\u8bcd *\/\n        var hotWords = data.hot_words || [];\n        if(hotWords.length > 0) {\n            html += '<div class=\"geo-section\"><h3 class=\"geo-section__title\">' + t('qmap.hot_title') + '<\/h3><span class=\"geo-section__desc\">' + t('qmap.hot_desc') + '<\/span><\/div>';\n            html += '<div style=\"display:flex;flex-wrap:wrap;gap:8px;margin-bottom:20px;\">';\n            hotWords.forEach(function(w) {\n                var sources = (data.suggestion_sources || {})[w] || [];\n                var srcLabel = isEn ? sources.join(', ') : sources.join('\u3001');\n                html += '<span class=\"qm-l2-tag\" onclick=\"GeoAPI.copyText(\\'' + GeoAPI.escapeHtml(w).replace(\/'\/g, \"\\\\'\") + '\\', this)\" title=\"' + (isEn ? 'Sources: ' : '\u6765\u6e90\uff1a') + srcLabel + '\" style=\"cursor:pointer;font-weight:600;\">' + GeoAPI.escapeHtml(w) + ' <small style=\"opacity:0.6;\">(' + sources.length + (isEn ? ' platforms' : '\u5e73\u53f0') + ')<\/small><\/span>';\n            });\n            html += '<\/div>';\n        }\n\n        \/* \u5206\u7c7b\u5c55\u793a *\/\n        var cats = data.categories || {};\n        Object.keys(cats).forEach(function(catName) {\n            var questions = cats[catName];\n            var icon = CAT_ICONS[catName] || '\ud83d\udcac';\n            html += '<div class=\"qm-category\">';\n            html += '<div class=\"qm-cat-head\"><span class=\"qm-cat-icons\">' + icon + '<\/span><span class=\"qm-cat-name\">' + GeoAPI.escapeHtml(catName) + '<\/span><span class=\"qm-cat-count\">' + questions.length + '<\/span><\/div>';\n            html += '<div class=\"qm-cat-list\">';\n            questions.forEach(function(q) {\n                html += '<div class=\"qm-q-item\" onclick=\"GeoAPI.copyText(\\'' + GeoAPI.escapeHtml(q).replace(\/'\/g, \"\\\\'\") + '\\', this.querySelector(\\'.qm-q-item__copy\\'))\">'\n                      + GeoAPI.escapeHtml(q)\n                      + '<span class=\"qm-q-item__copy\">' + t('copy') + '<\/span><\/div>';\n            });\n            html += '<\/div><\/div>';\n        });\n\n        \/* \u4e8c\u7ea7\u6269\u5c55 *\/\n        var l2 = data.level2_expansions || {};\n        var l2Keys = Object.keys(l2);\n        if(l2Keys.length > 0) {\n            html += '<div class=\"geo-section\"><h3 class=\"geo-section__title\">' + t('qmap.l2_title') + '<\/h3><span class=\"geo-section__desc\">' + t('qmap.l2_desc') + '<\/span><\/div>';\n            l2Keys.forEach(function(topic) {\n                html += '<div class=\"qm-l2-block\"><div class=\"qm-l2-topic\">' + GeoAPI.escapeHtml(topic) + '<\/div>';\n                html += '<div class=\"qm-l2-list\">';\n                l2[topic].forEach(function(q) {\n                    html += '<span class=\"qm-l2-tag\" onclick=\"GeoAPI.copyText(\\'' + GeoAPI.escapeHtml(q).replace(\/'\/g, \"\\\\'\") + '\\', this)\" title=\"' + t('copy') + '\">' + GeoAPI.escapeHtml(q) + '<\/span>';\n                });\n                html += '<\/div><\/div>';\n            });\n        }\n\n        \/* \u539f\u59cb\u5efa\u8bae\u8bcd *\/\n        if(data.raw_suggestions && data.raw_suggestions.length > 0) {\n            html += '<button class=\"geo-btn geo-btn--ghost geo-btn--sm\" style=\"margin-top:16px;\" onclick=\"var el=document.getElementById(\\'qm-raw\\');el.style.display=el.style.display===\\'none\\'?\\'block\\':\\'none\\';\">' + t('qmap.raw_btn') + '<\/button>';\n            html += '<div id=\"qm-raw\" style=\"display:none;margin-top:8px;font-size:13px;color:var(--geo-text-faint);line-height:2;\">';\n            data.raw_suggestions.forEach(function(s) {\n                html += '<code style=\"background:var(--geo-bg-page);padding:2px 8px;border-radius:3px;margin:2px;\">' + GeoAPI.escapeHtml(s) + '<\/code> ';\n            });\n            html += '<\/div>';\n        }\n\n        \/* \u5bfc\u51fa\u6309\u94ae *\/\n        html += '<div style=\"display:flex;gap:10px;margin-top:20px;padding-top:16px;border-top:1px solid var(--geo-border);\">';\n        html += '<button class=\"geo-btn geo-btn--ghost geo-btn--sm\" id=\"qm-export-csv\">' + (isEn ? '\ud83d\udce5 Export CSV' : '\ud83d\udce5 \u5bfc\u51fa CSV') + '<\/button>';\n        html += '<button class=\"geo-btn geo-btn--ghost geo-btn--sm\" id=\"qm-export-json\">' + (isEn ? '\ud83d\udce5 Export JSON' : '\ud83d\udce5 \u5bfc\u51fa JSON') + '<\/button>';\n        html += '<\/div>';\n\n        GeoAPI.showResult(result, html);\n\n        \/* \u7ed1\u5b9a\u5bfc\u51fa\u4e8b\u4ef6 *\/\n        window._qmData = data;\n        document.getElementById('qm-export-csv').addEventListener('click', function(){ exportCSV(data); });\n        document.getElementById('qm-export-json').addEventListener('click', function(){ exportJSON(data); });\n    }\n\n    function exportCSV(data) {\n        var isEn = GeoAPI.LANG === 'en';\n        var rows = [];\n        rows.push(isEn ? 'Category,Question,Sources' : '\u5206\u7c7b,\u95ee\u9898,\u6765\u6e90\u5e73\u53f0');\n\n        var cats = data.categories || {};\n        var sources = data.suggestion_sources || {};\n        Object.keys(cats).forEach(function(catName) {\n            cats[catName].forEach(function(q) {\n                var src = (sources[q] || []).join('; ');\n                \/\/ CSV \u8f6c\u4e49\uff1a\u5b57\u6bb5\u542b\u9017\u53f7\u6216\u5f15\u53f7\u65f6\u7528\u53cc\u5f15\u53f7\u5305\u88f9\n                var safeQ = q.indexOf(',') >= 0 || q.indexOf('\"') >= 0 ? '\"' + q.replace(\/\"\/g, '\"\"') + '\"' : q;\n                var safeCat = catName.indexOf(',') >= 0 ? '\"' + catName + '\"' : catName;\n                rows.push(safeCat + ',' + safeQ + ',' + (src || '-'));\n            });\n        });\n\n        \/\/ \u70ed\u8bcd\n        var hotWords = data.hot_words || [];\n        if (hotWords.length > 0) {\n            rows.push('');\n            rows.push(isEn ? 'Hot Keywords,Platforms' : '\u4ea4\u53c9\u70ed\u8bcd,\u6765\u6e90\u5e73\u53f0');\n            hotWords.forEach(function(w) {\n                var src = (sources[w] || []).join('; ');\n                rows.push(w + ',' + (src || '-'));\n            });\n        }\n\n        var csvContent = rows.join('\\n');\n        \/\/ UTF-8 BOM \u89e3\u51b3\u4e2d\u6587\u4e71\u7801\n        var BOM = '\\uFEFF';\n        var blob = new Blob([BOM + csvContent], { type: 'text\/csv;charset=utf-8;' });\n        var url = URL.createObjectURL(blob);\n        var a = document.createElement('a');\n        a.href = url;\n        a.download = 'question_map_' + (data.keyword || 'export') + '.csv';\n        a.click();\n        URL.revokeObjectURL(url);\n    }\n\n    function exportJSON(data) {\n        var exportData = {\n            keyword: data.keyword,\n            generated_at: new Date().toISOString(),\n            total_questions: data.total_questions,\n            categories: data.categories,\n            hot_words: data.hot_words,\n            suggestion_sources: data.suggestion_sources,\n            level2_expansions: data.level2_expansions,\n            platform_stats: data.platform_stats,\n        };\n        var jsonStr = JSON.stringify(exportData, null, 2);\n        var blob = new Blob([jsonStr], { type: 'application\/json;charset=utf-8;' });\n        var url = URL.createObjectURL(blob);\n        var a = document.createElement('a');\n        a.href = url;\n        a.download = 'question_map_' + (data.keyword || 'export') + '.json';\n        a.click();\n        URL.revokeObjectURL(url);\n    }\n});\n<\/script>\n\n        \n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":48884,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-48897","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.geobok.com\/en\/wp-json\/wp\/v2\/pages\/48897","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.geobok.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.geobok.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.geobok.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.geobok.com\/en\/wp-json\/wp\/v2\/comments?post=48897"}],"version-history":[{"count":0,"href":"https:\/\/www.geobok.com\/en\/wp-json\/wp\/v2\/pages\/48897\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.geobok.com\/en\/wp-json\/wp\/v2\/pages\/48884"}],"wp:attachment":[{"href":"https:\/\/www.geobok.com\/en\/wp-json\/wp\/v2\/media?parent=48897"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}