{"id":48890,"date":"2026-01-30T22:38:22","date_gmt":"2026-01-30T14:38:22","guid":{"rendered":"https:\/\/www.geobok.com\/geo-toolkit\/ai-brand-impression-diagnostic\/"},"modified":"2026-04-03T10:51:14","modified_gmt":"2026-04-03T02:51:14","slug":"ai-brand-impression-diagnostic","status":"publish","type":"page","link":"https:\/\/www.geobok.com\/en\/geo-toolkit\/ai-brand-impression-diagnostic\/","title":{"rendered":"AI Brand Impression Diagnostic"},"content":{"rendered":"\n<style>\n\/* ===== \u8bc4\u7ea7\u7ed3\u679c\u5361\u7247 ===== *\/\n#cc-answer-text { white-space: pre-wrap; line-height: 1.8; color: var(--geo-text-body); font-size: 15px; }\n.cc-grade-card { display: flex; align-items: center; gap: 16px; padding: 20px; border-radius: var(--geo-radius-md); margin-bottom: 20px; }\n.cc-grade-card--A { background: linear-gradient(135deg, #f0fdf4, #dcfce7); border: 1px solid var(--geo-success-border); }\n.cc-grade-card--B { background: linear-gradient(135deg, #f0fdfa, #ccfbf1); border: 1px solid #99f6e4; }\n.cc-grade-card--C { background: linear-gradient(135deg, #fffbeb, #fef3c7); border: 1px solid var(--geo-warn-border); }\n.cc-grade-card--D { background: linear-gradient(135deg, #fef2f2, #fee2e2); border: 1px solid var(--geo-danger-border); }\n.cc-grade-card__info { flex: 1; }\n.cc-grade-card__label { font-size: 13px; color: var(--geo-text-muted); font-weight: 600; margin-bottom: 4px; }\n.cc-grade-card__reason { font-size: 14px; color: var(--geo-text-body); line-height: 1.6; }\n<\/style>\n\n<div class=\"geo-card\">\n    <div class=\"geo-hero\">\n        <h2 class=\"geo-hero__title\">\ud83d\udd0d AI Brand Citation Check<\/h2>\n        <p class=\"geo-hero__desc\">Check if AI responses mention your brand and evaluate citation quality (A\/B\/C\/D).<\/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>The whole point of GEO is to get AI to cite your brand. This tool sends a real question to a live AI model, checks whether the response mentions your brand, and grades citation quality: A = cited with source link, B = mentioned without link, C = skeptical context, D = not mentioned.<\/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>Can I trust a single test?<\/h4><p>Not entirely. AI output is inherently probabilistic. Use the Citation Report for batch testing across multiple questions and platforms.<\/p><\/div>\n            <div class=\"geo-faq-item\"><h4>I got a D \u2014 now what?<\/h4><p>Start with the Crawlability Check (is robots.txt blocking AI?), then the Answer Block Scorer (is content structured for extraction?). See Ch. 4 and Ch. 5.<\/p><\/div>\n            <div class=\"geo-faq-item\"><h4>Does the A vs B difference matter?<\/h4><p>Absolutely. A-grade means AI linked back to your site \u2014 that drives traffic. B-grade means your brand appeared but without a clickable link.<\/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\": \"Can I trust a single test?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Not entirely. AI output is inherently probabilistic. Use the Citation Report for batch testing across multiple questions and platforms.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"I got a D \u2014 now what?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Start with the Crawlability Check (is robots.txt blocking AI?), then the Answer Block Scorer (is content structured for extraction?). See Ch. 4 and Ch. 5.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Does the A vs B difference matter?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Absolutely. A-grade means AI linked back to your site \u2014 that drives traffic. B-grade means your brand appeared but without a clickable link.\"\n      }\n    }\n  ]\n}\n<\/script>\n\n<\/div>\n    <div class=\"geo-action\">\n        <div class=\"geo-form-grid\">\n            <div class=\"geo-field\">\n                <label class=\"geo-label\">User Question (Prompt)<\/label>\n                <input type=\"text\" id=\"cc-question\" class=\"geo-input\" placeholder=\"e.g. Best CRM for small businesses\">\n            <\/div>\n            <div class=\"geo-field\">\n                <label class=\"geo-label\">Target Brand<\/label>\n                <input type=\"text\" id=\"cc-target\" class=\"geo-input\" placeholder=\"e.g. Salesforce\">\n            <\/div>\n            <div class=\"geo-field\">\n                <label class=\"geo-label\">AI Platforms<\/label>\n                <div class=\"geo-check-group\" id=\"cc-providers\">\n                                        <label class=\"geo-check-item geo-check-item--active\" data-val=\"openai\"><input type=\"checkbox\" checked> OpenAI GPT<\/label>\n                    <label class=\"geo-check-item geo-check-item--active\" data-val=\"claude\"><input type=\"checkbox\" checked> Claude<\/label>\n                    <label class=\"geo-check-item\" data-val=\"gemini\"><input type=\"checkbox\"> Gemini<\/label>\n                                    <\/div>\n            <\/div>\n            <button id=\"cc-btn\" class=\"geo-btn geo-btn--block\">Run diagnosis<\/button>\n        <\/div>\n        <div id=\"cc1-apikey-area\"><\/div>\n<script>document.addEventListener(\"DOMContentLoaded\",function(){var el=document.getElementById(\"cc1-apikey-area\");if(el)el.innerHTML=GeoAPI.renderApiKeyInput();});<\/script>\n    <div id=\"cc-result\" class=\"geo-result\"><\/div>\n    <\/div>\n<\/div>\n\n<script>\ndocument.addEventListener('DOMContentLoaded', function(){\n    var btn = document.getElementById('cc-btn');\n    var result = document.getElementById('cc-result');\n\n    \/* \u5e73\u53f0\u591a\u9009\u5207\u6362 *\/\n    document.querySelectorAll('#cc-providers .geo-check-item').forEach(function(item) {\n        item.addEventListener('click', function() {\n            var cb = this.querySelector('input[type=\"checkbox\"]');\n            cb.checked = !cb.checked;\n            this.classList.toggle('geo-check-item--active', cb.checked);\n        });\n    });\n\n    function getSelectedProviders() {\n        var providers = [];\n        document.querySelectorAll('#cc-providers .geo-check-item--active').forEach(function(item) {\n            providers.push(item.getAttribute('data-val'));\n        });\n        return providers;\n    }\n\n    var PROVIDER_NAMES = {}; GeoAPI.getProviders().forEach(function(p){ PROVIDER_NAMES[p.value]=p.label; });\n    var isEn = GeoAPI.LANG === 'en';\n    var GRADE_LABELS = {\n        A: { text: isEn ? 'A \u00b7 High-quality citation' : 'A \u7ea7 \u00b7 \u9ad8\u8d28\u91cf\u5f15\u7528', icon: isEn ? '\u2713 Cited' : '\u2713 \u54c1\u724c\u88ab\u5f15\u7528', badgeCls:'geo-badge--success' },\n        B: { text: isEn ? 'B \u00b7 Basic mention' : 'B \u7ea7 \u00b7 \u57fa\u7840\u5f15\u7528', icon: isEn ? '\u2713 Mentioned' : '\u2713 \u54c1\u724c\u88ab\u5f15\u7528', badgeCls:'geo-badge--info' },\n        C: { text: isEn ? 'C \u00b7 Doubtful context' : 'C \u7ea7 \u00b7 \u5b58\u7591\u5f15\u7528', icon: isEn ? '\u26a0 Doubtful' : '\u26a0 \u5e26\u5b58\u7591\u5f15\u7528', badgeCls:'geo-badge--warn' },\n        D: { text: isEn ? 'D \u00b7 Not cited' : 'D \u7ea7 \u00b7 \u672a\u88ab\u5f15\u7528', icon: isEn ? '\u2717 Not cited' : '\u2717 \u672a\u88ab\u5f15\u7528', badgeCls:'geo-badge--danger' }\n    };\n\n    btn.addEventListener('click', async function(){\n        var question = document.getElementById('cc-question').value.trim();\n        var target = document.getElementById('cc-target').value.trim();\n        var providers = getSelectedProviders();\n        if(!question || !target){ GeoAPI.showError(result, isEn ? 'Please enter a question and brand name' : '\u8bf7\u586b\u5199\u63d0\u95ee\u5185\u5bb9\u548c\u76ee\u6807\u54c1\u724c'); return; }\n        if(providers.length === 0){ GeoAPI.showError(result, isEn ? 'Please select at least one AI platform' : '\u8bf7\u81f3\u5c11\u9009\u62e9\u4e00\u4e2a AI \u5e73\u53f0'); return; }\n\n        GeoAPI.disableBtn(btn, GeoAPI.t('cc.btn.loading'));\n        GeoAPI.showLoading(result, (isEn ? 'Querying ' + providers.length + ' AI platform(s)...' : '\u6b63\u5728\u5411 ' + providers.length + ' \u4e2a AI \u5e73\u53f0\u53d1\u9001\u95ee\u9898...'));\n\n        var allResults = [];\n        var errors = [];\n\n        for(var i = 0; i < providers.length; i++) {\n            var model = providers[i];\n            try {\n                var data = await GeoAPI.post('\/geo\/check_citation', {\n                    question: question, target_company: target, model_provider: model,\n                    api_key: GeoAPI.getApiKey(model), lang: GeoAPI.LANG\n                });\n                allResults.push({ model: model, data: data });\n            } catch(e) {\n                if(!e._geoAuthHandled) errors.push({ model: model, error: e.message });\n            }\n        }\n\n        renderResults(allResults, errors, question, target);\n        GeoAPI.enableBtn(btn);\n    });\n\n    function renderResults(results, errors, question, target) {\n        var html = '';\n\n        \/* \u603b\u89c8 *\/\n        if(results.length > 1) {\n            html += '<div style=\"display:flex;gap:10px;flex-wrap:wrap;margin-bottom:16px;\">';\n            results.forEach(function(r) {\n                var g = r.data.grade || 'D';\n                var name = PROVIDER_NAMES[r.model] || r.model;\n                html += '<span class=\"geo-grade geo-grade--' + g + '\" title=\"' + name + '\" style=\"font-size:13px;width:auto;padding:4px 12px;\">' + name + ' ' + g + '<\/span>';\n            });\n            errors.forEach(function(e) {\n                var name = PROVIDER_NAMES[e.model] || e.model;\n                html += '<span class=\"geo-badge geo-badge--neutral\">' + name + ' \u2717<\/span>';\n            });\n            html += '<\/div>';\n        }\n\n        \/* \u9010\u5e73\u53f0\u8be6\u60c5 *\/\n        results.forEach(function(r) {\n            var data = r.data;\n            var grade = data.grade || 'D';\n            var gl = GRADE_LABELS[grade] || GRADE_LABELS['D'];\n            var providerName = PROVIDER_NAMES[r.model] || r.model;\n\n            html += '<div style=\"border:1px solid var(--geo-border);border-radius:var(--geo-radius-md);padding:16px;margin-bottom:12px;\">';\n            html += '<div class=\"cc-grade-card cc-grade-card--' + grade + '\">'\n                  + '<span class=\"geo-grade geo-grade--' + grade + '\">' + GeoAPI.escapeHtml(grade) + '<\/span>'\n                  + '<div class=\"cc-grade-card__info\">'\n                  + '<div class=\"cc-grade-card__label\">' + GeoAPI.escapeHtml(gl.text) + '<\/div>'\n                  + '<div class=\"cc-grade-card__reason\">' + GeoAPI.escapeHtml(data.grade_reason || '') + '<\/div>'\n                  + '<\/div>'\n                  + '<span class=\"geo-badge ' + gl.badgeCls + '\">' + gl.icon + '<\/span>'\n                  + '<\/div>';\n\n            html += '<div class=\"geo-section\" style=\"margin-top:12px;\"><h3 class=\"geo-section__title\">\ud83d\udcac ' + (isEn ? 'Response from ' : '\u6765\u81ea ') + GeoAPI.escapeHtml(providerName) + '<\/h3><\/div>'\n                  + '<div style=\"font-size:13px;color:var(--geo-text-body);line-height:1.7;max-height:200px;overflow-y:auto;padding:12px;background:var(--geo-bg-page);border-radius:6px;\">' + GeoAPI.escapeHtml(data.answer) + '<\/div>';\n            html += '<\/div>';\n        });\n\n        \/* \u9519\u8bef *\/\n        errors.forEach(function(e) {\n            var name = PROVIDER_NAMES[e.model] || e.model;\n            html += '<div class=\"geo-error\" style=\"margin-bottom:8px;\">' + name + ': ' + GeoAPI.escapeHtml(e.error) + '<\/div>';\n        });\n\n        GeoAPI.showResult(result, html);\n    }\n});\n<\/script>\n\n        \n\n\n\n<p><\/p>\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-48890","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.geobok.com\/en\/wp-json\/wp\/v2\/pages\/48890","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=48890"}],"version-history":[{"count":0,"href":"https:\/\/www.geobok.com\/en\/wp-json\/wp\/v2\/pages\/48890\/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=48890"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}