{"id":280877,"date":"2026-02-09T08:13:59","date_gmt":"2026-02-09T08:13:59","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/provimedia-geo-widget\/"},"modified":"2026-02-09T08:14:11","modified_gmt":"2026-02-09T08:14:11","slug":"provimedia-geo-widget","status":"publish","type":"plugin","link":"https:\/\/bel.wordpress.org\/plugins\/provimedia-geo-widget\/","author":23450058,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.0","stable_tag":"1.0.0","tested":"6.9.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Provimedia GEO Widget","header_author":"Provimedia GmbH","header_description":"Citable Answer Blocks for Generative Engine Optimization (GEO). Optimize your content for AI-powered search engines.","assets_banners_color":"a17ae0","last_updated":"2026-02-09 08:14:11","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/www.provimedia.de\/geo-wordpress-widget\/","header_author_uri":"https:\/\/www.provimedia.de","rating":0,"author_block_rating":0,"active_installs":0,"downloads":139,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"provimedia","date":"2026-02-09 08:14:11"}},"upgrade_notice":{"1.0.0":"<p>Initial release of the Geo Widget plugin.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3456939,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3456939,"resolution":"256x256","location":"assets","locale":""},"icon.svg":{"filename":"icon.svg","revision":3456939,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":3456939,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3456939,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":{"provimedia-geo-widget\/answer-card":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"provimedia-geo-widget\/answer-card","version":"1.0.0","title":"Answer Card","category":"text","icon":"format-quote","description":"Citable answer block for GEO.","textdomain":"provimedia-geo-widget","keywords":["answer","citation","geo","quote"],"attributes":{"question":{"type":"string","default":""},"answer":{"type":"string","default":""},"bullets":{"type":"array","default":[],"items":{"type":"string"}},"sources":{"type":"array","default":[],"items":{"type":"object"}},"anchorId":{"type":"string","default":""},"showCopyButtons":{"type":"boolean","default":true},"copyMode":{"type":"string","default":"both","enum":["link","citation","both"]},"anchorManuallyEdited":{"type":"boolean","default":false}},"supports":{"html":false,"anchor":false,"className":true,"color":{"background":true,"text":false},"spacing":{"margin":true,"padding":true}},"editorScript":"file:.\/build\/index.js","editorStyle":"file:.\/build\/index.css","style":"file:.\/build\/style-index.css","viewScript":"file:.\/build\/frontend.js","render":"file:.\/templates\/answer-card.php"}},"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3456939,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3456939,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3456939,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3456939,"resolution":"4","location":"assets","locale":""}},"screenshots":{"1":"Answer Card Block in Gutenberg Editor with question, answer, and word counter","2":"Source management with label, URL, publisher, and date","3":"Finished Answer Card in frontend with copy buttons","4":"Settings page under Settings \u2192 Geo Widget","5":"Traffic light indicator for answer length (green = ideal)"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[255489,1807,245227,2591,1121],"plugin_category":[49],"plugin_contributors":[255490],"plugin_business_model":[],"class_list":["post-280877","plugin","type-plugin","status-publish","hentry","plugin_tags-answer-block","plugin_tags-citation","plugin_tags-generative-engine-optimization","plugin_tags-geo","plugin_tags-structured-data","plugin_category-maps-and-location","plugin_contributors-provimedia","plugin_committers-provimedia"],"banners":{"banner":"https:\/\/ps.w.org\/provimedia-geo-widget\/assets\/banner-772x250.jpg?rev=3456939","banner_2x":"https:\/\/ps.w.org\/provimedia-geo-widget\/assets\/banner-1544x500.jpg?rev=3456939","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/provimedia-geo-widget\/assets\/icon.svg?rev=3456939","icon":"https:\/\/ps.w.org\/provimedia-geo-widget\/assets\/icon.svg?rev=3456939","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/provimedia-geo-widget\/assets\/screenshot-1.png?rev=3456939","caption":"Answer Card Block in Gutenberg Editor with question, answer, and word counter"},{"src":"https:\/\/ps.w.org\/provimedia-geo-widget\/assets\/screenshot-2.png?rev=3456939","caption":"Source management with label, URL, publisher, and date"},{"src":"https:\/\/ps.w.org\/provimedia-geo-widget\/assets\/screenshot-3.png?rev=3456939","caption":"Finished Answer Card in frontend with copy buttons"},{"src":"https:\/\/ps.w.org\/provimedia-geo-widget\/assets\/screenshot-4.png?rev=3456939","caption":"Settings page under Settings \u2192 Geo Widget"}],"raw_content":"<!--section=description-->\n<p>Geo Widget creates structured, citable answer blocks (Answer Cards) directly in the WordPress Gutenberg Editor. This optimizes your content specifically for AI-powered search engines like Google AI Overviews, Bing Copilot, or Perplexity.<\/p>\n\n<p>Each block consists of a question, answer, bullet points, and sources \u2014 including copy buttons so readers and AI systems can correctly cite your content.<\/p>\n\n<h4>Who is this plugin for?<\/h4>\n\n<ul>\n<li>Content creators who want to be cited in AI answers<\/li>\n<li>SEO teams focusing on Generative Engine Optimization<\/li>\n<li>Editorial teams needing structured fact blocks in articles<\/li>\n<li>Developers integrating Answer Cards into external systems via REST API<\/li>\n<\/ul>\n\n<h3>Features<\/h3>\n\n<h4>Gutenberg Block \"Answer Card\"<\/h4>\n\n<ul>\n<li><strong>Question Field<\/strong> \u2014 Input field with character limit (max. 140 characters) and live counter<\/li>\n<li><strong>Answer Field<\/strong> \u2014 Multi-line text field for the citable answer<\/li>\n<li><strong>Word Counter with Traffic Light Indicator<\/strong> \u2014 Real-time color-coded assessment of answer length:\n\n<ul>\n<li>Gray: Too short (under 40 words)<\/li>\n<li>Green: Ideal length (40-80 words)<\/li>\n<li>Yellow: Getting long (81-120 words)<\/li>\n<li>Red: Too long (over 120 words)<\/li>\n<\/ul><\/li>\n<li><strong>Bullet Points (Key Points)<\/strong> \u2014 Up to 6 key statements with add\/remove buttons<\/li>\n<li><strong>Source Management<\/strong> \u2014 Up to 6 sources with label, URL, publisher, and date<\/li>\n<li><strong>Anchor ID<\/strong> \u2014 Automatically generated from the question, with umlaut support. Manually overridable with reset option<\/li>\n<li><strong>Server-Side Rendering<\/strong> \u2014 Output is fully rendered server-side (no frontend JavaScript required)<\/li>\n<\/ul>\n\n<h4>Copy Buttons<\/h4>\n\n<ul>\n<li><strong>Copy Link<\/strong> \u2014 Copies the permalink including anchor fragment to clipboard<\/li>\n<li><strong>Copy Citation<\/strong> \u2014 Copies a formatted citation: \"Question\" \u2014 Post Title (Site Name, Date) URL<\/li>\n<li><strong>Visual Feedback<\/strong> \u2014 Button shows \"Copied!\" and is briefly disabled<\/li>\n<li><strong>Fallback for Older Browsers<\/strong> \u2014 Automatic fallback when Clipboard API is unavailable<\/li>\n<li><strong>Configurable Display<\/strong> \u2014 Controllable via sidebar: link only, citation only, or both<\/li>\n<\/ul>\n\n<h4>REST API<\/h4>\n\n<ul>\n<li><strong>Public Endpoint<\/strong> \u2014 <code>GET \/wp-json\/provimedia-geo-widget\/v1\/answers<\/code> returns all Answer Cards as JSON<\/li>\n<li><strong>Filter by Post<\/strong> \u2014 Parameter <code>post_id<\/code> to retrieve blocks from a specific post<\/li>\n<li><strong>Pagination<\/strong> \u2014 Parameters <code>per_page<\/code> and <code>page<\/code> with response headers <code>X-WP-Total<\/code> and <code>X-WP-TotalPages<\/code><\/li>\n<li><strong>Read-only<\/strong> \u2014 GET requests only, no write operations<\/li>\n<li><strong>Disableable<\/strong> \u2014 Can be completely disabled in settings<\/li>\n<\/ul>\n\n<h4>Settings Page<\/h4>\n\n<ul>\n<li><strong>Enable\/Disable REST API<\/strong> \u2014 Toggles the public API endpoint on or off<\/li>\n<li><strong>Include Answer in Citation<\/strong> \u2014 Adds the answer text to the citation<\/li>\n<li><strong>Default Copy Mode<\/strong> \u2014 Global default: Link &amp; Citation, Link only, or Citation only<\/li>\n<li><strong>Strict Word Limit<\/strong> \u2014 Enforces the 120-word limit when saving<\/li>\n<\/ul>\n\n<h4>Security<\/h4>\n\n<ul>\n<li>Input sanitization of all attributes<\/li>\n<li>Consistent late-escaping against XSS<\/li>\n<li>Protocol whitelist for URLs (http\/https only)<\/li>\n<li>No innerHTML or eval in frontend JavaScript<\/li>\n<li>Drafts and password-protected posts excluded from API<\/li>\n<li>SQL injection protection via parameterized queries<\/li>\n<li>Whitelist validation of all setting values<\/li>\n<li>Nonce protection (CSRF) on settings page<\/li>\n<li>External links with <code>rel=\"noopener noreferrer\"<\/code><\/li>\n<\/ul>\n\n<h4>Clean Uninstallation<\/h4>\n\n<ul>\n<li>On uninstall, all plugin options and transients are completely removed from the database<\/li>\n<\/ul>\n\n<h4>Compatibility<\/h4>\n\n<ul>\n<li>WordPress 6.0 or higher<\/li>\n<li>PHP 7.4 or higher<\/li>\n<li>Gutenberg Block API v3<\/li>\n<li>RTL support (automatically generated stylesheets)<\/li>\n<li>Translation-ready (Text Domain: provimedia-geo-widget)<\/li>\n<\/ul>\n\n<h3>Development<\/h3>\n\n<p>The compiled JavaScript and CSS files in the <code>\/build<\/code> directory are generated from source files in the <code>\/src<\/code> directory using WordPress build tools.<\/p>\n\n<h4>Source Code<\/h4>\n\n<p>All source code is included in the plugin:<\/p>\n\n<ul>\n<li><code>\/src\/index.js<\/code> - Editor block component (React\/JSX)<\/li>\n<li><code>\/src\/frontend.js<\/code> - Copy button functionality (Vanilla JS)<\/li>\n<li><code>\/src\/editor.scss<\/code> - Editor-only styles (SCSS)<\/li>\n<li><code>\/src\/style.scss<\/code> - Frontend styles (SCSS)<\/li>\n<\/ul>\n\n<h4>Build Instructions<\/h4>\n\n<ol>\n<li>Install Node.js (v18 or higher recommended)<\/li>\n<li>Navigate to the plugin directory<\/li>\n<li>Run <code>npm install<\/code> to install dependencies<\/li>\n<li>Run <code>npm run build<\/code> to compile assets<\/li>\n<\/ol>\n\n<h4>Build Commands<\/h4>\n\n<ul>\n<li><code>npm run build<\/code> - Compile production assets<\/li>\n<li><code>npm run start<\/code> - Watch mode for development<\/li>\n<li><code>npm run lint<\/code> - Run code linting<\/li>\n<li><code>npm run test<\/code> - Run unit tests<\/li>\n<\/ul>\n\n<h4>Dependencies<\/h4>\n\n<ul>\n<li>@wordpress\/scripts - WordPress build toolchain<\/li>\n<li>@wordpress\/blocks - Block registration API<\/li>\n<li>@wordpress\/block-editor - Block editor components<\/li>\n<li>@wordpress\/components - UI components<\/li>\n<li>@wordpress\/i18n - Internationalization utilities<\/li>\n<li>@wordpress\/element - React abstraction layer<\/li>\n<li>@wordpress\/url - URL validation utilities<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the ZIP file via <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong><\/li>\n<li>Activate the plugin under <strong>Plugins \u2192 Installed Plugins<\/strong><\/li>\n<li>Add the \"Answer Card\" block via the Gutenberg Editor to a post<\/li>\n<li>Configure global settings under <strong>Settings \u2192 Geo Widget<\/strong><\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20is%20generative%20engine%20optimization%20%28geo%29%3F\"><h3>What is Generative Engine Optimization (GEO)?<\/h3><\/dt>\n<dd><p>GEO refers to optimizing web content for AI-powered search engines. Unlike traditional SEO, it focuses on having content correctly cited and referenced as a source by AI systems.<\/p><\/dd>\n<dt id=\"which%20ai%20search%20engines%20benefit%20from%20this%3F\"><h3>Which AI search engines benefit from this?<\/h3><\/dt>\n<dd><p>Structured answer blocks improve citability in Google AI Overviews, Bing Copilot, Perplexity, ChatGPT Search, and similar systems.<\/p><\/dd>\n<dt id=\"how%20long%20should%20an%20answer%20be%3F\"><h3>How long should an answer be?<\/h3><\/dt>\n<dd><p>The ideal length is 40-80 words. The integrated word counter with traffic light indicator helps maintain the optimal length.<\/p><\/dd>\n<dt id=\"can%20i%20disable%20the%20rest%20api%3F\"><h3>Can I disable the REST API?<\/h3><\/dt>\n<dd><p>Yes, under <strong>Settings \u2192 Geo Widget<\/strong> you can completely disable the API endpoint.<\/p><\/dd>\n<dt id=\"what%20happens%20on%20uninstallation%3F\"><h3>What happens on uninstallation?<\/h3><\/dt>\n<dd><p>All plugin data (options and transients) are completely removed from the database. Block content in your posts remains as HTML.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20work%20with%20page%20builders%3F\"><h3>Does the plugin work with page builders?<\/h3><\/dt>\n<dd><p>The plugin uses the native Gutenberg Block Editor. Page builders that support Gutenberg blocks are compatible.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Gutenberg Block \"Answer Card\" with question, answer, bullet points, and sources<\/li>\n<li>Copy buttons (Link and Citation) with Clipboard API and fallback<\/li>\n<li>REST API endpoint with filtering and pagination<\/li>\n<li>Settings page with 4 configurable options<\/li>\n<li>Full security hardening (escaping, sanitization, whitelist validation)<\/li>\n<li>Clean uninstallation<\/li>\n<\/ul>","raw_excerpt":"Citable Answer Blocks for Generative Engine Optimization (GEO). Optimize your content for AI-powered search engines.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bel.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/280877","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bel.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/bel.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/bel.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=280877"}],"author":[{"embeddable":true,"href":"https:\/\/bel.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/provimedia"}],"wp:attachment":[{"href":"https:\/\/bel.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=280877"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/bel.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=280877"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/bel.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=280877"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/bel.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=280877"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/bel.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=280877"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/bel.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=280877"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}