=== Upbinger Blog === Contributors: upbinger Tags: blog, embed, seo, shadow-dom, content Requires at least: 5.6 Tested up to: 6.9 Requires PHP: 7.4 Stable tag: 2.2.0 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html Embed your Upbinger-hosted blog directly into any WordPress page with full CSS isolation, SEO meta injection, and anonymous visit analytics. == Description == **Upbinger Blog** lets you seamlessly embed your blog content — published through [Upbinger](https://upbinger.com) — into your WordPress site. The plugin uses **Shadow DOM** for complete CSS isolation, so your blog styles never clash with your theme. = Key Features = * **Customizable Styles** — Configure grid title, colors, fonts, spacing, and more from the Upbinger dashboard (Publish → Style tab). Changes apply on next publish.\n* **Back to Blog Navigation** — Configurable "← Back to Blog" link on every post for easy grid return.\n* **Shadow DOM Isolation** — Blog CSS lives inside a shadow root and cannot interfere with your theme or vice versa. * **rem → em Conversion** — Automatically converts CSS `rem` units to `em` so blog typography renders correctly regardless of your theme's root font-size. * **SEO Meta Injection** — Open Graph, Twitter Card, canonical link, and JSON-LD structured data are injected into the page `
` for search engines and social media. * **SPA Navigation** — Internal blog links navigate without a full page reload. Back/forward buttons work as expected. * **Google Fonts in Light DOM** — Font stylesheets are hoisted into the page `` so they load correctly across all browsers. * **Anonymous Analytics** — Visit counts are sent via `sendBeacon` with session deduplication. No cookies, no PII. * **Automatic Container Detection** — Finds the best content area in your theme automatically, or you can specify a CSS selector. = How It Works = 1. Your blog HTML is published to the Upbinger CDN. 2. The plugin fetches the correct page from the CDN when a visitor loads your blog route. 3. The HTML is cleaned, adapted for Shadow DOM (CSS scoping, rem→em, SEO extraction), and injected into an isolated shadow root. 4. Visitors see your blog styled exactly as designed, with zero CSS side-effects. = Requirements = * An active [Upbinger](https://upbinger.com) account with a published blog. * WordPress 5.0 or higher. * PHP 7.4 or higher. == Installation == 1. Upload the `upbinger-blog` folder to `/wp-content/plugins/`. 2. Activate the plugin through the **Plugins** menu in WordPress. 3. Navigate to **Settings → Upbinger Blog**. 4. Enter your site domain (e.g. `example.com`) and blog base path (e.g. `/blog`). 5. Optionally specify a CSS container selector or enable debug logging. 6. Visit your blog page to verify content loads correctly. == Frequently Asked Questions == = Do I need an Upbinger account? = Yes. The plugin loads blog content from Upbinger's CDN, so you need a published blog on the platform. = Will this break my theme's styles? = 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. = Why are font sizes different on my site? = Some themes set `html { font-size: 62.5%; }` which changes the meaning of CSS `rem` units. This plugin automatically converts `rem` to `em` and sets a 16px base so blog text renders at the intended size. = Does this affect my SEO? = Positively. The plugin injects Open Graph, Twitter Card, canonical link, and JSON-LD structured data into the page `` so search engines and social platforms can properly index and preview your blog content. = Are analytics GDPR compliant? = Yes. The plugin sends anonymous page-view events only (no cookies, no personal data). You can also disable analytics entirely from the settings page. == Screenshots == 1. Settings page with domain, base path, and container configuration. == Changelog == = 2.2.0 = * **Server-side rendering for SEO, with automatic fallback.** When your WordPress host can reach the Upbinger CDN, the blog is now rendered on the server: full post content, `