Reference → SEO Module Reference

SEO Module Reference

FieldValue
Audiencepublic
Areasg-module
PillarSG-Modules
Updated2026-05-27

What is this for?

Overview

The SEO module controls how SGEN generates and exposes metadata for search engines and social platforms.
It covers four surfaces: the XML sitemap, per-page and global meta tags, Open Graph and Twitter Card output, and structured data (JSON-LD) per content type.
The module does not require a plugin.
Every field is managed from the admin interface.

This page is a field-level reference.
For each surface the tables below state what the field is, what it controls, and where it outputs.


Scope

What the SEO module covers

  • Sitemap — automatic generation of an XML sitemap covering published pages, posts, and custom post types.
Manual entries can extend the auto-generated sitemap.Scope rules control which content types and taxonomies are included.
  • Meta tags</code>, <code><meta name="description"></code>, <code><link rel="canonical"></code>, and <code><meta name="robots"></code> per page.</li></ul>Global defaults apply when a per-page override is not set.<ul><li><strong>Open Graph + Twitter Card</strong> — <code>og:title</code>, <code>og:description</code>, <code>og:image</code>, <code>og:type</code>, <code>twitter:card</code>, <code>twitter:title</code>, <code>twitter:description</code>, <code>twitter:image</code>.</li></ul>Social preview metadata served when content is shared on social platforms.<ul><li><strong>Structured data (JSON-LD)</strong> — schema markup output per content type (Organization, WebSite, Article, BreadcrumbList, Product, FAQPage).</li></ul>Output is injected into the <code><head></code> of the relevant pages.<h3>What the SEO module does NOT cover</h3><ul><li>Analytics tracking — that is the Tracking & Consent module.</li><li>Redirect rules for crawl management — that is the Redirects module.</li><li>Site speed or Core Web Vitals optimization — those are platform-level (Server-First Speed is architectural, not configurable).</li><li>Ad conversion tags — those are Tracking & Consent categories.</li></ul><hr><h2>Where to find it</h2><p>Navigate to <strong>SG-Modules > SEO</strong> in the admin sidebar.<br>The SEO panel opens with four tabs: <strong>Sitemap</strong>, <strong>Meta & Canonical</strong>, <strong>Social</strong>, and <strong>Structured Data</strong>.<br>Per-page overrides are available inside the page editor under the <strong>SEO</strong> accordion, which appears below the content area on every page and post.</p><hr><h2>Fields</h2><h3>Sitemap fields</h3><table><thead><tr><th>Field</th><th>Location</th><th>What it controls</th></tr></thead><tbody><tr><td>Sitemap enabled</td><td>Sitemap tab → toggle</td><td>Turns XML sitemap generation on or off. When off, the sitemap URL returns 404.</td></tr><tr><td>Content types included</td><td>Sitemap tab → Content types</td><td>Checkboxes for Pages, Posts, and any registered custom content types. Unchecked types are excluded from the sitemap.</td></tr><tr><td>Taxonomies included</td><td>Sitemap tab → Taxonomies</td><td>Checkboxes for Categories, Tags, and custom taxonomies. Controls whether taxonomy archive URLs are included.</td></tr><tr><td>Include images</td><td>Sitemap tab → Images</td><td>When on, the sitemap includes <code><image:image></code> nodes linking to images attached to each entry.</td></tr><tr><td>Priority (default)</td><td>Sitemap tab → Priority</td><td>Numeric value 0.0-1.0. Applied to all auto-generated entries unless a per-page override is set.</td></tr><tr><td>Change frequency (default)</td><td>Sitemap tab → Change frequency</td><td><code>always</code> / <code>hourly</code> / <code>daily</code> / <code>weekly</code> / <code>monthly</code> / <code>yearly</code> / <code>never</code>. Signal to crawlers about update cadence.</td></tr><tr><td>Manual sitemap entries</td><td>Sitemap tab → Manual entries</td><td>List of URL + priority + change frequency. Added to the sitemap alongside auto-generated entries.</td></tr><tr><td>Sitemap URL</td><td>Read-only display</td><td>The live sitemap URL for this site, formatted as <code>https://<site-domain>/sitemap.xml</code>.</td></tr></tbody></table><pre><code class="language-yaml">## Example: sitemap configuration statesitemap_enabled: truecontent_types: [pages, posts, products]taxonomies: [categories]include_images: truepriority_default: 0.6change_frequency_default: weeklymanual_entries:- url: https://example.com/special-landingpriority: 0.9change_frequency: monthly</code></pre><hr><h3>Meta tag fields</h3><table><thead><tr><th>Field</th><th>Location</th><th>What it controls</th><th>Output tag</th></tr></thead><tbody><tr><td>Site title</td><td>Meta & Canonical tab → Global defaults → Site title</td><td>Default title suffix appended to page titles when no per-page title override is set.</td><td><code><title></code></td></tr><tr><td>Title separator</td><td>Meta & Canonical tab → Global defaults → Separator</td><td>Character between page title and site title (e.g. <code>·</code> <code></td><td></code> <code>—</code>).</td><td><code><title></code></td></tr><tr><td>Meta description (global)</td><td>Meta & Canonical tab → Global defaults → Description</td><td>Fallback meta description when no per-page description is set. 155-character recommended limit displayed in-field.</td><td><code><meta name="description"></code></td></tr><tr><td>Canonical URL mode</td><td>Meta & Canonical tab → Canonical</td><td><code>auto</code> generates the canonical from the current URL. <code>manual</code> lets you specify a canonical per page.</td><td><code><link rel="canonical"></code></td></tr><tr><td>Robots — index</td><td>Meta & Canonical tab → Robots defaults → Index</td><td>Global default for whether pages are indexed. Per-page override available.</td><td><code><meta name="robots" content="index..."></code></td></tr><tr><td>Robots — follow</td><td>Meta & Canonical tab → Robots defaults → Follow</td><td>Global default for whether links on pages are followed. Per-page override available.</td><td><code><meta name="robots" content="... follow"></code></td></tr><tr><td>Robots — noarchive</td><td>Meta & Canonical tab → Robots defaults → No archive</td><td>Instructs search engines not to cache the page. Per-page override available.</td><td><code><meta name="robots" content="noarchive"></code></td></tr><tr><td>Per-page title override</td><td>Page editor → SEO accordion → Title</td><td>Replaces the auto-generated title for this page only.</td><td><code><title></code></td></tr><tr><td>Per-page description override</td><td>Page editor → SEO accordion → Description</td><td>Replaces the fallback meta description for this page only.</td><td><code><meta name="description"></code></td></tr><tr><td>Per-page robots override</td><td>Page editor → SEO accordion → Robots</td><td>Overrides global robots setting for this page only. Dropdown: Index/Noindex, Follow/Nofollow.</td><td><code><meta name="robots"></code></td></tr><tr><td>Per-page canonical override</td><td>Page editor → SEO accordion → Canonical URL</td><td>Sets a specific canonical URL for this page. Leave blank to use auto mode.</td><td><code><link rel="canonical"></code></td></tr></tbody></table><hr><h3>Open Graph and Twitter Card fields</h3><table><thead><tr><th>Field</th><th>Location</th><th>What it controls</th><th>Output tag</th></tr></thead><tbody><tr><td>OG site name</td><td>Social tab → Open Graph → Site name</td><td>The <code>og:site_name</code> value applied to all pages.</td><td><code><meta property="og:site_name"></code></td></tr><tr><td>OG title (fallback)</td><td>Social tab → Open Graph → Default title</td><td>Used when no per-page OG title is set. Defaults to the page <code><title></code> if left blank.</td><td><code><meta property="og:title"></code></td></tr><tr><td>OG description (fallback)</td><td>Social tab → Open Graph → Default description</td><td>Fallback OG description. Defaults to meta description if blank.</td><td><code><meta property="og:description"></code></td></tr><tr><td>OG image (fallback)</td><td>Social tab → Open Graph → Default image</td><td>Image used for social shares when no per-page image is set. Recommended: 1200×630 px.</td><td><code><meta property="og:image"></code></td></tr><tr><td>OG type</td><td>Social tab → Open Graph → Type</td><td><code>website</code> for most pages, <code>article</code> for posts. SGEN auto-sets this per content type.</td><td><code><meta property="og:type"></code></td></tr><tr><td>Twitter card type</td><td>Social tab → Twitter Card → Card type</td><td><code>summary</code> or <code>summary_large_image</code>. Controls the card display format on Twitter / X.</td><td><code><meta name="twitter:card"></code></td></tr><tr><td>Twitter site handle</td><td>Social tab → Twitter Card → Site handle</td><td>The <code>@handle</code> of the Twitter / X account for this site.</td><td><code><meta name="twitter:site"></code></td></tr><tr><td>Per-page OG title</td><td>Page editor → SEO accordion → Social → OG title</td><td>Overrides OG title for this page only.</td><td><code><meta property="og:title"></code></td></tr><tr><td>Per-page OG description</td><td>Page editor → SEO accordion → Social → OG description</td><td>Overrides OG description for this page only.</td><td><code><meta property="og:description"></code></td></tr><tr><td>Per-page OG image</td><td>Page editor → SEO accordion → Social → OG image</td><td>Overrides OG image for this page only. Upload or select from media library.</td><td><code><meta property="og:image"></code></td></tr></tbody></table><hr><h3>Structured data fields</h3><table><thead><tr><th>Schema type</th><th>Pages it applies to</th><th>Fields it outputs</th><th>Toggle location</th></tr></thead><tbody><tr><td>Organization</td><td>All pages (sitewide)</td><td><code>name</code>, <code>url</code>, <code>logo</code>, <code>sameAs</code> (social profile URLs)</td><td>Structured Data tab → Organization</td></tr><tr><td>WebSite</td><td>All pages (sitewide)</td><td><code>name</code>, <code>url</code>, <code>potentialAction</code> (sitelinks search box, if enabled)</td><td>Structured Data tab → WebSite</td></tr><tr><td>Article</td><td>Blog posts and news posts</td><td><code>headline</code>, <code>datePublished</code>, <code>dateModified</code>, <code>author</code>, <code>image</code></td><td>Structured Data tab → Article → Enable</td></tr><tr><td>BreadcrumbList</td><td>All pages with a navigable hierarchy</td><td>Auto-generated from page tree / category hierarchy</td><td>Structured Data tab → Breadcrumbs → Enable</td></tr><tr><td>Product</td><td>Product pages (Ecommerce module)</td><td><code>name</code>, <code>description</code>, <code>image</code>, <code>sku</code>, <code>offers</code> (price, currency, availability)</td><td>Structured Data tab → Product → Enable</td></tr><tr><td>FAQPage</td><td>Any page using the FAQ block</td><td><code>mainEntity</code> items derived from FAQ block content</td><td>Structured Data tab → FAQ → Enable</td></tr></tbody></table><pre><code class="language-json">// Example: Organization JSON-LD output{"@context": "https://schema.org","@type": "Organization","name": "Your Site Name","url": "https://yoursite.com","logo": "https://yoursite.com/media/logo.png","sameAs": ["https://instagram.com/yoursite","https://twitter.com/yoursite"]}</code></pre><hr><h2>When to use this</h2><h3>When to use this</h3><p>Use the SEO module whenever you need to control how the site appears in search results or on social platforms.</p><p><strong>Sitemap management</strong> applies when you add a new content type and need it indexed, when you need to exclude a section of the site from crawling, or when you want to add a non-CMS URL (such as a separate landing page) to the sitemap for completeness.</p><p><strong>Meta tag management</strong> applies when the auto-generated title or description for a high-traffic page does not match the target search intent.<br>Set a per-page override in the page editor's SEO accordion rather than changing the global default.</p><p><strong>Open Graph</strong> applies when content is shared on LinkedIn, Facebook, or Slack and the preview card needs to show a specific image and copy rather than the fallback.<br>Per-page OG image overrides are the most common use.</p><p><strong>Structured data</strong> applies when you want rich results in Google Search — FAQ dropdowns, breadcrumb trails, product price snippets.<br>Toggle on the relevant schema types and confirm the required fields are populated.</p><hr><h2>Configuration</h2><h3>Configuration</h3><p>See subsections below for each configuration task.</p><h3>Setting global defaults</h3><ol><li>Open <strong>SG-Modules > SEO</strong> from the admin sidebar.</li><li>Select the <strong>Meta & Canonical</strong> tab.</li><li>Set <strong>Site title</strong> to the brand name used as the title suffix across all pages.</li><li>Choose a <strong>separator</strong> character.</li><li>Enter a <strong>Meta description</strong> (global) — this is the fallback when no per-page description is set.</li><li>Set <strong>Canonical URL mode</strong> to <code>auto</code> unless the site has specific cross-domain canonical requirements.</li><li>Set <strong>Robots defaults</strong> to <code>index, follow</code> for a public site.</li><li>Save.</li></ol><h3>Adding a per-page SEO override</h3><ol><li>Open the page in the page editor.</li><li>Scroll to the <strong>SEO</strong> accordion below the content area and expand it.</li><li>Enter a <strong>Title</strong> override (60 characters or fewer recommended).</li><li>Enter a <strong>Description</strong> override (155 characters or fewer recommended).</li><li>Upload or select an <strong>OG image</strong> if the social share preview needs a specific visual.</li><li>If applicable, enter a <strong>Per-page canonical URL</strong> — used when this page duplicates content on another URL and the canonical should point elsewhere.</li><li>Leave <strong>Robots</strong> at global unless this page requires <code>noindex</code> (e.g. a thank-you page or duplicate content URL).</li><li>Save the page.</li></ol><h3>Configuring the sitemap</h3><ol><li>Open <strong>SG-Modules > SEO > Sitemap</strong> tab.</li><li>Confirm <strong>Sitemap enabled</strong> is on.</li><li>Check the content types that should appear in the sitemap.</li><li>Uncheck any content type that should be excluded (e.g. internal drafts archive or staging content type).</li><li>Set the <strong>Priority (default)</strong> — 0.6 is a reasonable starting point for most content.</li><li>Set the <strong>Change frequency (default)</strong> — weekly is appropriate for regularly updated sites; monthly suits mostly static pages.</li><li>Toggle <strong>Include images</strong> on if the site has image-heavy content where image search visibility matters.</li><li>Add manual entries for any URLs not managed by the CMS that need to be discoverable.</li><li>Copy the <strong>Sitemap URL</strong> and submit it to Google Search Console and Bing Webmaster Tools.</li><li>Save.</li></ol><h3>Enabling structured data</h3><ol><li>Open <strong>SG-Modules > SEO > Structured Data</strong> tab.</li><li>Fill in the <strong>Organization</strong> fields: name, URL, logo, and any social profile URLs.</li><li>Toggle on <strong>Article</strong> if the site publishes blog posts.</li><li>Toggle on <strong>Breadcrumbs</strong> if the site has a multi-level page hierarchy that should surface in search results.</li><li>Toggle on <strong>Product</strong> if the Ecommerce module is active and product schema is needed.</li><li>Save.</li></ol><hr><h2>Examples</h2><h3>Examples</h3><p><strong>Example 1 — A product launch page needs a custom social share image.</strong><br>The marketing team creates a 1200×630 launch graphic.<br>They open the launch page in the editor, expand the SEO accordion, and upload the graphic to the <strong>OG image</strong> field.<br>They also write a custom OG title and description that differ from the page's standard meta description.<br>When the URL is shared on LinkedIn, the custom card renders.<br>The organic meta title and description on the page are unchanged — only the social preview is customised.</p><p><strong>Example 2 — Removing a category archive from the sitemap.</strong><br>The site has a "Legacy" category that archives old content.<br>The team opens <strong>SG-Modules > SEO > Sitemap</strong>, unchecks <strong>Categories</strong> from the Taxonomies list (or uses per-taxonomy scoping to exclude only the Legacy category if available), and saves.<br>The category archive URLs no longer appear in the sitemap submitted to search engines.<br>Existing pages within the Legacy category remain published — only the category archive URL is excluded from the sitemap.</p><p><strong>Example 3 — Enabling FAQ rich results.</strong><br>The FAQ page uses the SGEN FAQ block with ten question-answer pairs.<br>The team opens <strong>Structured Data</strong> tab, enables <strong>FAQPage</strong>, and saves.<br>SGEN injects a <code>FAQPage</code> JSON-LD block into the page <code><head></code>.<br>The team validates the output in Google's Rich Results Test.</p><p><strong>Example 4 — Setting a canonical on a duplicate landing page.</strong><br>A paid-search landing page duplicates content from the main product page.<br>The team opens the landing page editor, expands the SEO accordion, switches <strong>Canonical URL mode</strong> to <code>manual</code>, and enters the URL of the canonical product page.<br>Search engines attribute ranking signals to the product page, not the duplicate.</p><hr><h2>Edge cases</h2><h3>Edge cases</h3><p><strong>Sitemap not updating after publishing a new page.</strong><br>The sitemap regenerates on publish.<br>If the URL does not appear, confirm the page is published (not draft) and that its content type is checked in the Sitemap settings.<br>Cache layers on the CDN may delay the updated sitemap being served — purge the sitemap URL from the CDN cache if needed.</p><p><strong>Robots meta showing <code>noindex</code> on a public page.</strong><br>Check the per-page robots override first — it takes precedence over the global setting.<br>If no per-page override is set, check the global robots default in <strong>Meta & Canonical</strong> tab.<br>A common cause: the page was built on a staging environment with <code>noindex</code> set globally, and the setting was not changed after launch.</p><p><strong>OG image not updating after replacing the image in the media library.</strong><br>Social platforms cache OG data aggressively.<br>Use the platform's URL inspection tool (e.g. Facebook Sharing Debugger, LinkedIn Post Inspector) to force a re-scrape of the URL.<br>The image in SGEN is correct once you save the page — the platform cache is the delay.</p><p><strong>Structured data validation errors in Google Search Console.</strong><br>The most common cause is a missing required field.<br>For Article schema: confirm the post has a published date, an author name, and a featured image.<br>For Product schema: confirm the product has a price and availability status set in the Ecommerce module.</p><p><strong>Canonical URL conflicts between two pages both claiming the same canonical.</strong><br>SGEN does not validate that two pages claim the same canonical URL.<br>If two pages set identical manual canonicals, search engines resolve the conflict using their own signals.<br>Audit canonical assignments when merging or consolidating pages.</p><p><strong>Per-page title override character count.</strong><br>SGEN does not enforce a hard character limit on title overrides — it displays a character count indicator.<br>Titles over 60 characters are likely to be truncated in search results.<br>The indicator turns yellow above 55 characters and red above 65 characters.</p><hr><h2>Related features</h2><h3>Related</h3><ul><li><a href="redirects-module-reference.md">Redirects module</a> — use redirects alongside sitemap changes when you remove or rename a URL. A removed URL without a redirect generates 404 signals that harm crawl health.</li><li><a href="tracking-consent-module-reference.md">Tracking & Consent module</a> — analytics and ad scripts are gated by consent categories. SEO structured data is not gated by consent (it is server-rendered, not script-injected).</li><li><a href="ecommerce-module-reference.md">Ecommerce module</a> — Product schema fields are sourced from the Ecommerce module's product fields. SEO and Ecommerce need to both be configured for product rich results.</li><li><a href="../sgb/page-builder.md">Page Builder</a> — per-page SEO overrides are accessible from within the page editor, whether you use SG-Builder or the standard editor.</li></ul><hr><h2>Related reading</h2><table><thead><tr><th>Topic</th></tr></thead><tbody><tr><td><a href="redirects-module-reference.md">Redirects Module Reference</a></td></tr><tr><td><a href="tracking-consent-module-reference.md">Tracking & Consent Module Reference</a></td></tr><tr><td><a href="ecommerce-module-reference.md">Ecommerce Module Reference</a></td></tr></tbody></table></div><div id="i9mx9" data-component-id="sgb_mp2a4osavj1yh" class="sgb-component sgb-component-text"><div class="post-nav"> <nav class="sg-post-navigation"> <ul class="post-nav-list"> <li class="post-nav-prev"> <a href="https://documentationsgen.staging.sgen.com/blog/reference/redirects-module-reference" class="btn btn-primary"> <div class="nav-icon"> <i data-lucide="chevron-left" class="icon" aria-hidden="true"></i> </div> <div class="nav-label"> <span class="nav-label-txt">← Previous</span> <span class="nav-label-title">Redirects Module Reference</span> </div> </a> </li> <li class="post-nav-next"> <a href="https://documentationsgen.staging.sgen.com/blog/reference/tracking-consent-module-reference" class="btn btn-primary"> <div class="nav-label"> <span class="nav-label-txt">Next →</span> <span class="nav-label-title">Tracking and Consent Module Reference</span> </div> <div class="nav-icon"> <i data-lucide="chevron-right" class="icon" aria-hidden="true"></i> </div> </a> </li> </ul> </nav> </div></div></div><div id="comp_mp2a4osainnjt" data-component-id="sgb_mp2a4osainnjt" class="sgb-component docs-toc col cell"><div id="iqpyk" data-component-id="sgb_mp2a4oscig22i" class="sgb-component sgb-component-text"><div class="docs-toc-inner"><div class="toc-label">On this page</div><nav class="toc-list" aria-label="Page sections"><span class="toc-empty">Loading...</span></nav></div></div></div></div></div></section> </main> <footer id="masterfoot"> <div></div> </footer></div> <div id="searchbar" class="sgen-searchbar-overlay" aria-hidden="true" aria-label="Search overlay"> <div class="sgen-searchbar-backdrop" aria-label="Close search"></div> <div class="sgen-searchbar-dialog" role="dialog" aria-modal="true" aria-labelledby="sgen-searchbar-title"> <div class="sgen-searchbar-inner"> <button type="button" class="sgen-searchbar-close" aria-label="Close search">×</button> <h2 id="sgen-searchbar-title" class="sgen-searchbar-title">Search</h2> <form class="sgen-searchbar-form" action="https://documentationsgen.staging.sgen.com/search" method="get" role="search"> <label for="sgen-searchbar-input" class="visually-hidden">Search this site</label> <input type="search" id="sgen-searchbar-input" name="s" class="sgen-searchbar-input" placeholder="Search pages and posts…" autocomplete="off"> <button type="submit" class="btn btn-primary sgen-searchbar-submit">Search</button> </form> </div> </div></div> <script type="text/javascript" src="https://documentationsgen.staging.sgen.com/assets/defaults/js/lucide.min.js?v=1.0.19" defer /></script><script type="text/javascript" defer />(function(){function run(){if(window.lucide&&typeof window.lucide.createIcons==='function')window.lucide.createIcons()}if(document.readyState!=='loading')run();else document.addEventListener('DOMContentLoaded',run);setTimeout(run,100)})();</script><script type="text/javascript" src="https://documentationsgen.staging.sgen.com/assets/defaults/modules/wowjs/dist/wow.min.js?v=1.0.19" defer /></script><script type="text/javascript" defer />if(typeof WOW!=='undefined'){new WOW().init()}</script><script type="text/javascript" src="https://documentationsgen.staging.sgen.com/assets/front/vendors/swiper/swiper-bundle.min.js?v=1.0.19" defer /></script><script type="text/javascript" src="https://documentationsgen.staging.sgen.com/assets/defaults/sgen/assets/js/sg-drawer.js?v=1.0.19" defer /></script><script type="text/javascript" src="https://documentationsgen.staging.sgen.com/assets/front/js/locations.min.js?v=1.0.19" defer /></script><script type="text/javascript" src="https://documentationsgen.staging.sgen.com/assets/front/js/locations-picker.js?v=1.0.19" defer /></script><script type="text/javascript" defer />window.sgenAccessibility={alignment:"right"};</script><script type="text/javascript" src="https://documentationsgen.staging.sgen.com/assets/front/js/sgen-accessibility.min.js?v=1.0.19" defer /></script><script type="text/javascript" defer />window.sgcom=window.sgcom||{};window.sgcom.config={cart:{mode:'drawer',button:{mode:'redirect',show_count:true,inline_count:false},urls:{cart:'https://documentationsgen.staging.sgen.com/cart/',checkout:'https://documentationsgen.staging.sgen.com/checkout/',state:'https://documentationsgen.staging.sgen.com/do_shopping/cart_state',add:'https://documentationsgen.staging.sgen.com/add_to_cart',remove:'https://documentationsgen.staging.sgen.com/remove_from_cart'}}};window.sgcom.cart=window.sgcom.cart||{};window.sgcom.checkout=window.sgcom.checkout||{};window.sgcom.ui=window.sgcom.ui||{};</script><script type="text/javascript" defer />window.sgcom=window.sgcom||{};window.sgcom.config={cart:{mode:'drawer',button:{mode:'redirect',show_count:true,inline_count:false},urls:{cart:'https://documentationsgen.staging.sgen.com/cart/',checkout:'https://documentationsgen.staging.sgen.com/checkout/',state:'https://documentationsgen.staging.sgen.com/do_shopping/cart_state',add:'https://documentationsgen.staging.sgen.com/add_to_cart',remove:'https://documentationsgen.staging.sgen.com/remove_from_cart'}}};window.sgcom.cart=window.sgcom.cart||{};window.sgcom.checkout=window.sgcom.checkout||{};window.sgcom.ui=window.sgcom.ui||{};</script><script type="text/javascript" src="https://documentationsgen.staging.sgen.com/assets/front/js/ecommerce.plugin.js?v=1.0.19" defer /></script><script type="text/javascript" src="https://documentationsgen.staging.sgen.com/assets/front/js/ecommerce.js?v=1.0.19" defer /></script><script type="text/javascript" src="https://documentationsgen.staging.sgen.com/assets/defaults/js/plugins.min.js?v=1.0.19" defer /></script><script type="text/javascript" src="https://documentationsgen.staging.sgen.com/assets/front/js/forms.min.js?v=1.0.19" defer /></script><script type="text/javascript" src="https://documentationsgen.staging.sgen.com/assets/front/js/sessionAttributerForms.min.js?v=1.0.19" defer /></script><script type="text/javascript" src="https://documentationsgen.staging.sgen.com/assets/front/js/plugins.min.js?v=1.0.19" defer /></script><script type="text/javascript" src="https://documentationsgen.staging.sgen.com/assets/front/js/sgbuilder.min.js?v=1.0.19" defer /></script><script type="text/javascript" src="https://documentationsgen.staging.sgen.com/assets/front/js/main.min.js?v=1.0.19" defer /></script><script type="text/javascript" src="https://documentationsgen.staging.sgen.com/assets/front/js/sgen-mobile-menu.js?v=1.0.19" defer /></script><script type="text/javascript" src="https://documentationsgen.staging.sgen.com/assets/front/js/lazyLoad.min.js?v=1.0.19" defer /></script><script type="text/javascript" src="/assets/dispenza/js/dispenza.js?v=1.0.19" defer /></script> <script>document.addEventListener('DOMContentLoaded',function(){if(document.querySelector('.docs-sidebar, .docs-article, .docs-toc-inner')){var here=location.pathname.replace(/\/$/,'');document.querySelectorAll('.docs-sidebar a.nav-item').forEach(function(a){var href=(a.getAttribute('href')||'').split('#')[0].split('?')[0].replace(/\/$/,'');if(href&&href===here){a.classList.add('active');var p=a.closest('details.nav-group');if(p)p.open=true}});var tocLinks=document.querySelectorAll('.docs-toc-inner .toc-list a, .docs-toc-inner nav a');if(tocLinks.length&&'IntersectionObserver'in window){var byId={};tocLinks.forEach(function(a){var id=(a.getAttribute('href')||'').replace('#','');if(id)byId[id]=a});var heads=[];Object.keys(byId).forEach(function(id){var h=document.getElementById(id);if(h)heads.push(h)});if(heads.length){var io=new IntersectionObserver(function(entries){entries.forEach(function(e){var a=byId[e.target.id];if(!a)return;if(e.isIntersecting){tocLinks.forEach(function(x){x.classList.remove('active')});a.classList.add('active')}})},{rootMargin:'-80px 0px -65% 0px',threshold:0});heads.forEach(function(h){io.observe(h)})}}}var isMobile=function(){return window.innerWidth<992};var hideViewAll=function(){document.querySelectorAll('#mobile-nav .mega-grid a').forEach(function(a){if(/^view all/i.test((a.textContent||'').trim()))a.style.display='none'})};var blockMainRoute=function(e){if(!isMobile())return;var a=e.target.closest('#mobile-nav .sg-nav-item.is-mega-menu > .sg-nav-link');if(a){e.preventDefault();var li=a.closest('li.is-mega-menu');if(li){li.classList.toggle('mobile-open');var drop=li.querySelector('.sg-dropdown-menu');if(drop){drop.style.display=(drop.style.display==='block'?'none':'block')}}}};document.addEventListener('click',blockMainRoute,true);hideViewAll();document.querySelectorAll('.mobile-toggler-burger').forEach(function(b){b.addEventListener('click',function(){setTimeout(hideViewAll,300)})})});</script><script>(function(){if(window.__SG_MOBILE_ACCORDION_SINGLE)return;function init(){var mn=document.querySelector('#mobile-nav');if(!mn)return false;var triggers=mn.querySelectorAll('ul.sg-site-navigation > li.sg-dropdown > .sg-nav-link, ul.sg-site-navigation > li.sg-dropdown > a');if(!triggers.length)return false;triggers.forEach(function(t){t.addEventListener('click',function(e){var thisLi=t.closest('li.sg-dropdown');if(!thisLi)return;mn.querySelectorAll('li.sg-dropdown.mobile-open').forEach(function(other){if(other!==thisLi)other.classList.remove('mobile-open')})},true)});window.__SG_MOBILE_ACCORDION_SINGLE=true;return true}if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',init);else if(!init())setTimeout(init,500)})();</script><script>(function(){if(window.__HL_DATE_SWAP)return;function init(){var cards=document.querySelectorAll('body.page_id-136 #comp_mouzev9o02e6h .article-item');if(!cards.length)return false;var dateRe=/^(January|February|March|April|May|June|July|August|September|October|November|December)\s+(\d{1,2}),\s*(\d{4})/i;cards.forEach(function(card){var desc=card.querySelector('.description');var dateEl=card.querySelector('.article-date');if(!desc||!dateEl)return;var m=desc.textContent.trim().match(dateRe);if(!m)return;var formatted=m[1].slice(0,3).toUpperCase()+' '+m[2]+', '+m[3];var svg=dateEl.querySelector('svg');dateEl.innerHTML='';if(svg)dateEl.appendChild(svg);dateEl.appendChild(document.createTextNode(' '+formatted));desc.innerHTML=desc.innerHTML.replace(/^[^A-Z]*(January|February|March|April|May|June|July|August|September|October|November|December)\s+\d{1,2},\s*\d{4}\s*[—–-]\s*/i,'')});window.__HL_DATE_SWAP=true;return true}if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',init);else if(!init())setTimeout(init,500)})();</script><script>(function(){if(window.__BLOG_BACK_LINK)return;function init(){if(!document.body.classList.contains('sgposts-blog_single'))return false;var m=location.pathname.match(/^\/blog\/([^\/]+)\/[^\/]+/);var cat=m?m[1]:null;var labels={guides:'Guides',reference:'Reference',changelog:'Changelog',highlights:'Highlights','whats-new':"What's New"};var label=cat&&labels[cat]?labels[cat]:'Blog';var target=cat==='highlights'||cat==='whats-new'?'/':(cat?'/'+cat:'/blog');var bar=document.createElement('div');bar.className='blog-back-bar';bar.innerHTML='<a class="blog-back-link" href="'+target+'">← Back to '+label+'</a>';var content=document.querySelector('main')||document.querySelector('.site-content');if(content)content.insertBefore(bar,content.firstChild);window.__BLOG_BACK_LINK=true;return true}if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',init);else if(!init())setTimeout(init,500)})();</script><script>(function(){if(window.__SG_DESKTOP_ACCORDION_SINGLE)return;window.__SG_DESKTOP_ACCORDION_SINGLE=true;function wire(){var sidebars=document.querySelectorAll('.docs-sidebar-inner');if(!sidebars.length)return;sidebars.forEach(function(sb){if(sb.__sgWired)return;sb.__sgWired=true;var topGroups=[].filter.call(sb.children,function(c){return c.tagName==='DETAILS'});topGroups.forEach(function(d){d.addEventListener('toggle',function(){if(!d.open)return;topGroups.forEach(function(other){if(other!==d&&other.open)other.open=false})})})})}if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',wire);else wire();var obs=new MutationObserver(wire);obs.observe(document.documentElement,{childList:true,subtree:true})})();</script><script>(function(){if(window.__SG_BLOG_INDEX_REDIRECT)return;window.__SG_BLOG_INDEX_REDIRECT=true;try{var path=location.pathname.replace(/\/+$/,'');if(path!=='/blog')return;var ref=document.referrer||'';var sameOrigin=ref&&ref.indexOf(location.origin)===0;var dest=sameOrigin&&ref.replace(/[#?].*$/,'')!==location.href.replace(/[#?].*$/,'')?ref:'/';location.replace(dest)}catch(e){}})();</script><script>(function(){if(window.__SG_SIDEBAR_INJECTOR)return;window.__SG_SIDEBAR_INJECTOR=true;var CAT_TO_HUB={guides:'/guides',reference:'/reference',changelog:'/changelog',roadmap:'/roadmap',highlights:'/',whatsnew:'/','whats-new':'/'};var TTL_MS=5*60*1000;var pathRe=new RegExp('^/blog/([a-z0-9-]+)/','i');function getCat(){var m=location.pathname.match(pathRe);return m?m[1].toLowerCase():null}function readCache(cat){try{var raw=localStorage.getItem('__sg_sidebar_'+cat);if(!raw)return null;return JSON.parse(raw)}catch(e){return null}}function writeCache(cat,html){try{localStorage.setItem('__sg_sidebar_'+cat,JSON.stringify({t:Date.now(),html:html}))}catch(e){}}function wireAccordion(sidebar){var top=[].filter.call(sidebar.children,function(c){return c.tagName==='DETAILS'});top.forEach(function(d){if(d.__sgAccordionWired)return;d.__sgAccordionWired=true;d.addEventListener('toggle',function(){if(!d.open)return;top.forEach(function(o){if(o!==d&&o.open)o.open=false})})})}function markActive(sidebar){var here=location.pathname.replace(new RegExp('/$'),'');[].forEach.call(sidebar.querySelectorAll('a.nav-item'),function(a){var href=(a.getAttribute('href')||'').replace(new RegExp('/$'),'');if(href===here){a.classList.add('nav-item--active');var det=a.closest('details');if(det)det.open=true}})}function injectInto(target,html){target.innerHTML=html;wireAccordion(target);markActive(target)}function fetchHubSidebar(cat){var hub=CAT_TO_HUB[cat];if(!hub)return Promise.resolve(null);return fetch(hub,{credentials:'same-origin'}).then(function(r){return r.text()}).then(function(txt){var d=new DOMParser().parseFromString(txt,'text/html');var sb=d.querySelector('.docs-sidebar-inner');return sb?sb.innerHTML:null}).catch(function(){return null})}function run(){if(document.body.className.indexOf('sgposts-blog_single')<0)return;var cat=getCat();if(!cat)return;var target=document.querySelector('.docs-sidebar-inner');if(!target)return;var cached=readCache(cat);if(cached&&cached.html)injectInto(target,cached.html);fetchHubSidebar(cat).then(function(fresh){if(!fresh)return;writeCache(cat,fresh);if(!cached||cached.html!==fresh)injectInto(target,fresh)})}if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',run);else run()})();</script> </body></html>