{"id":289409,"date":"2026-03-26T22:16:31","date_gmt":"2026-03-26T22:16:31","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/upbinger-blog\/"},"modified":"2026-04-13T14:28:45","modified_gmt":"2026-04-13T14:28:45","slug":"upbinger-blog","status":"publish","type":"plugin","link":"https:\/\/test.wordpress.org\/plugins\/upbinger-blog\/","author":23464798,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"2.0.2","stable_tag":"trunk","tested":"6.9.4","requires":"5.6","requires_php":"7.4","requires_plugins":null,"header_name":"Upbinger Blog","header_author":"Upbinger","header_description":"Embed your Upbinger-powered blog on any WordPress site with full CSS isolation (Shadow DOM), SEO meta injection, and built-in analytics.","assets_banners_color":"","last_updated":"2026-04-13 14:28:45","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/upbinger.com","header_author_uri":"https:\/\/clintonkj.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":207,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.0.1":{"tag":"2.0.1","author":"upbinger","date":"2026-03-26 22:16:13"}},"upgrade_notice":{"2.0.0":"<p>Major rewrite with full Shadow DOM isolation, SEO enhancements, and WordPress.org coding standards compliance. Recommended for all users.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3492207,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3492207,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.0.1"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Settings page with domain, base path, and container configuration."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[323,529,230,186,258735],"plugin_category":[55,56],"plugin_contributors":[258736],"plugin_business_model":[],"class_list":["post-289409","plugin","type-plugin","status-publish","hentry","plugin_tags-blog","plugin_tags-content","plugin_tags-embed","plugin_tags-seo","plugin_tags-shadow-dom","plugin_category-seo-and-marketing","plugin_category-social-and-sharing","plugin_contributors-upbinger","plugin_committers-upbinger"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/upbinger-blog\/assets\/icon-128x128.png?rev=3492207","icon_2x":"https:\/\/ps.w.org\/upbinger-blog\/assets\/icon-256x256.png?rev=3492207","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>Upbinger Blog<\/strong> lets you seamlessly embed your blog content \u2014 published through <a href=\"https:\/\/upbinger.com\">Upbinger<\/a> \u2014 into your WordPress site. The plugin uses <strong>Shadow DOM<\/strong> for complete CSS isolation, so your blog styles never clash with your theme.<\/p>\n\n<h4>Key Features<\/h4>\n\n<ul>\n<li><strong>Customizable Styles<\/strong> \u2014 Configure grid title, colors, fonts, spacing, and more from the Upbinger dashboard (Publish \u2192 Style tab). Changes apply on next publish.\\n* <strong>Back to Blog Navigation<\/strong> \u2014 Configurable \"\u2190 Back to Blog\" link on every post for easy grid return.\\n* <strong>Shadow DOM Isolation<\/strong> \u2014 Blog CSS lives inside a shadow root and cannot interfere with your theme or vice versa.<\/li>\n<li><strong>rem \u2192 em Conversion<\/strong> \u2014 Automatically converts CSS <code>rem<\/code> units to <code>em<\/code> so blog typography renders correctly regardless of your theme's root font-size.<\/li>\n<li><strong>SEO Meta Injection<\/strong> \u2014 Open Graph, Twitter Card, canonical link, and JSON-LD structured data are injected into the page <code>&lt;head&gt;<\/code> for search engines and social media.<\/li>\n<li><strong>SPA Navigation<\/strong> \u2014 Internal blog links navigate without a full page reload. Back\/forward buttons work as expected.<\/li>\n<li><strong>Google Fonts in Light DOM<\/strong> \u2014 Font stylesheets are hoisted into the page <code>&lt;head&gt;<\/code> so they load correctly across all browsers.<\/li>\n<li><strong>Anonymous Analytics<\/strong> \u2014 Visit counts are sent via <code>sendBeacon<\/code> with session deduplication. No cookies, no PII.<\/li>\n<li><strong>Automatic Container Detection<\/strong> \u2014 Finds the best content area in your theme automatically, or you can specify a CSS selector.<\/li>\n<\/ul>\n\n<h4>How It Works<\/h4>\n\n<ol>\n<li>Your blog HTML is published to the Upbinger CDN.<\/li>\n<li>The plugin fetches the correct page from the CDN when a visitor loads your blog route.<\/li>\n<li>The HTML is cleaned, adapted for Shadow DOM (CSS scoping, rem\u2192em, SEO extraction), and injected into an isolated shadow root.<\/li>\n<li>Visitors see your blog styled exactly as designed, with zero CSS side-effects.<\/li>\n<\/ol>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>An active <a href=\"https:\/\/upbinger.com\">Upbinger<\/a> account with a published blog.<\/li>\n<li>WordPress 5.0 or higher.<\/li>\n<li>PHP 7.4 or higher.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin relies on two third-party services provided by Upbinger.<\/p>\n\n<h4>Upbinger CDN (cdn.upbinger.com)<\/h4>\n\n<p>Blog HTML, CSS, images, and font references are fetched from the Upbinger content-delivery network every time a visitor loads a blog page on your site.<\/p>\n\n<ul>\n<li><strong>What is sent:<\/strong> an HTTPS GET request containing only the URL path of the blog page being loaded (e.g. <code>\/blogs\/example.com\/index.html<\/code>). No cookies or personal data are transmitted.<\/li>\n<li><strong>When:<\/strong> on every front-end page load of the blog route.<\/li>\n<li><strong>Service provider:<\/strong> Upbinger \u2014 <a href=\"https:\/\/upbinger.com\/terms\">Terms of Service<\/a> | <a href=\"https:\/\/upbinger.com\/privacy\">Privacy Policy<\/a><\/li>\n<\/ul>\n\n<h4>Upbinger Analytics API<\/h4>\n\n<p>Anonymous page-view events are sent so site owners can see which posts are popular. No cookies are set and no personally-identifiable information is collected.<\/p>\n\n<ul>\n<li><strong>What is sent:<\/strong> the page path, a session-scoped deduplication flag (stored in <code>sessionStorage<\/code>), and the site domain. The request is made via <code>navigator.sendBeacon<\/code>.<\/li>\n<li><strong>When:<\/strong> once per unique page view per browser session (deduplicated). Can be disabled entirely from <strong>Settings \u2192 Upbinger Blog \u2192 Disable Analytics<\/strong>.<\/li>\n<li><strong>Endpoint:<\/strong> <code>https:\/\/m745tnh6jg.execute-api.us-east-1.amazonaws.com\/api\/trackVisit<\/code><\/li>\n<li><strong>Service provider:<\/strong> Upbinger \u2014 <a href=\"https:\/\/upbinger.com\/terms\">Terms of Service<\/a> | <a href=\"https:\/\/upbinger.com\/privacy\">Privacy Policy<\/a><\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>upbinger-blog<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress.<\/li>\n<li>Navigate to <strong>Settings \u2192 Upbinger Blog<\/strong>.<\/li>\n<li>Enter your site domain (e.g. <code>example.com<\/code>) and blog base path (e.g. <code>\/blog<\/code>).<\/li>\n<li>Optionally specify a CSS container selector or enable debug logging.<\/li>\n<li>Visit your blog page to verify content loads correctly.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20an%20upbinger%20account%3F\"><h3>Do I need an Upbinger account?<\/h3><\/dt>\n<dd><p>Yes. The plugin loads blog content from Upbinger's CDN, so you need a published blog on the platform.<\/p><\/dd>\n<dt id=\"will%20this%20break%20my%20theme%27s%20styles%3F\"><h3>Will this break my theme's styles?<\/h3><\/dt>\n<dd><p>No. All blog CSS is isolated inside a Shadow DOM root. Your theme's CSS cannot leak in, and the blog's CSS cannot leak out.<\/p><\/dd>\n<dt id=\"why%20are%20font%20sizes%20different%20on%20my%20site%3F\"><h3>Why are font sizes different on my site?<\/h3><\/dt>\n<dd><p>Some themes set <code>html { font-size: 62.5%; }<\/code> which changes the meaning of CSS <code>rem<\/code> units. This plugin automatically converts <code>rem<\/code> to <code>em<\/code> and sets a 16px base so blog text renders at the intended size.<\/p><\/dd>\n<dt id=\"does%20this%20affect%20my%20seo%3F\"><h3>Does this affect my SEO?<\/h3><\/dt>\n<dd><p>Positively. The plugin injects Open Graph, Twitter Card, canonical link, and JSON-LD structured data into the page <code>&lt;head&gt;<\/code> so search engines and social platforms can properly index and preview your blog content.<\/p><\/dd>\n<dt id=\"are%20analytics%20gdpr%20compliant%3F\"><h3>Are analytics GDPR compliant?<\/h3><\/dt>\n<dd><p>Yes. The plugin sends anonymous page-view events only (no cookies, no personal data). You can also disable analytics entirely from the settings page.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.2<\/h4>\n\n<ul>\n<li>Fix: Remove ALL duplicate canonical tags (not just first one) to prevent SEO conflicts.<\/li>\n<li>Fix: Strip .html suffix from canonical and og:url for clean public-facing URLs.<\/li>\n<li>Fix: Deduplicate meta tags by property\/name before injecting.<\/li>\n<li>Add: Light DOM H1 tag for SEO crawlers that cannot read Shadow DOM content.<\/li>\n<\/ul>\n\n<h4>2.0.1<\/h4>\n\n<ul>\n<li>Fix duplicate JSON-LD structured data (BlogPosting + FAQPage) appearing in both document head and Shadow DOM.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Complete rewrite for WordPress.org coding standards.<\/li>\n<li>Shadow DOM isolation for CSS conflict prevention.<\/li>\n<li>rem \u2192 em conversion for theme compatibility.<\/li>\n<li>SEO meta injection (OG, Twitter, canonical, JSON-LD).<\/li>\n<li>SPA-style internal navigation.<\/li>\n<li>Anonymous analytics with session deduplication.<\/li>\n<li>Debug logging gated behind an admin setting.<\/li>\n<li>Proper escaping, sanitization, and i18n throughout.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Embed your Upbinger-hosted blog directly into any WordPress page with full CSS isolation, SEO meta injection, and anonymous visit analytics.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/289409","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=289409"}],"author":[{"embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/upbinger"}],"wp:attachment":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=289409"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=289409"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=289409"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=289409"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=289409"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=289409"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}