From 136822ff7dd6c2ca5c87b82ada9d9a03c96d7751 Mon Sep 17 00:00:00 2001 From: Matt Stein Date: Mon, 19 Feb 2024 17:57:41 -0800 Subject: [PATCH] =?UTF-8?q?Copy=20v4=20docs=20=E2=86=92=20v3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/.textlintrc.js | 18 +- docs/docs/.vitepress/config.ts | 66 +- docs/docs/.vitepress/theme/UsedByLogos.vue | 22 + .../.vitepress/theme/img/craft-cms-logo.svg | 1 + docs/docs/.vitepress/theme/img/moz-logo.svg | 1 + docs/docs/.vitepress/theme/index.ts | 7 +- docs/docs/advanced.md | 811 +++++++++-------- docs/docs/configuring.md | 622 ------------- docs/docs/configuring/access-permissions.md | 30 + docs/docs/configuring/content-seo.md | 135 +++ docs/docs/configuring/dashboard.md | 7 + docs/docs/configuring/global-seo.md | 70 ++ docs/docs/configuring/index.md | 67 ++ docs/docs/configuring/multi-environment.md | 119 +++ docs/docs/configuring/plugin-settings.md | 58 ++ docs/docs/configuring/site-settings.md | 45 + docs/docs/configuring/tracking-scripts.md | 85 ++ docs/docs/fields.md | 27 +- docs/docs/google-amp.md | 53 ++ docs/docs/index.md | 54 +- docs/docs/issues.md | 34 +- docs/docs/multi-site.md | 40 + docs/docs/overview.md | 56 +- docs/docs/resources.md | 5 +- docs/docs/resources/img/craft-cms-logo.png | Bin 3068 -> 0 bytes docs/docs/resources/img/moz-logo-blue.png | Bin 14665 -> 0 bytes .../screenshots/seomatic-global-security.png | Bin 178706 -> 0 bytes docs/docs/technologies.md | 157 ---- docs/docs/using.md | 841 ------------------ docs/docs/using/config-variables.md | 13 + docs/docs/using/empty-coalesce-operator.md | 55 ++ docs/docs/using/helper-functions.md | 25 + docs/docs/using/index.md | 331 +++++++ docs/docs/using/json-ld-meta.md | 126 +++ docs/docs/using/link-meta.md | 36 + docs/docs/using/meta-containers.md | 39 + docs/docs/using/meta-variables.md | 41 + docs/docs/using/pagination.md | 35 + docs/docs/using/script-meta.md | 19 + docs/docs/using/site-variables.md | 96 ++ docs/docs/using/tag-meta.md | 56 ++ docs/docs/using/title-meta.md | 26 + docs/docs/what-it-does.md | 102 +++ docs/package-lock.json | 742 ++++++++------- 44 files changed, 2742 insertions(+), 2431 deletions(-) create mode 100644 docs/docs/.vitepress/theme/UsedByLogos.vue create mode 100644 docs/docs/.vitepress/theme/img/craft-cms-logo.svg create mode 100644 docs/docs/.vitepress/theme/img/moz-logo.svg delete mode 100644 docs/docs/configuring.md create mode 100644 docs/docs/configuring/access-permissions.md create mode 100644 docs/docs/configuring/content-seo.md create mode 100644 docs/docs/configuring/dashboard.md create mode 100644 docs/docs/configuring/global-seo.md create mode 100644 docs/docs/configuring/index.md create mode 100644 docs/docs/configuring/multi-environment.md create mode 100644 docs/docs/configuring/plugin-settings.md create mode 100644 docs/docs/configuring/site-settings.md create mode 100644 docs/docs/configuring/tracking-scripts.md create mode 100644 docs/docs/google-amp.md create mode 100644 docs/docs/multi-site.md delete mode 100644 docs/docs/resources/img/craft-cms-logo.png delete mode 100644 docs/docs/resources/img/moz-logo-blue.png delete mode 100644 docs/docs/resources/screenshots/seomatic-global-security.png delete mode 100644 docs/docs/technologies.md delete mode 100644 docs/docs/using.md create mode 100644 docs/docs/using/config-variables.md create mode 100644 docs/docs/using/empty-coalesce-operator.md create mode 100644 docs/docs/using/helper-functions.md create mode 100644 docs/docs/using/index.md create mode 100644 docs/docs/using/json-ld-meta.md create mode 100644 docs/docs/using/link-meta.md create mode 100644 docs/docs/using/meta-containers.md create mode 100644 docs/docs/using/meta-variables.md create mode 100644 docs/docs/using/pagination.md create mode 100644 docs/docs/using/script-meta.md create mode 100644 docs/docs/using/site-variables.md create mode 100644 docs/docs/using/tag-meta.md create mode 100644 docs/docs/using/title-meta.md create mode 100644 docs/docs/what-it-does.md diff --git a/docs/.textlintrc.js b/docs/.textlintrc.js index e9508e371..d73458267 100644 --- a/docs/.textlintrc.js +++ b/docs/.textlintrc.js @@ -11,7 +11,23 @@ module.exports = { severity: 'warning' }, terminology: { - terms: `${__dirname}/.textlint.terms.json` + terms: `${__dirname}/.textlint.terms.json`, + exclude: [ + "front[- ]end(\\w*)", + "back[- ]end(\\w*)", + "command ?line", + "PDF", + "PNG", + "JPG", + "GIF", + "HTML", + "CSS", + "ID", + "Markdown", + "URL", + "walk[- ]through", + "web[- ]?site(s)?" + ] }, 'write-good': { severity: 'warning' diff --git a/docs/docs/.vitepress/config.ts b/docs/docs/.vitepress/config.ts index daa23fb04..430bed7ed 100644 --- a/docs/docs/.vitepress/config.ts +++ b/docs/docs/.vitepress/config.ts @@ -29,19 +29,63 @@ export default defineConfig({ lastUpdatedText: 'Last Updated', sidebar: [ { - text: 'Topics', + text: 'Getting Started', items: [ - {text: 'SEOmatic Plugin', link: '/'}, - {text: 'SEOmatic Overview', link: '/overview.html'}, - {text: 'Issues & Upgrading', link: '/issues.html'}, - {text: 'SEO Resources', link: '/resources.html'}, - {text: 'SEO Technologies', link: '/technologies.html'}, - {text: 'Configuring SEOmatic', link: '/configuring.html'}, - {text: 'SEOmatic Fields', link: '/fields.html'}, - {text: 'Using SEOmatic', link: '/using.html'}, - {text: 'Advanced Usage', link: '/advanced.html'}, + {text: 'Features & Installation', link: '/'}, + {text: 'Overview', link: '/overview'}, + {text: 'Issues & Upgrading', link: '/issues'}, + {text: 'What it Does', link: '/what-it-does'}, ], - } + }, + { + text: 'Using SEOmatic', + items: [ + { + text: 'Configuration', + link: '/configuring/', + collapsed: true, + items: [ + {text: 'Dashboard', link: '/configuring/dashboard'}, + {text: 'Global SEO', link: '/configuring/global-seo'}, + {text: 'Content SEO', link: '/configuring/content-seo'}, + {text: 'Site Settings', link: '/configuring/site-settings'}, + {text: 'Tracking Scripts', link: '/configuring/tracking-scripts'}, + {text: 'Plugin Settings', link: '/configuring/plugin-settings'}, + {text: 'Multi-Environment Config Settings', link: '/configuring/multi-environment'}, + {text: 'Access Permissions', link: '/configuring/access-permissions'}, + ] + }, + { + text: 'Twig Templating', + link: '/using/', + collapsed: true, + items: [ + {text: '???', link: '/using/empty-coalesce-operator'}, + {text: 'seomatic.meta', link: '/using/meta-variables'}, + {text: 'seomatic.site', link: '/using/site-variables'}, + {text: 'seomatic.config', link: '/using/config-variables'}, + {text: 'seomatic.helper', link: '/using/helper-functions'}, + {text: 'seomatic.jsonLd', link: '/using/json-ld-meta'}, + {text: 'seomatic.link', link: '/using/link-meta'}, + {text: 'seomatic.script', link: '/using/script-meta'}, + {text: 'seomatic.tag', link: '/using/tag-meta'}, + {text: 'seomatic.title', link: '/using/title-meta'}, + {text: 'Pagination', link: '/using/pagination'}, + {text: 'Meta Containers', link: '/using/meta-containers'}, + ] + }, + {text: 'SEO Settings Field', link: '/fields'}, + {text: 'Multi-Site', link: '/multi-site'}, + {text: 'Google AMP', link: '/google-amp'}, + {text: 'Advanced Usage', link: '/advanced'}, + ], + }, + { + text: 'SEO Reference', + items: [ + {text: 'Resources', link: '/resources'}, + ], + }, ], nav: [ {text: 'Home', link: 'https://nystudio107.com/plugins/seomatic'}, diff --git a/docs/docs/.vitepress/theme/UsedByLogos.vue b/docs/docs/.vitepress/theme/UsedByLogos.vue new file mode 100644 index 000000000..5785f9b35 --- /dev/null +++ b/docs/docs/.vitepress/theme/UsedByLogos.vue @@ -0,0 +1,22 @@ + + + diff --git a/docs/docs/.vitepress/theme/img/craft-cms-logo.svg b/docs/docs/.vitepress/theme/img/craft-cms-logo.svg new file mode 100644 index 000000000..657256a0e --- /dev/null +++ b/docs/docs/.vitepress/theme/img/craft-cms-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/docs/.vitepress/theme/img/moz-logo.svg b/docs/docs/.vitepress/theme/img/moz-logo.svg new file mode 100644 index 000000000..77aa2de9d --- /dev/null +++ b/docs/docs/.vitepress/theme/img/moz-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/docs/.vitepress/theme/index.ts b/docs/docs/.vitepress/theme/index.ts index 66de69c4d..6293e9cf4 100644 --- a/docs/docs/.vitepress/theme/index.ts +++ b/docs/docs/.vitepress/theme/index.ts @@ -3,6 +3,7 @@ import {h, watch} from 'vue' import './custom.css' import NYSLogo from './NYSLogo.vue'; +import UsedByLogos from './UsedByLogos.vue'; // Could also come from .env const GA_ID = 'UA-69117511-1'; @@ -15,7 +16,9 @@ export default { } ) }, - enhanceApp: (ctx) => { + enhanceApp: ({ app, router }) => { + app.component('UsedByLogos', UsedByLogos); + // Google analytics integration if (import.meta.env.PROD && GA_ID && typeof window !== 'undefined') { (function (i, s, o, g, r, a, m) { @@ -33,7 +36,7 @@ export default { ga('create', GA_ID, 'auto') ga('set', 'anonymizeIp', true) // Send a page view any time the route changes - watch(ctx.router.route, (newValue, oldValue) => { + watch(router.route, (newValue, oldValue) => { ga('set', 'page', newValue.path) ga('send', 'pageview') }) diff --git a/docs/docs/advanced.md b/docs/docs/advanced.md index 47ba685ef..19c6c6f17 100644 --- a/docs/docs/advanced.md +++ b/docs/docs/advanced.md @@ -2,23 +2,30 @@ title: Advanced Usage description: Advanced Usage documentation for the SEOmatic plugin. The SEOmatic plugin facilitates modern SEO best practices & implementation for Craft CMS 3. --- + # Advanced Usage +Using the debug toolbar, managing config settings, events for PHP developers, bundle / container settings, and using the headless SPA API. + ## Debug Toolbar -SEOmatic included a debug panel for the [Yii2 Debug Toolbar](https://nystudio107.com/blog/profiling-your-website-with-craft-cms-3s-debug-toolbar) that allows you to inspect & debug your SEO data. +SEOmatic includes a debug panel for the [Yii2 Debug Toolbar](https://nystudio107.com/blog/profiling-your-website-with-craft-cms-3s-debug-toolbar) that allows you to inspect and debug your SEO data. -![Screenshot](./resources/screenshots/seomatic-yii2-debug-toolbar.png) +![Screenshot of Craft’s debug toolbar with an SEOmatic section at the far right](./resources/screenshots/seomatic-yii2-debug-toolbar.png) The debug panel displays debug information about the tags SEOmatic generates, as well as the variables it uses to do so. You can view the **Combined** composed SEO data, or the discrete SEO data coming from the layered **Entry SEO**, **Content SEO**, and **Global SEO** settings. +The SEOmatic Debug Toolbar panel provides valuable debugging information if you have the Yii2 Debug Toolbar enabled, but it does add some overhead as well. + +If you're doing performance profiling, you can keep the Yii2 Debug Toolbar enabled, but disable the SEOmatic panel via **Plugin Settings → Advanced → SEOmatic Debug Toolbar Panel**. + ### Tags Tags are objects that represent rendered HTML tags the in the webpage. Tags are grouped together into containers for organizational purposes. -![Screenshot](./resources/screenshots/seomatic-debug-tags.png) +![Screenshot of the expanded debug toolbar open to the SEOmatic section, which has tabs for Tags and Variables, a visualization of the SEO cascade, and a listing of meta tag properties and how they’re rendered](./resources/screenshots/seomatic-debug-tags.png) You can inspect the **Properties** of the tags in each container, as well as the corresponding **Parsed Properties** after they have been rendered as Twig. @@ -47,7 +54,7 @@ Tag property example: Variables are used throughout SEOmatic when rendering tags, or controlling how tags are rendered. Tag properties often reference these variables via Twig expressions. -![Screenshot](./resources/screenshots/seomatic-debug-variables.png) +![Screenshot of the SEOmatic debug toolbar section examining meta global vars, where the title text includes Twig usage tips](./resources/screenshots/seomatic-debug-variables.png) You can inspect the **Properties** of the variables, as well as the corresponding **Parsed Properties** after they have been rendered as Twig. @@ -56,6 +63,7 @@ You can expand and sub-properties of nested properties by clicking on them. When hovering the cursor over any property, a clipboard icon will appear that when clicked on copies to the clipboard example code of how to get/set values for that particular property via Twig. Variable example: + ```twig {#-- Get the value --#} {% set value = seomatic.meta.seoImage %} @@ -67,97 +75,110 @@ Variable example: SEOmatic supports the standard `config.php` multi-environment friendly config file for the plugin settings. Just copy the `config.php` to your Craft `config/` directory as `seomatic.php` and you can configure the settings in a multi-environment friendly way. -These are the same settings that are configured in the **Plugin Settings** in the Control Panel. +These are the same settings that are configured in the **Plugin Settings** in the control panel. ## Events ### IncludeContainerEvent - const EVENT_INCLUDE_CONTAINER = 'includeContainer'; - The event that is triggered when a container is about to be included. ```php use nystudio107\seomatic\events\IncludeContainerEvent; use nystudio107\seomatic\base\Container; use yii\base\Event; -Event::on(Container::class, Container::EVENT_INCLUDE_CONTAINER, function(IncludeContainerEvent $e) { - $e->include = false; -}); + +Event::on( + Container::class, + Container::EVENT_INCLUDE_CONTAINER, + function(IncludeContainerEvent $event) { + $event->include = false; + } +); ``` ### InvalidateContainerCachesEvent - const EVENT_INVALIDATE_CONTAINER_CACHES = 'invalidateContainerCaches'; - The event that is triggered when SEOmatic is about to clear its meta container caches ```php use nystudio107\seomatic\events\InvalidateContainerCachesEvent; use nystudio107\seomatic\services\MetaContainers; use yii\base\Event; -Event::on(MetaContainers::class, MetaContainers::EVENT_INVALIDATE_CONTAINER_CACHES, function(InvalidateContainerCachesEvent $e) { - // Container caches are about to be cleared -}); + +Event::on( + MetaContainers::class, + MetaContainers::EVENT_INVALIDATE_CONTAINER_CACHES, + function(InvalidateContainerCachesEvent $event) { + // Container caches are about to be cleared + } +); ``` ### IncludeSitemapEntryEvent - const EVENT_INCLUDE_SITEMAP_ENTRY = 'IncludeSitemapEntryEvent'; - The event that is triggered when an entry is about to be included in a sitemap. ```php - use nystudio107\seomatic\events\IncludeSitemapEntryEvent; - use nystudio107\seomatic\helpers\Sitemap; - use yii\base\Event; - Event::on(Sitemap::class, Sitemap::EVENT_INCLUDE_SITEMAP_ENTRY, function(IncludeSitemapEntryEvent $e) { - $e->include = false; - }); +use nystudio107\seomatic\events\IncludeSitemapEntryEvent; +use nystudio107\seomatic\helpers\Sitemap; +use yii\base\Event; + +Event::on( + Sitemap::class, + Sitemap::EVENT_INCLUDE_SITEMAP_ENTRY, + function(IncludeSitemapEntryEvent $event) { + $event->include = false; + } +); ``` ### RegisterSitemapUrlsEvent - const EVENT_REGISTER_SITEMAP_URLS = 'registerSitemapUrls'; - The event that is triggered when registering additional URLs for a sitemap. ```php use nystudio107\seomatic\events\RegisterSitemapUrlsEvent; use nystudio107\seomatic\models\SitemapCustomTemplate; use yii\base\Event; -Event::on(SitemapCustomTemplate::class, SitemapCustomTemplate::EVENT_REGISTER_SITEMAP_URLS, function(RegisterSitemapUrlsEvent $e) { - $e->sitemaps[] = [ - 'loc' => $url, - 'changefreq' => $changeFreq, - 'priority' => $priority, - 'lastmod' => $lastMod, - ]; -}); + +Event::on( + SitemapCustomTemplate::class, + SitemapCustomTemplate::EVENT_REGISTER_SITEMAP_URLS, + function(RegisterSitemapUrlsEvent $event) { + $event->sitemaps[] = [ + 'loc' => $url, + 'changefreq' => $changeFreq, + 'priority' => $priority, + 'lastmod' => $lastMod, + ]; + } +); ``` ### RegisterSitemapsEvent - const EVENT_REGISTER_SITEMAPS = 'registerSitemaps'; - The event that is triggered when registering additional sitemaps for the sitemap index. ```php use nystudio107\seomatic\events\RegisterSitemapsEvent; use nystudio107\seomatic\models\SitemapIndexTemplate; use yii\base\Event; -Event::on(SitemapIndexTemplate::class, SitemapIndexTemplate::EVENT_REGISTER_SITEMAPS, function(RegisterSitemapsEvent $e) { - $e->sitemaps[] = [ - 'loc' => $url, - 'lastmod' => $lastMod, - ]; -}); + +Event::on( + SitemapIndexTemplate::class, + SitemapIndexTemplate::EVENT_REGISTER_SITEMAPS, + function(RegisterSitemapsEvent $event) { + $event->sitemaps[] = [ + 'loc' => $url, + 'lastmod' => $lastMod, + ]; + } +); ``` ### RegisterComponentTypesEvent - const EVENT_REGISTER_SEO_ELEMENT_TYPES = 'registerSeoElementTypes'; - The event that is triggered when registering SeoElement types SeoElement types must implement [[SeoElementInterface]] @@ -167,7 +188,8 @@ use nystudio107\seomatic\services\SeoElements; use craft\events\RegisterComponentTypesEvent; use yii\base\Event; -Event::on(SeoElements::class, +Event::on( + SeoElements::class, SeoElements::EVENT_REGISTER_SEO_ELEMENT_TYPES, function(RegisterComponentTypesEvent $event) { $event->types[] = MySeoElement::class; @@ -177,24 +199,31 @@ Event::on(SeoElements::class, ### AddDynamicMetaEvent - const EVENT_ADD_DYNAMIC_META = 'addDynamicMeta'; - The event that is triggered when SEOmatic has included the standard meta containers, and gives your plugin/module the chance to add whatever custom dynamic meta items you like ```php use nystudio107\seomatic\events\AddDynamicMetaEvent; use nystudio107\seomatic\helpers\DynamicMeta; use yii\base\Event; -Event::on(DynamicMeta::class, DynamicMeta::EVENT_ADD_DYNAMIC_META, function(AddDynamicMetaEvent $e) { - // Add whatever dynamic meta items to the containers as you like -}); +use nystudio107\seomatic\Seomatic; + +Event::on( + DynamicMeta::class, + DynamicMeta::EVENT_ADD_DYNAMIC_META, + function(AddDynamicMetaEvent $event) { + // Add whatever dynamic meta items to the containers as you like + Seomatic::$plugin->getMetaContainers() + ->metaGlobalVars + ->seoDescription = "This description overrides any others!"; + } +); ``` ## Meta Bundle / Container Settings -The directory `vendor/nystudio107/seomatic/src/seomatic-config` contains a number of files that are used when initially configuring SEOmatic. +The [`vendor/nystudio107/seomatic/src/seomatic-config`](https://github.com/nystudio107/craft-seomatic/tree/develop/src/seomatic-config) directory contains a number of files that are used when initially configuring SEOmatic. -![Screenshot](./resources/screenshots/seomatic-seomatic-config.png) +![Screenshot of a Finder window displaying the contents of the seomatic-config directory, whose visible top-level folders are categorymeta, entrymeta, and globalmeta](./resources/screenshots/seomatic-seomatic-config.png) You can copy this entire directory to your Craft `config/` directory, and customize the files to your heart’s content. SEOmatic will first look in the `config/` directory for any given file, and then fall back on its own internal `seomatic-config` files. @@ -204,11 +233,11 @@ You can bump the `Bundle.php`'s `bundleVersion` setting if you want it to re-rea ## Headless SPA API -SEOmatic allows you to fetch the meta information for any page via a controller API endpoint, so you can render the metadata via a frontend framework like VueJS or React. +SEOmatic allows you to fetch the meta information for any page via a controller API endpoint, so you can render the metadata via a front-end framework like VueJS or React. ### GraphQL Query support -To retrieve SEOmatic container data through the native [GraphQL in Craft CMS 3.3](https://docs.craftcms.com/v3/graphql.html#sending-api-requests) or the [CraftQL plugin](https://github.com/markhuot/craftql), use the `seomatic` field in your GraphQL query. Each parameter will return that container’s data, ready for insertion into the DOM. +To retrieve SEOmatic container data through [GraphQL in Craft CMS 3](https://craftcms.com/docs/3.x/graphql.html#sending-api-requests), use the `seomatic` field in your GraphQL query. Each parameter will return that container’s data, ready for insertion into the DOM. #### Stand-alone GraphQL queries @@ -217,12 +246,12 @@ You must as least pass in the URI you want metadata for: ```graphql { seomatic (uri: "/") { - metaTitleContainer - metaTagContainer - metaLinkContainer - metaScriptContainer - metaJsonLdContainer - metaSiteVarsContainer + metaTitleContainer + metaTagContainer + metaLinkContainer + metaScriptContainer + metaJsonLdContainer + metaSiteVarsContainer } } ``` @@ -232,12 +261,12 @@ You must as least pass in the URI you want metadata for: ```graphql { seomatic (uri: "/", siteId: 2) { - metaTitleContainer - metaTagContainer - metaLinkContainer - metaScriptContainer - metaJsonLdContainer - metaSiteVarsContainer + metaTitleContainer + metaTagContainer + metaLinkContainer + metaScriptContainer + metaJsonLdContainer + metaSiteVarsContainer } } ``` @@ -247,12 +276,12 @@ You must as least pass in the URI you want metadata for: ```graphql { seomatic (uri: "/", site: "french") { - metaTitleContainer - metaTagContainer - metaLinkContainer - metaScriptContainer - metaJsonLdContainer - metaSiteVarsContainer + metaTitleContainer + metaTagContainer + metaLinkContainer + metaScriptContainer + metaJsonLdContainer + metaSiteVarsContainer } } ``` @@ -262,12 +291,12 @@ You must as least pass in the URI you want metadata for: ```graphql { seomatic (uri: "/", asArray: true) { - metaTitleContainer - metaTagContainer - metaLinkContainer - metaScriptContainer - metaJsonLdContainer - metaSiteVarsContainer + metaTitleContainer + metaTagContainer + metaLinkContainer + metaScriptContainer + metaJsonLdContainer + metaSiteVarsContainer } } ``` @@ -280,12 +309,12 @@ This is useful if you’re using Next.js, Nuxt.js, Gatsby, Gridsome, or anything ```graphql { seomatic (uri: "/", environment: staging) { - metaTitleContainer - metaTagContainer - metaLinkContainer - metaScriptContainer - metaJsonLdContainer - metaSiteVarsContainer + metaTitleContainer + metaTagContainer + metaLinkContainer + metaScriptContainer + metaJsonLdContainer + metaSiteVarsContainer } } ``` @@ -295,15 +324,13 @@ This is useful if you are using a single Craft CMS instance to render metadata f Valid values are `local` for local development, `staging` for staging, and `live` for live production. -![Screenshot](./resources/screenshots/seomatic-craftql-query.png) +![Screenshot of CraftQL for some reason demonstrating a GraphQL query](./resources/screenshots/seomatic-craftql-query.png) #### Piggybacking GraphQL queries You can also piggyback on an entries query, to return all of your data for an entry as well as the SEOmatic metadata in one request. -**N.B.:** This requires using either Craft CMS 3.4 or later, or the CraftQL plugin to work. - -Native Craft CMS GraphQL: +Craft CMS GraphQL: ```graphql { @@ -322,29 +349,9 @@ Native Craft CMS GraphQL: } ``` -CraftQL Plugin: - -```graphql -{ - entry(section: homepage) { - id - title - ... on Homepage { - seomatic { - metaTitleContainer - metaTagContainer - metaLinkContainer - metaScriptContainer - metaJsonLdContainer - } - } - } -} -``` - In this case, no arguments are passed in, because the URI and siteId will be taken from the parent Entry element. But you can pass in the `asArray` argument too: -Native Craft CMS GraphQL: +Craft CMS GraphQL: ```graphql { @@ -363,31 +370,11 @@ Native Craft CMS GraphQL: } ``` -CraftQL Plugin: - -```graphql -{ - entry(section: homepage) { - id - title - ... on Homepage { - seomatic(asArray: true) { - metaTitleContainer - metaTagContainer - metaLinkContainer - metaScriptContainer - metaJsonLdContainer - } - } - } -} -``` - ### Frontend Templates GraphQL queries -SEOmatic an provide you with the frontend templates such as `robots.txt`, `humans.txt`, etc. as well: +SEOmatic an provide you with the front-end templates such as `robots.txt`, `humans.txt`, etc. as well: -![Screenshot](./resources/screenshots/seomatic-graphql-frontendtemplates-query.png) +![Screenshot of Craft’s GraphQL explorer querying SEOmatic’s `frontendTemplates`](./resources/screenshots/seomatic-graphql-frontendtemplates-query.png) ```graphql { @@ -408,13 +395,13 @@ Arguments: `site:` String - Optional - The site handle to resolve the sitemap for. -`type:` String - The frontend container type, which can be `robots`, `humans`, `security`, or `ads` +`type:` String - The front-end container type, which can be `robots`, `humans`, `security`, or `ads` #### Sitemap GraphQL queries SEOmatic can provide you with the sitemap data via GraphQL as well. -![Screenshot](./resources/screenshots/seomatic-graphql-sitemaps-query.png) +![Screenshot of Craft’s GraphQL explorer querying SEOmatic’s `sitemapIndexes`, `sitemaps`, and `sitemapStyles`](./resources/screenshots/seomatic-graphql-sitemaps-query.png) SEOmatic allows you to query for `sitemapIndexes`: @@ -469,7 +456,7 @@ SEOmatic also allows you to query for `sitemapStyles`: ```graphql { seomatic { - sitemapStyles { + sitemapStyles { filename contents } @@ -481,7 +468,9 @@ This returns the [XSL stylesheet](https://www.w3.org/Style/XSL/WhatIsXSL.html) t ### Meta Container API Endpoints -**N.B.:** Anonymous access to the Meta Container endpoints are disabled by default; you’ll need to enable them in SEOmatic → Plugin Settings → Endpoints +::: tip +Anonymous access to the Meta Container endpoints are disabled by default; enable them in **SEOmatic** → **Plugin Settings** → **Endpoints**. +::: To get all of the meta containers for a given URI, the controller action is: @@ -516,287 +505,290 @@ Should you wish to have the items in the meta containers return as an array of d ``` Which will return the data in array form: + +::: details Expand Result ```json { - "MetaTitleContainer": { - "title": { - "title": "[devMode] Craft3 | Homepage" - } + "MetaTitleContainer": { + "title": { + "title": "[devMode] Craft3 | Homepage" + } + }, + "MetaTagContainer": { + "generator": { + "content": "SEOmatic", + "name": "generator" + }, + "referrer": { + "content": "no-referrer-when-downgrade", + "name": "referrer" }, - "MetaTagContainer": { - "generator": { - "content": "SEOmatic", - "name": "generator" + "robots": { + "content": "all", + "name": "robots" + } + }, + "MetaLinkContainer": { + "canonical": { + "href": "http://craft3.test/", + "rel": "canonical" + }, + "author": { + "href": "/humans.txt", + "rel": "author", + "type": "text/plain" + }, + "alternate": { + "href": "http://craft3.test/", + "hreflang": "es", + "rel": "alternate" + } + }, + "MetaScriptContainer": [], + "MetaJsonLdContainer": { + "WebPage": { + "@context": "http://schema.org", + "@type": "WebPage", + "image": { + "@type": "ImageObject", + "height": "804", + "width": "1200" + }, + "inLanguage": "en-us", + "mainEntityOfPage": "http://craft3.test/", + "name": "Homepage", + "url": "http://craft3.test/" + }, + "BreadcrumbList": { + "@context": "http://schema.org", + "@type": "BreadcrumbList", + "description": "Breadcrumbs list", + "itemListElement": [ + { + "@type": "ListItem", + "name": "Homepage", + "item": "http://craft3.test/", + "position": 1 + } + ], + "name": "Breadcrumbs" + } + }, + "MetaSiteVarsContainer": { + "siteName": "woof", + "identity": { + "siteType": "Organization", + "siteSubType": "LocalBusiness", + "siteSpecificType": "none", + "computedType": "LocalBusiness", + "genericName": "", + "genericAlternateName": "", + "genericDescription": "", + "genericUrl": "$HOME", + "genericImage": null, + "genericImageWidth": "229", + "genericImageHeight": "220", + "genericImageIds": [ + "25" + ], + "genericTelephone": "", + "genericEmail": "", + "genericStreetAddress": "", + "genericAddressLocality": "", + "genericAddressRegion": "", + "genericPostalCode": "", + "genericAddressCountry": "", + "genericGeoLatitude": "", + "genericGeoLongitude": "", + "personGender": "Male", + "personBirthPlace": "", + "organizationDuns": "", + "organizationFounder": "", + "organizationFoundingDate": "", + "organizationFoundingLocation": "", + "organizationContactPoints": "", + "corporationTickerSymbol": "", + "localBusinessPriceRange": "$", + "localBusinessOpeningHours": [ + { + "open": null, + "close": null }, - "referrer": { - "content": "no-referrer-when-downgrade", - "name": "referrer" + { + "open": null, + "close": null }, - "robots": { - "content": "all", - "name": "robots" - } - }, - "MetaLinkContainer": { - "canonical": { - "href": "http://craft3.test/", - "rel": "canonical" + { + "open": null, + "close": null }, - "author": { - "href": "/humans.txt", - "rel": "author", - "type": "text/plain" + { + "open": null, + "close": null }, - "alternate": { - "href": "http://craft3.test/", - "hreflang": "es", - "rel": "alternate" - } - }, - "MetaScriptContainer": [], - "MetaJsonLdContainer": { - "WebPage": { - "@context": "http://schema.org", - "@type": "WebPage", - "image": { - "@type": "ImageObject", - "height": "804", - "width": "1200" - }, - "inLanguage": "en-us", - "mainEntityOfPage": "http://craft3.test/", - "name": "Homepage", - "url": "http://craft3.test/" + { + "open": null, + "close": null + }, + { + "open": null, + "close": null }, - "BreadcrumbList": { - "@context": "http://schema.org", - "@type": "BreadcrumbList", - "description": "Breadcrumbs list", - "itemListElement": [ - { - "@type": "ListItem", - "name": "Homepage", - "item": "http://craft3.test/", - "position": 1 - } - ], - "name": "Breadcrumbs" + { + "open": null, + "close": null } + ], + "restaurantServesCuisine": "", + "restaurantMenuUrl": "", + "restaurantReservationsUrl": "" }, - "MetaSiteVarsContainer": { - "siteName": "woof", - "identity": { - "siteType": "Organization", - "siteSubType": "LocalBusiness", - "siteSpecificType": "none", - "computedType": "LocalBusiness", - "genericName": "", - "genericAlternateName": "", - "genericDescription": "", - "genericUrl": "$HOME", - "genericImage": null, - "genericImageWidth": "229", - "genericImageHeight": "220", - "genericImageIds": [ - "25" - ], - "genericTelephone": "", - "genericEmail": "", - "genericStreetAddress": "", - "genericAddressLocality": "", - "genericAddressRegion": "", - "genericPostalCode": "", - "genericAddressCountry": "", - "genericGeoLatitude": "", - "genericGeoLongitude": "", - "personGender": "Male", - "personBirthPlace": "", - "organizationDuns": "", - "organizationFounder": "", - "organizationFoundingDate": "", - "organizationFoundingLocation": "", - "organizationContactPoints": "", - "corporationTickerSymbol": "", - "localBusinessPriceRange": "$", - "localBusinessOpeningHours": [ - { - "open": null, - "close": null - }, - { - "open": null, - "close": null - }, - { - "open": null, - "close": null - }, - { - "open": null, - "close": null - }, - { - "open": null, - "close": null - }, - { - "open": null, - "close": null - }, - { - "open": null, - "close": null - } - ], - "restaurantServesCuisine": "", - "restaurantMenuUrl": "", - "restaurantReservationsUrl": "" + "creator": { + "siteType": "Organization", + "siteSubType": "LocalBusiness", + "siteSpecificType": "none", + "computedType": "LocalBusiness", + "genericName": "", + "genericAlternateName": "", + "genericDescription": "", + "genericUrl": "", + "genericImage": null, + "genericImageWidth": "1340", + "genericImageHeight": "596", + "genericImageIds": [ + "24" + ], + "genericTelephone": "", + "genericEmail": "", + "genericStreetAddress": "", + "genericAddressLocality": "", + "genericAddressRegion": "", + "genericPostalCode": "", + "genericAddressCountry": "", + "genericGeoLatitude": "", + "genericGeoLongitude": "", + "personGender": "Male", + "personBirthPlace": "", + "organizationDuns": "", + "organizationFounder": "", + "organizationFoundingDate": "", + "organizationFoundingLocation": "", + "organizationContactPoints": "", + "corporationTickerSymbol": "", + "localBusinessPriceRange": "$", + "localBusinessOpeningHours": [ + { + "open": null, + "close": null }, - "creator": { - "siteType": "Organization", - "siteSubType": "LocalBusiness", - "siteSpecificType": "none", - "computedType": "LocalBusiness", - "genericName": "", - "genericAlternateName": "", - "genericDescription": "", - "genericUrl": "", - "genericImage": null, - "genericImageWidth": "1340", - "genericImageHeight": "596", - "genericImageIds": [ - "24" - ], - "genericTelephone": "", - "genericEmail": "", - "genericStreetAddress": "", - "genericAddressLocality": "", - "genericAddressRegion": "", - "genericPostalCode": "", - "genericAddressCountry": "", - "genericGeoLatitude": "", - "genericGeoLongitude": "", - "personGender": "Male", - "personBirthPlace": "", - "organizationDuns": "", - "organizationFounder": "", - "organizationFoundingDate": "", - "organizationFoundingLocation": "", - "organizationContactPoints": "", - "corporationTickerSymbol": "", - "localBusinessPriceRange": "$", - "localBusinessOpeningHours": [ - { - "open": null, - "close": null - }, - { - "open": null, - "close": null - }, - { - "open": null, - "close": null - }, - { - "open": null, - "close": null - }, - { - "open": null, - "close": null - }, - { - "open": null, - "close": null - }, - { - "open": null, - "close": null - } - ], - "restaurantServesCuisine": "", - "restaurantMenuUrl": "", - "restaurantReservationsUrl": "" + { + "open": null, + "close": null }, - "twitterHandle": "", - "facebookProfileId": "", - "facebookAppId": "", - "googleSiteVerification": "", - "bingSiteVerification": "", - "pinterestSiteVerification": "", - "sameAsLinks": { - "twitter": { - "siteName": "Twitter", - "handle": "twitter", - "url": "" - }, - "facebook": { - "siteName": "Facebook", - "handle": "facebook", - "url": "" - }, - "wikipedia": { - "siteName": "Wikipedia", - "handle": "wikipedia", - "url": "" - }, - "linkedin": { - "siteName": "LinkedIn", - "handle": "linkedin", - "url": "" - }, - "googleplus": { - "siteName": "Google+", - "handle": "googleplus", - "url": "" - }, - "youtube": { - "siteName": "YouTube", - "handle": "youtube", - "url": "" - }, - "instagram": { - "siteName": "Instagram", - "handle": "instagram", - "url": "" - }, - "pinterest": { - "siteName": "Pinterest", - "handle": "pinterest", - "url": "" - }, - "github": { - "siteName": "GitHub", - "handle": "github", - "url": "" - }, - "vimeo": { - "siteName": "Vimeo", - "handle": "vimeo", - "url": "" - } + { + "open": null, + "close": null }, - "siteLinksSearchTarget": "", - "siteLinksQueryInput": "", - "referrer": "no-referrer-when-downgrade", - "additionalSitemapUrls": [], - "additionalSitemapUrlsDateUpdated": null, - "additionalSitemaps": [] - }, - "FrontendTemplateContainer": [ { - "humans": "/* TEAM */\n\nCreator: nystudio107\nURL: https://nystudio107.com/\nDescription: We do technology-based consulting, branding, design, and development. Making the web better one site at a time, with a focus on performance, usability & SEO\n\n/* THANKS */\n\nCraft CMS - https://craftcms.com\nPixel & Tonic - https://pixelandtonic.com\n\n/* SITE */\n\nStandards: HTML5, CSS3\nComponents: Craft CMS 3, Yii2, PHP, JavaScript, SEOmatic\n" + "open": null, + "close": null }, { - "robots": "# robots.txt for http://localhost:8000/\n\nsitemap: http://localhost:8000/sitemaps-1-sitemap.xml\nsitemap: http://localhost:8000/es/sitemaps-1-sitemap.xml\n\n# local - disallow all\n\nUser-agent: *\nDisallow: /\n\n" + "open": null, + "close": null }, { - "ads": "# ads.txt file for http://localhost:8000/\n# More info: https://support.google.com/admanager/answer/7441288?hl=en\nhttp://localhost:8000/,123,DIRECT\n" + "open": null, + "close": null + }, + { + "open": null, + "close": null } - ] + ], + "restaurantServesCuisine": "", + "restaurantMenuUrl": "", + "restaurantReservationsUrl": "" + }, + "twitterHandle": "", + "facebookProfileId": "", + "facebookAppId": "", + "googleSiteVerification": "", + "bingSiteVerification": "", + "pinterestSiteVerification": "", + "sameAsLinks": { + "twitter": { + "siteName": "Twitter", + "handle": "twitter", + "url": "" + }, + "facebook": { + "siteName": "Facebook", + "handle": "facebook", + "url": "" + }, + "wikipedia": { + "siteName": "Wikipedia", + "handle": "wikipedia", + "url": "" + }, + "linkedin": { + "siteName": "LinkedIn", + "handle": "linkedin", + "url": "" + }, + "googleplus": { + "siteName": "Google+", + "handle": "googleplus", + "url": "" + }, + "youtube": { + "siteName": "YouTube", + "handle": "youtube", + "url": "" + }, + "instagram": { + "siteName": "Instagram", + "handle": "instagram", + "url": "" + }, + "pinterest": { + "siteName": "Pinterest", + "handle": "pinterest", + "url": "" + }, + "github": { + "siteName": "GitHub", + "handle": "github", + "url": "" + }, + "vimeo": { + "siteName": "Vimeo", + "handle": "vimeo", + "url": "" + } + }, + "siteLinksSearchTarget": "", + "siteLinksQueryInput": "", + "referrer": "no-referrer-when-downgrade", + "additionalSitemapUrls": [], + "additionalSitemapUrlsDateUpdated": null, + "additionalSitemaps": [] + }, + "FrontendTemplateContainer": [ + { + "humans": "/* TEAM */\n\nCreator: nystudio107\nURL: https://nystudio107.com/\nDescription: We do technology-based consulting, branding, design, and development. Making the web better one site at a time, with a focus on performance, usability & SEO\n\n/* THANKS */\n\nCraft CMS - https://craftcms.com\nPixel & Tonic - https://pixelandtonic.com\n\n/* SITE */\n\nStandards: HTML5, CSS3\nComponents: Craft CMS 3, Yii2, PHP, JavaScript, SEOmatic\n" + }, + { + "robots": "# robots.txt for http://localhost:8000/\n\nsitemap: http://localhost:8000/sitemaps-1-sitemap.xml\nsitemap: http://localhost:8000/es/sitemaps-1-sitemap.xml\n\n# local - disallow all\n\nUser-agent: *\nDisallow: /\n\n" + }, + { + "ads": "# ads.txt file for http://localhost:8000/\n# More info: https://support.google.com/admanager/answer/7441288?hl=en\nhttp://localhost:8000/,123,DIRECT\n" + } + ] } ``` +::: You can also request individual meta containers. @@ -807,9 +799,10 @@ Title container: ``` ...will return just the Title container: + ```json { - "MetaTitleContainer": "[devMode] Craft3 | Homepage" + "MetaTitleContainer": "[devMode] Craft3 | Homepage" } ``` @@ -820,10 +813,11 @@ Tag container: ``` ...will return just the Tag container: + ```json { - "MetaTagContainer": "" - } + "MetaTagContainer": "" +} ``` Script container: @@ -835,7 +829,7 @@ Script container: ...will return just the Script container: ```json { - "MetaScriptContainer": "" + "MetaScriptContainer": "" } ``` @@ -846,9 +840,10 @@ Link container: ``` ...will return just the Link container: + ```json { - "MetaLinkContainer": "" + "MetaLinkContainer": "" } ``` @@ -861,7 +856,7 @@ JSON-LD container: ...will return just the JSON-LD container: ```json { - "MetaJsonLdContainer": "" + "MetaJsonLdContainer": "" } ``` @@ -874,7 +869,7 @@ SiteVars container: ...will return just the MetaSiteVars container: ```json { - "MetaSiteVarsContainer": "{\"siteName\":\"woof\",\"identity\":{\"siteType\":\"Organization\",\"siteSubType\":\"LocalBusiness\",\"siteSpecificType\":\"none\",\"computedType\":\"LocalBusiness\",\"genericName\":\"\",\"genericAlternateName\":\"\",\"genericDescription\":\"\",\"genericUrl\":\"$HOME\",\"genericImage\":null,\"genericImageWidth\":\"229\",\"genericImageHeight\":\"220\",\"genericImageIds\":[\"25\"],\"genericTelephone\":\"\",\"genericEmail\":\"\",\"genericStreetAddress\":\"\",\"genericAddressLocality\":\"\",\"genericAddressRegion\":\"\",\"genericPostalCode\":\"\",\"genericAddressCountry\":\"\",\"genericGeoLatitude\":\"\",\"genericGeoLongitude\":\"\",\"personGender\":\"Male\",\"personBirthPlace\":\"\",\"organizationDuns\":\"\",\"organizationFounder\":\"\",\"organizationFoundingDate\":\"\",\"organizationFoundingLocation\":\"\",\"organizationContactPoints\":\"\",\"corporationTickerSymbol\":\"\",\"localBusinessPriceRange\":\"$\",\"localBusinessOpeningHours\":[{\"open\":null,\"close\":null},{\"open\":null,\"close\":null},{\"open\":null,\"close\":null},{\"open\":null,\"close\":null},{\"open\":null,\"close\":null},{\"open\":null,\"close\":null},{\"open\":null,\"close\":null}],\"restaurantServesCuisine\":\"\",\"restaurantMenuUrl\":\"\",\"restaurantReservationsUrl\":\"\"},\"creator\":{\"siteType\":\"Organization\",\"siteSubType\":\"LocalBusiness\",\"siteSpecificType\":\"none\",\"computedType\":\"LocalBusiness\",\"genericName\":\"\",\"genericAlternateName\":\"\",\"genericDescription\":\"\",\"genericUrl\":\"\",\"genericImage\":null,\"genericImageWidth\":\"1340\",\"genericImageHeight\":\"596\",\"genericImageIds\":[\"24\"],\"genericTelephone\":\"\",\"genericEmail\":\"\",\"genericStreetAddress\":\"\",\"genericAddressLocality\":\"\",\"genericAddressRegion\":\"\",\"genericPostalCode\":\"\",\"genericAddressCountry\":\"\",\"genericGeoLatitude\":\"\",\"genericGeoLongitude\":\"\",\"personGender\":\"Male\",\"personBirthPlace\":\"\",\"organizationDuns\":\"\",\"organizationFounder\":\"\",\"organizationFoundingDate\":\"\",\"organizationFoundingLocation\":\"\",\"organizationContactPoints\":\"\",\"corporationTickerSymbol\":\"\",\"localBusinessPriceRange\":\"$\",\"localBusinessOpeningHours\":[{\"open\":null,\"close\":null},{\"open\":null,\"close\":null},{\"open\":null,\"close\":null},{\"open\":null,\"close\":null},{\"open\":null,\"close\":null},{\"open\":null,\"close\":null},{\"open\":null,\"close\":null}],\"restaurantServesCuisine\":\"\",\"restaurantMenuUrl\":\"\",\"restaurantReservationsUrl\":\"\"},\"twitterHandle\":\"\",\"facebookProfileId\":\"\",\"facebookAppId\":\"\",\"googleSiteVerification\":\"\",\"bingSiteVerification\":\"\",\"pinterestSiteVerification\":\"\",\"sameAsLinks\":{\"twitter\":{\"siteName\":\"Twitter\",\"handle\":\"twitter\",\"url\":\"\"},\"facebook\":{\"siteName\":\"Facebook\",\"handle\":\"facebook\",\"url\":\"\"},\"wikipedia\":{\"siteName\":\"Wikipedia\",\"handle\":\"wikipedia\",\"url\":\"\"},\"linkedin\":{\"siteName\":\"LinkedIn\",\"handle\":\"linkedin\",\"url\":\"\"},\"googleplus\":{\"siteName\":\"Google+\",\"handle\":\"googleplus\",\"url\":\"\"},\"youtube\":{\"siteName\":\"YouTube\",\"handle\":\"youtube\",\"url\":\"\"},\"instagram\":{\"siteName\":\"Instagram\",\"handle\":\"instagram\",\"url\":\"\"},\"pinterest\":{\"siteName\":\"Pinterest\",\"handle\":\"pinterest\",\"url\":\"\"},\"github\":{\"siteName\":\"GitHub\",\"handle\":\"github\",\"url\":\"\"},\"vimeo\":{\"siteName\":\"Vimeo\",\"handle\":\"vimeo\",\"url\":\"\"}},\"siteLinksSearchTarget\":\"\",\"siteLinksQueryInput\":\"\",\"referrer\":\"no-referrer-when-downgrade\",\"additionalSitemapUrls\":[],\"additionalSitemapUrlsDateUpdated\":null,\"additionalSitemaps\":[]}" + "MetaSiteVarsContainer": "{\"siteName\":\"woof\",\"identity\":{\"siteType\":\"Organization\",\"siteSubType\":\"LocalBusiness\",\"siteSpecificType\":\"none\",\"computedType\":\"LocalBusiness\",\"genericName\":\"\",\"genericAlternateName\":\"\",\"genericDescription\":\"\",\"genericUrl\":\"$HOME\",\"genericImage\":null,\"genericImageWidth\":\"229\",\"genericImageHeight\":\"220\",\"genericImageIds\":[\"25\"],\"genericTelephone\":\"\",\"genericEmail\":\"\",\"genericStreetAddress\":\"\",\"genericAddressLocality\":\"\",\"genericAddressRegion\":\"\",\"genericPostalCode\":\"\",\"genericAddressCountry\":\"\",\"genericGeoLatitude\":\"\",\"genericGeoLongitude\":\"\",\"personGender\":\"Male\",\"personBirthPlace\":\"\",\"organizationDuns\":\"\",\"organizationFounder\":\"\",\"organizationFoundingDate\":\"\",\"organizationFoundingLocation\":\"\",\"organizationContactPoints\":\"\",\"corporationTickerSymbol\":\"\",\"localBusinessPriceRange\":\"$\",\"localBusinessOpeningHours\":[{\"open\":null,\"close\":null},{\"open\":null,\"close\":null},{\"open\":null,\"close\":null},{\"open\":null,\"close\":null},{\"open\":null,\"close\":null},{\"open\":null,\"close\":null},{\"open\":null,\"close\":null}],\"restaurantServesCuisine\":\"\",\"restaurantMenuUrl\":\"\",\"restaurantReservationsUrl\":\"\"},\"creator\":{\"siteType\":\"Organization\",\"siteSubType\":\"LocalBusiness\",\"siteSpecificType\":\"none\",\"computedType\":\"LocalBusiness\",\"genericName\":\"\",\"genericAlternateName\":\"\",\"genericDescription\":\"\",\"genericUrl\":\"\",\"genericImage\":null,\"genericImageWidth\":\"1340\",\"genericImageHeight\":\"596\",\"genericImageIds\":[\"24\"],\"genericTelephone\":\"\",\"genericEmail\":\"\",\"genericStreetAddress\":\"\",\"genericAddressLocality\":\"\",\"genericAddressRegion\":\"\",\"genericPostalCode\":\"\",\"genericAddressCountry\":\"\",\"genericGeoLatitude\":\"\",\"genericGeoLongitude\":\"\",\"personGender\":\"Male\",\"personBirthPlace\":\"\",\"organizationDuns\":\"\",\"organizationFounder\":\"\",\"organizationFoundingDate\":\"\",\"organizationFoundingLocation\":\"\",\"organizationContactPoints\":\"\",\"corporationTickerSymbol\":\"\",\"localBusinessPriceRange\":\"$\",\"localBusinessOpeningHours\":[{\"open\":null,\"close\":null},{\"open\":null,\"close\":null},{\"open\":null,\"close\":null},{\"open\":null,\"close\":null},{\"open\":null,\"close\":null},{\"open\":null,\"close\":null},{\"open\":null,\"close\":null}],\"restaurantServesCuisine\":\"\",\"restaurantMenuUrl\":\"\",\"restaurantReservationsUrl\":\"\"},\"twitterHandle\":\"\",\"facebookProfileId\":\"\",\"facebookAppId\":\"\",\"googleSiteVerification\":\"\",\"bingSiteVerification\":\"\",\"pinterestSiteVerification\":\"\",\"sameAsLinks\":{\"twitter\":{\"siteName\":\"Twitter\",\"handle\":\"twitter\",\"url\":\"\"},\"facebook\":{\"siteName\":\"Facebook\",\"handle\":\"facebook\",\"url\":\"\"},\"wikipedia\":{\"siteName\":\"Wikipedia\",\"handle\":\"wikipedia\",\"url\":\"\"},\"linkedin\":{\"siteName\":\"LinkedIn\",\"handle\":\"linkedin\",\"url\":\"\"},\"googleplus\":{\"siteName\":\"Google+\",\"handle\":\"googleplus\",\"url\":\"\"},\"youtube\":{\"siteName\":\"YouTube\",\"handle\":\"youtube\",\"url\":\"\"},\"instagram\":{\"siteName\":\"Instagram\",\"handle\":\"instagram\",\"url\":\"\"},\"pinterest\":{\"siteName\":\"Pinterest\",\"handle\":\"pinterest\",\"url\":\"\"},\"github\":{\"siteName\":\"GitHub\",\"handle\":\"github\",\"url\":\"\"},\"vimeo\":{\"siteName\":\"Vimeo\",\"handle\":\"vimeo\",\"url\":\"\"}},\"siteLinksSearchTarget\":\"\",\"siteLinksQueryInput\":\"\",\"referrer\":\"no-referrer-when-downgrade\",\"additionalSitemapUrls\":[],\"additionalSitemapUrlsDateUpdated\":null,\"additionalSitemaps\":[]}" } ``` @@ -885,17 +880,20 @@ Frontend Templates container: ``` ...will return just the Frontend Templates container: + ```json { - "FrontendTemplateContainer": "[{\"humans\":\"/* TEAM */\\n\\nCreator: nystudio107\\nURL: https://nystudio107.com/\\nDescription: We do technology-based consulting, branding, design, and development. Making the web better one site at a time, with a focus on performance, usability & SEO\\n\\n/* THANKS */\\n\\nCraft CMS - https://craftcms.com\\nPixel & Tonic - https://pixelandtonic.com\\n\\n/* SITE */\\n\\nStandards: HTML5, CSS3\\nComponents: Craft CMS 3, Yii2, PHP, JavaScript, SEOmatic\\n\"},{\"robots\":\"# robots.txt for http://localhost:8000/\\n\\nsitemap: http://localhost:8000/sitemaps-1-sitemap.xml\\nsitemap: http://localhost:8000/es/sitemaps-1-sitemap.xml\\n\\n# local - disallow all\\n\\nUser-agent: *\\nDisallow: /\\n\\n\"},{\"ads\":\"# ads.txt file for http://localhost:8000/\\n# More info: https://support.google.com/admanager/answer/7441288?hl=en\\nhttp://localhost:8000/,123,DIRECT\\n\"}]" + "FrontendTemplateContainer": "[{\"humans\":\"/* TEAM */\\n\\nCreator: nystudio107\\nURL: https://nystudio107.com/\\nDescription: We do technology-based consulting, branding, design, and development. Making the web better one site at a time, with a focus on performance, usability & SEO\\n\\n/* THANKS */\\n\\nCraft CMS - https://craftcms.com\\nPixel & Tonic - https://pixelandtonic.com\\n\\n/* SITE */\\n\\nStandards: HTML5, CSS3\\nComponents: Craft CMS 3, Yii2, PHP, JavaScript, SEOmatic\\n\"},{\"robots\":\"# robots.txt for http://localhost:8000/\\n\\nsitemap: http://localhost:8000/sitemaps-1-sitemap.xml\\nsitemap: http://localhost:8000/es/sitemaps-1-sitemap.xml\\n\\n# local - disallow all\\n\\nUser-agent: *\\nDisallow: /\\n\\n\"},{\"ads\":\"# ads.txt file for http://localhost:8000/\\n# More info: https://support.google.com/admanager/answer/7441288?hl=en\\nhttp://localhost:8000/,123,DIRECT\\n\"}]" } ``` All of the individual container controller API endpoints also accept the `&asArray=true` parameter if you’d like the data in array form. - + ### Schema.org API Endpoints -**N.B.:** Anonymous access to the Schema.org JSON-LD endpoints are disabled by default; you’ll need to enable them in SEOmatic → Plugin Settings → Endpoints +::: tip +Anonymous access to the Schema.org JSON-LD endpoints are disabled by default; enable them in **SEOmatic** → **Plugin Settings** → **Endpoints**. +::: To get a key-value array of a given [Schema.org](http://schema.org/docs/full.html) type: @@ -920,7 +918,8 @@ You can narrow this down to a specific sub-type list by passing in a `path` of s /actions/seomatic/json-ld/get-type-array?path=CreativeWork.Article ``` ...this would output all of the sub-types of `Article`: -``` + +```json { "AdvertiserContentArticle": "AdvertiserContentArticle", "NewsArticle": { @@ -946,5 +945,3 @@ You can narrow this down to a specific sub-type list by passing in a `path` of s } } ``` - -Brought to you by [nystudio107](https://nystudio107.com/) diff --git a/docs/docs/configuring.md b/docs/docs/configuring.md deleted file mode 100644 index 3cb3dc05c..000000000 --- a/docs/docs/configuring.md +++ /dev/null @@ -1,622 +0,0 @@ ---- -title: Configuring SEOmatic -description: Configuring SEOmatic documentation for the SEOmatic plugin. The SEOmatic plugin facilitates modern SEO best practices & implementation for Craft CMS 3. ---- -# Configuring SEOmatic - -As soon as you install SEOmatic, it automatically will render metadata on your web pages, and create sitemaps for all of your Sections, Category Groups, and Commerce Product Types that have public URLs. You don’t need to add any template code for this to happen. - -![Screenshot](./resources/screenshots/seomatic-multi-site.png) - -All of SEOmatic’s settings are multi-site aware, allowing you to have different settings for each site/language combination. - -For SEOmatic to be truly useful, you need to configure it so that it knows where to _pull_ SEO content from. - -**N.B.** Please ensure that you set up your [Multi-Environment Config Settings](#multi-environment-config-settings) if you will be using SEOmatic across multiple environments. - -## Dashboard - -![Screenshot](./resources/screenshots/seomatic-dashboard.png) - -The Dashboard gives you an overview of how fully set up your SEO setting in SEOmatic are, for Global SEO, Content SEO, and Site Settings. - -Click on any of the graphs to jump to the section in question to fill things out in more detail. - -## Global SEO - -**Global SEO** is where you set all of the default site-wide settings. The **Copy Settings From:** dropdown allows you to easily copy settings from one site to another. - -SEOmatic allows you to have different Global SEO settings on a per-site basis. - -### General - -![Screenshot](./resources/screenshots/seomatic-global-general.png) - -Best practices for modern SEO are for the meta information to _reflect your content_, so you should set up the fields that SEOmatic _pulls_ the **SEO Title**, **SEO Description**, and **SEO Image** from. - -### Twitter - -![Screenshot](./resources/screenshots/seomatic-global-twitter.png) - -By default, the Twitter and Facebook settings will mirror what you set in the **General** section, but you can customize them to your heart’s content. - -### Facebook - -![Screenshot](./resources/screenshots/seomatic-global-facebook.png) - -By default, the Twitter and Facebook settings will mirror what you set in the **General** section, but you can customize them to your heart’s content. - -### Robots - -![Screenshot](./resources/screenshots/seomatic-global-robots.png) - -A `robots.txt` file is a file at the root of your site that indicates those parts of your site you don’t want accessed by search engine crawlers. The file uses the [Robots Exclusion Standard](http://www.robotstxt.org/robotstxt.html), which is a protocol with a small set of commands that can be used to indicate access to your site by section and by specific kinds of web crawlers (such as mobile crawlers vs desktop crawlers). - -You shouldn’t need to edit the default `robots.txt` Template, but you can if you like. - -SEOmatic automatically handles requests for `/robots.txt`. For this to work, make sure that you do not have an actual `robots.txt` file in your `web/` folder (because that will take precedence). - -If you are running Nginx, make sure that you don’t have a line like: - - location = /robots.txt { access_log off; log_not_found off; } - -...in your config file. A directive like this will prevent SEOmatic from being able to service the request for `/robots.txt`. If you do have a line like this in your config file, just comment it out, and restart Nginx with `sudo nginx -s reload`. - -The **View robots.txt** button lets you view your rendered `robots.txt`. - -### Humans - -![Screenshot](./resources/screenshots/seomatic-global-humans.png) - -[Humans.txt](http://humanstxt.org/) is an initiative for knowing the people behind a site. It’s a text file that contains information about the different people who have contributed to building the site. By adding a text file, you can prove your authorship (not your property) in an external, fast, easy and accessible way. - -Feel free to edit the default `humans.txt` Template to your heart’s content. - -The **View humans.txt** button lets you view your rendered `humans.txt`. - -### Ads - -![Screenshot](./resources/screenshots/seomatic-global-ads.png) - -The [ads.txt](https://iabtechlab.com/ads-txt/) project is simple: Increase transparency in the programmatic advertising ecosystem. Ads.txt stands for Authorized Digital Sellers and is a simple, flexible and secure method that publishers and distributors can use to publicly declare the companies they authorize to sell their digital inventory. - -Feel free to edit the default `ads.txt` Template to your heart’s content. - -The **View ads.txt** button lets you view your rendered `ads.txt`. - -### Security - -![Screenshot](./resources/screenshots/seomatic-global-security.png) - -The [security.txt](https://securitytxt.org/) defines a standard to help organizations define the process for security researchers to disclose security vulnerabilities securely - -Feel free to edit the default `security.txt` Template to your heart’s content. - -The **View security.txt** button lets you view your rendered `security.txt`. - -### Global SEO Control Panel Fields - -The fields in the Control Panel Global SEO settings are parsed as Twig object templates, so in addition to plain old text, you can also put single and double bracket Twig expressions. - -SEOmatic fields are also parsed for aliases, and in Craft 3.1, for [environment variables](https://docs.craftcms.com/v3/config/environments.html#control-panel-settings) as well. - -This is entirely optional; in typical usage the controls you have in the Control Panel for pulling from other fields will be all you need. But the ability is there if you need it. - -For example, the following will output the contents of the **companyInfo** field from the **siteInfo** Global: - -```twig -{{ siteInfo.companyInfo }} -``` - -You can even do complex expressions, such as the following which outputs the first field that isn’t empty, or a default text: - -```twig -{{ siteInfo.companyInfo ??? siteInfo.companySummary ??? "Some default text" }} -``` - -The above uses the `???` empty coalesce operator that comes with SEOmatic; check out [SEOmatic’s ??? Empty Coalesce operator](#seomatics--empty-coalesce-operator) for details. - -You can also access SEOmatic global variables (discussed below): - -```twig -{seomatic.meta.seoTitle} -``` -Normal Twig double bracket syntax is supported too: - -```twig -{{ seomatic.meta.seoTitle }} -``` -The single bracket syntax is just a shortcut, and provided for backwards compatibility with previous versions of SEOmatic. - -## Content SEO - -![Screenshot](./resources/screenshots/seomatic-content.png) - -**Content SEO** is where you can configure each Section, Category Group and Commerce Product Type that has public URLs. You’ll see a list of all of your Sections, Category Groups, and Commerce Product Types that have public URLs, with status indicators letting you know what has been configured for each. - -SEOmatic allows you to have different Content SEO settings on a per-site basis, and also on a per-[Entry Type](https://docs.craftcms.com/v3/sections-and-entries.html#entry-types) basis. - -Click on a Section, Category Group, or Commerce Product Type name to edit its settings. - -### General - -![Screenshot](./resources/screenshots/seomatic-content-general.png) - -Best practices for modern SEO are for the meta information to _reflect your content_, so you should set up the fields that SEOmatic _pulls_ the **SEO Title**, **SEO Description**, and **SEO Image** from. - -### Twitter - -![Screenshot](./resources/screenshots/seomatic-content-twitter.png) - -By default, the Twitter and Facebook settings will mirror what you set in the **General** section, but you can customize them to your heart’s content. - -### Facebook - -![Screenshot](./resources/screenshots/seomatic-content-facebook.png) - -By default, the Twitter and Facebook settings will mirror what you set in the **General** section, but you can customize them to your heart’s content. - -### Sitemap - -![Screenshot](./resources/screenshots/seomatic-content-sitemap.png) - -SEOmatic automatically creates a sitemap index for each of your Site Groups. This sitemap index points to individual sitemaps for each of your Sections, Category Groups, and Commerce Product Types. - -Instead of one massive sitemap that must be updated any time anything changes, only the sitemap for the Section, Category Group, or Commerce Product Type will be updated when something changes in it. - -SEOmatic can automatically include files such as `.pdf`, `.xls`, `.doc` and other indexable file types in Asset fields or Asset fields in matrix or Neo blocks. - -In addition, SEOmatic can automatically create [Image sitemaps](https://support.google.com/webmasters/answer/178636?hl=en) and [Video sitemaps](https://developers.google.com/webmasters/videosearch/sitemaps) from images & videos in Asset fields or Asset fields in matrix or Neo blocks - -Sitemap Indexes are automatically submitted to search engines whenever a new Section, Category Group, or Commerce Product Type is added. - -Section Sitemaps are automatically submitted to search engines whenever a new Element in that Section, Category Group, or Commerce Product Type is added. - -#### Sitemap Generation - -Because XML sitemaps can be quite time-intensive to generate as the number of entries scales up, SEOmatic creates your sitemaps via a Queue job, and caches the result. The cache is automatically broken whenever something in that sitemap is changed, and a new Queue job is created to regenerate it. - -If `runQueueAutomatically` is set to `false` in [General Config Settings](https://docs.craftcms.com/v3/config/config-settings.html#runqueueautomatically) the Queue job to create the sitemap will not be run during the http request for the sitemap. You’ll need to run it manually via whatever means you use to run the Queue. - -Normally SEOmatic will regenerate the sitemap for a Section, Category Group, or Product any time you save an element. However, if you are importing a large number of elements, or prefer to regenerate the sitemap manually you can set disable the **Regenerate Sitemaps Automatically** option in SEOmatic’s Plugin Settings. - -![Screenshot](./resources/screenshots/seomatic-sitemap-console-command.png) - -You can then regenerate the sitemap via CLI. This will regenerate all sitemaps: - -```bash -./craft seomatic/sitemap/generate -``` - -You can also limit it to a specific Section, Category Group, or Product handle: - -```bash -./craft seomatic/sitemap/generate --handle=blog -``` - -...or you can regenerate all sitemaps for a specific `siteId`: - -```bash -./craft seomatic/sitemap/generate --siteId=1 -``` - -...or both: - -```bash -./craft seomatic/sitemap/generate --handle=blog --siteId=1 -``` -**N.B.:** If you do disable **Regenerate Sitemaps Automatically** sitemaps will _not_ be updated unless you do so manually via the CLI, or clear SEOmatic’s sitemap caches via Utilities->Clear Caches. - -#### Additional Sitemaps - -If you have custom sitemaps that are not in the CMS, you can manually add them to their own Sitemap Index via **Site Settings** → **Sitemap**. - -You can also add to it via a plugin: - -```php -use nystudio107\seomatic\events\RegisterSitemapsEvent; -use nystudio107\seomatic\models\SitemapIndexTemplate; -use yii\base\Event; -Event::on(SitemapIndexTemplate::class, SitemapIndexTemplate::EVENT_REGISTER_SITEMAPS, function(RegisterSitemapsEvent $e) { - $e->sitemaps[] = [ - 'loc' => $url, - 'lastmod' => $lastMod, - ]; -}); -``` - -#### Additional Sitemap URLs - -If you have custom URLs that are not in the CMS, you can manually add them to their own Sitemap Index via **Site Settings** → **Sitemap**. - -You can also add to it via a plugin: - -```php -use nystudio107\seomatic\events\RegisterSitemapUrlsEvent; -use nystudio107\seomatic\models\SitemapCustomTemplate; -use yii\base\Event; -Event::on(SitemapCustomTemplate::class, SitemapCustomTemplate::EVENT_REGISTER_SITEMAP_URLS, function(RegisterSitemapUrlsEvent $e) { - $e->sitemaps[] = [ - 'loc' => $url, - 'changefreq' => $changeFreq, - 'priority' => $priority, - 'lastmod' => $lastMod, - ]; - }); -``` - -### Content SEO Control Panel Fields - -The fields in the Control Panel Content SEO settings are parsed as Twig object templates, so in addition to plain old text, you can also put single and double bracket Twig expressions. - -SEOmatic fields are also parsed for aliases, and in Craft 3.1, for [environment variables](https://docs.craftcms.com/v3/config/environments.html#control-panel-settings) as well. - -This is entirely optional; in typical usage the controls you have in the Control Panel for pulling from other fields will be all you need. But the ability is there if you need it. - -For example, the following will output the contents of the **description** field from the current **Entry**: - -```twig -{entry.description} -``` - -Normal Twig double bracket syntax is supported too: - -```twig -{{ entry.description }} -``` -The single bracket syntax is just a shortcut, and provided for backwards compatibility with previous versions of SEOmatic. - -The same applies to any SEOmatic global variables (discussed below): - -```twig -{seomatic.meta.seoTitle} -``` -Is the same as: - -```twig -{{ seomatic.meta.seoTitle }} -``` - -You can even do complex expressions, such as the following which outputs the first field that isn’t empty, or a default text: - -```twig -{{ entry.description ??? entry.summary ??? "Some default text" }} -``` - -The above uses the `???` empty coalesce operator that comes with SEOmatic; check out [SEOmatic’s ??? Empty Coalesce operator](#seomatics--empty-coalesce-operator) for details. - -## Site Settings - -### Identity - -![Screenshot](./resources/screenshots/seomatic-site-identity.png) - -These Site Identity settings are used to globally define the identity and ownership of the site. - -They are used in combination with the SEO Template Meta settings to generate [JSON-LD](https://developers.google.com/schemas/formats/json-ld?hl=en) microdata. - -The Site Owner type determines the JSON-LD schema that will be used to identity the site to search engines. - -Leave any fields blank that aren’t applicable or which you do not want as part of the SEO schema. - -### Creator - -![Screenshot](./resources/screenshots/seomatic-site-creator.png) - -These Site Creator settings are used to globally define the _creator_ (such as the agency or freelancer) of the site. - -They are used in combination with the SEO Template Meta settings to generate [JSON-LD](https://developers.google.com/schemas/formats/json-ld?hl=en) microdata as well as the `humans.txt` file. - -The Site Creator type determines the JSON-LD schema that will be used to identity the site to search engines. - -Leave any fields blank that aren’t applicable or which you do not want as part of the SEO schema. - -### Social Media - -![Screenshot](./resources/screenshots/seomatic-site-social.png) - -The social media settings connect your site to its other points of pressence on the internet. They also facilitate attaching your branding to social media posts via Twitter Cards and Facebook OpenGraph. - -### Sitemap - -![Screenshot](./resources/screenshots/seomatic-site-sitemap.png) - -SEOmatic will automatically create a sitemap for each of your sections, but if you have additional sitemaps or individual URLs that are outside of the CMS that you want to include, you can add them here. - -### Miscellaneous - -![Screenshot](./resources/screenshots/seomatic-site-misc.png) - -Miscellaneous site-wide SEO settings. - -## Tracking Scripts - -None of the Tracking Scripts are included on the page unless the SEOmatic environment is set to `live` production. If `devMode` is enabled, the SEOmatic environment is automatically set to `local` development. - -### Google Analytics - -![Screenshot](./resources/screenshots/seomatic-tracking-ga.png) - -Google Analytics gives you the digital analytics tools you need to analyze data from all touchpoints in one place, for a deeper understanding of the customer experience. You can then share the insights that matter with your whole organization. [Learn More](https://www.google.com/analytics/analytics/#?modal_active=none) - -To include the Google Analytics script despite `devMode` being enabled, you can do: - -```twig -{% do seomatic.script.get('googleAnalytics').include(true) %} -``` - -### Google `gtag.js` - -![Screenshot](./resources/screenshots/seomatic-tracking-gtag.png) - -The global site tag (gtag.js) is a JavaScript tagging framework and API that allows you to send event data to AdWords, DoubleClick, and Google Analytics. Instead of having to manage multiple tags for different products, you can use gtag.js and more easily benefit from the latest tracking features and integrations as they become available. [Learn More](https://developers.google.com/gtagjs/) - -To include the gtag script despite `devMode` being enabled, you can do: - -```twig -{% do seomatic.script.get('gtag').include(true) %} -``` - -### Google Tag Manager - -![Screenshot](./resources/screenshots/seomatic-tracking-gtm.png) - -Google Tag Manager is a tag management system that allows you to quickly and easily update tags and code snippets on your site. Once the Tag Manager snippet has been added to your site or mobile app, you can configure tags via a web-based user interface without having to alter and deploy additional code. [Learn More](https://support.google.com/tagmanager/answer/6102821?hl=en) - -You can set the `dataLayer` passed in to Google Tag Manager via Twig: - -```twig -{% do seomatic.script.get('googleTagManager').dataLayer({ - 'woof': 'bark' -}) %} -``` - -To include the Google Tag Manager script despite `devMode` being enabled, you can do: - -```twig -{% do seomatic.script.get('googleTagManager').include(true) %} -``` - -### Facebook Pixel - -![Screenshot](./resources/screenshots/seomatic-tracking-fb.png) - -The Facebook pixel is an analytics tool that helps you measure the effectiveness of your advertising. You can use the Facebook pixel to understand the actions people are taking on your site and reach audiences you care about. [Learn More](https://www.facebook.com/business/help/651294705016616) - -To include the Facebook Pixel script despite `devMode` being enabled, you can do: - -```twig -{% do seomatic.script.get('facebookPixel').include(true) %} -``` - -### LinkedIn Insight - -![Screenshot](./resources/screenshots/seomatic-tracking-li.png) - -The LinkedIn Insight Tag is a lightweight JavaScript tag that powers conversion tracking, retargeting, and web analytics for LinkedIn ad campaigns. - -To include the LinkedIn Insight script despite `devMode` being enabled, you can do: - -```twig -{% do seomatic.script.get('linkedInInsight').include(true) %} -``` - -### HubSpot - -![Screenshot](./resources/screenshots/seomatic-tracking-hs.png) - -If you’re not hosting your entire site on HubSpot, or have pages on your site that are not hosted on HubSpot, you’ll need to install the HubSpot tracking code on your non-HubSpot pages to capture those analytics. - -To include the HubSpot script despite `devMode` being enabled, you can do: - -```twig -{% do seomatic.script.get('hubSpot').include(true) %} -``` - -## Plugin Settings - -![Screenshot](./resources/screenshots/seomatic-plugin-settings.png) - -The Plugin Settings lets you control various SEOmatic settings globally (across all sites/languages). - -### General Plugin Settings - -* **Plugin name** - This is the name that will be used for the plugin everywhere it is referenced in the Control Panel GUI -* **Automatic Render Enabled** - Controls whether SEOmatic will automatically render metadata on your pages. If you turn this off, you will need to manually render the metadata via `seomatic.tag.render()`, `seomatic.link.render()`, etc. You can selectively disable rendering via Twig with `{% do seomatic.config.renderEnabled(false)` %} -* **Sitemaps Enabled** - Controls whether SEOmatic will automatically render frontend sitemaps for your site. -* **Regenerate Sitemaps Automatically** - Controls whether sitemaps will automatically be regenerated when entries are saved. -* **Submit Sitemap Changes** - Should sitemaps be submitted to search engines automatically whenever there are changes? -* **Include Homepage in Breadcrumbs** - Should the homepage be included in the generated Breadcrumbs JSON-LD? -* **Manually Set SEOmatic Environment** - If off, SEOmatic will automatically attempt to determine the current environment. Turn this on to manually set the environment. -* **Environment** - The server environment, either `live`, `staging`, or `local`. If `devMode` is on, SEOmatic will override this setting to local Development. This setting controls whether certain things render; for instance only in the `live` production environment will Google Analytics and other tracking tags send analytics data. SEOmatic also automatically sets the `robots` tag to `none` for everything but the `live` production environment. - -### Appearance Plugin Settings - -* **Display Sidebar SEO Preview** - Controls whether to display the Google, Twitter, and Facebook social media previews in the sidebar on entry. Category, and product pages. -* **Add Social Media Preview Target** - Controls whether to add the Google, Twitter, Facebook, etc. social media previews as a Preview Target. -* **SEO Preview Sites** - The social media platforms that should be displayed in the SEO Preview - -### Title Plugin Settings - -* **devMode `` prefix** - If devMode is on, prefix the `<title>` with this string -* **Control Panel `<title>` prefix** - Prefix the Control Panel `<title>` with this string -* **devMode Control Panel `<title>` prefix** - If devMode is on, prefix the Control Panel `<title>` with this string -* **Separator Character** - The separator character to use for the `<title>` tag -* **Max SEO Title Length** - The max number of characters in the `<title>` tag; anything beyond this will be truncated on word boundaries -* **Max SEO Description Length** - The max number of characters in the `meta description` tag -* **Truncate Title Tags** - Should Title tags be truncated at the max length, on word boundaries? -* **Truncate Description Tags** - Should Description tags be truncated at the max length, on word boundaries? - -### Tags Plugin Settings - -* **Add `hreflang` Tags** - Controls whether SEOmatic will automatically add `hreflang` and `og:locale:alternate` tags. -* **Include `x-default` hreflang Tag** - Controls whether SEOmatic will automatically include an x-default hreflang tag -* **Include Paginated `hreflang` Tags** - Controls whether SEOmatic will automatically include hreflang tags on paginated pages -* **Generator Enabled** - Controls whether SEOmatic will include the meta `generator` tag and `X-Powered-By` header -* **HTTP Headers Enabled** - Controls whether SEOmatic will automatically add `X-Robots-Tag`, `canonical`, & `Referrer-Policy` to the http response headers. -* **Nonces for `<script>` tags** - Whether SEOmatic should automatically add script-src [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src) (CSP) nonces to `<script>` tags (including JSON-LD) -* **Fixed `script-src` Content Security Policies** - Fixed [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src) (CSP) script-src policies that should be added before the Nonces - -### Endpoints Plugin Settings - -* **Meta Container Endpoint Access** - Whether anonymous access to the Meta Container endpoint should be allowed -* **JSON-LD Endpoint Access** - Whether anonymous access to the JSON-LD endpoint should be allowed - -### Advanced Plugin Settings - -* **Site Groups define logically separate sites** - If you are using Site Groups to logically separate 'sister sites’, turn this on. -* **Lowercase Canonical URL** - Should the Canonical URL be automatically lower-cased? -* **Site URL Override** - SEOmatic uses the Craft siteUrl to generate the external URLs. If you are using it in a non-standard environment, such as a headless GraphQL or ElementAPI server, you can override what it uses for the `siteUrl`. -* **Meta Cache Duration** - The duration of the SEOmatic meta cache. The default Unlimited setting is typically desired, as SEOmatic will break the cache as needed. If devMode is on, caches last 30 seconds. - -## Multi-Environment Config Settings - -SEOmatic does different things depending on the SEOmatic environment it is running in. This is a separate setting from your Craft environment, because you can name those anything you like. - -SEOmatic needs some way to map what you call your local, staging, and production environments to a normalized representation. - -In `local` dev and `staging` environments, the following things change: - -1. `<meta name="robots">` tags are rendered with `none` to prevent Google from indexing the pages -2. The `robots.txt` page is rendered to disallow all indexing -3. No scripts are loaded on the page, to prevent errant data being sent to endpoints -4. Because the `<meta name="robots">` tag is set to `none`, the `<link rel="canonical">` is not rendered - -You can override all of these things as you see fit, but they are automatically changed in this manner to help protect you from having pages indexed or sending data from environments where you should not. - -If you’re using a multi-environment config, you can map your environment settings using SEOmatic’s `config.php` something like this: - -```php -<?php -return [ - // The public-facing name of the plugin - 'pluginName' => 'SEOmatic', - - // Should SEOmatic render metadata? - 'renderEnabled' => true, - - // Should SEOmatic render frontend sitemaps? - 'sitemapsEnabled' => true, - - // Should sitemaps be regenerated automatically? - 'regenerateSitemapsAutomatically' => true, - - // Should sitemaps be submitted to search engines automatically whenever there are changes? - 'submitSitemaps' => true, - - // Should SEOmatic add to the http response headers? - 'headersEnabled' => true, - - // The server environment, either `live`, `staging`, or `local` - 'environment' => 'live', - - // Should SEOmatic display the SEO Preview sidebar? - 'displayPreviewSidebar' => true, - - // Should SEOmatic add a Social Media Preview Target? - 'socialMediaPreviewTarget' => true, - - // The social media platforms that should be displayed in the SEO Preview sidebar - 'sidebarDisplayPreviewTypes' => [ - 'google', - 'twitter', - 'facebook' - ], - - // Should SEOmatic display the SEO Analysis sidebar? - 'displayAnalysisSidebar' => true, - - // If `devMode` is on, prefix the <title> with this string - 'devModeTitlePrefix' => '🚧 ', - - // Prefix the Control Panel <title> with this string - 'cpTitlePrefix' => '⚙ ', - - // If `devMode` is on, prefix the Control Panel <title> with this string - 'devModeCpTitlePrefix' => '🚧⚙ ', - - // The separator character to use for the `<title>` tag - 'separatorChar' => '|', - - // The max number of characters in the `<title>` tag - 'maxTitleLength' => 70, - - // The max number of characters in the `<meta name="description">` tag - 'maxDescriptionLength' => 155, - - // Site Groups define logically separate sites - 'siteGroupsSeparate' => true, - - // Whether to dynamically include the hreflang tags - 'addHrefLang' => true, - - // Whether to dynamically include the `x-default` hreflang tags - 'addXDefaultHrefLang' => true, - - // Whether to dynamically include hreflang tags on paginated pages - 'addPaginatedHreflang' => true, - - // Should the Canonical URL be automatically lower-cased? - 'lowercaseCanonicalUrl' => true, - - // Should the meta generator tag and X-Powered-By header be included? - 'generatorEnabled' => true, - - // SEOmatic uses the Craft `siteUrl` to generate the external URLs. If you - // are using it in a non-standard environment, such as a headless GraphQL or - // ElementAPI server, you can override what it uses for the `siteUrl` below. - 'siteUrlOverride' => '', - - // The duration of the SEOmatic meta cache in seconds. Null means always cached until explicitly broken - // If devMode is on, caches last 30 seconds. - 'metaCacheDuration' => null, - - // Determines whether the meta container endpoint should be enabled for anonymous frontend access - 'enableMetaContainerEndpoint' => false, - - // Determines whether the JSON-LD endpoint should be enabled for anonymous frontend access - 'enableJsonLdEndpoint' => false, - - // SeoElementInterface[] The default SeoElement type classes - 'defaultSeoElementTypes' => [ - ], -]; -``` -Just copy the `config.php` to your Craft `config/` directory as `seomatic.php` and you can configure the settings in a multi-environment friendly way. See the [Craft Environments](https://docs.craftcms.com/v3/config/environments.html#config-files) page for details, and **N.B.:** - -> The `'*'` key is required here so Craft knows to treat it as a multi-environment key, but the other keys are up to you - -This is how you can make your multi-environment nomenclature to SEOmatic’s. This works exactly like Craft’s [multi-environment config](https://docs.craftcms.com/v3/configuration.html#application-config) files such as `general.php` and `db.php`. See SEOmatic’s `config.php` for details. - -## Access Permissions - -![Screenshot](./resources/screenshots/seomatic-permissions.png) - -SEOmatic allows you to restrict access to various parts of the plugin based on User Group Permissions: - -* Dashboard -* Edit Global Meta - * General - * Twitter - * Facebook - * Robots - * Humans - * Ads -* Edit Content SEO - * General - * Twitter - * Facebook - * Sitemap -* Edit Site Settings - * Identity - * Creator - * Social Media - * Miscellaneous -* Edit Tracking Scripts - * Google Analytics - * Google gtag.js - * Google Tag Manager - * Facebook Pixel -* Edit Plugin Settings - -Brought to you by [nystudio107](https://nystudio107.com/) diff --git a/docs/docs/configuring/access-permissions.md b/docs/docs/configuring/access-permissions.md new file mode 100644 index 000000000..7155860c4 --- /dev/null +++ b/docs/docs/configuring/access-permissions.md @@ -0,0 +1,30 @@ +# Access Permissions + +SEOmatic allows you to restrict access to various parts of the plugin based on User Group Permissions: + +![Screenshot of the SEOmatic section of Craft’s User Group permissions, which includes the items detailed below](../resources/screenshots/seomatic-permissions.png) + +* Dashboard +* Edit Global Meta + * General + * Twitter + * Facebook + * Robots + * Humans + * Ads +* Edit Content SEO + * General + * Twitter + * Facebook + * Sitemap +* Edit Site Settings + * Identity + * Creator + * Social Media + * Miscellaneous +* Edit Tracking Scripts + * Google Analytics + * Google gtag.js + * Google Tag Manager + * Facebook Pixel +* Edit Plugin Settings diff --git a/docs/docs/configuring/content-seo.md b/docs/docs/configuring/content-seo.md new file mode 100644 index 000000000..91f6c5b94 --- /dev/null +++ b/docs/docs/configuring/content-seo.md @@ -0,0 +1,135 @@ +# Content SEO + +Content SEO is where you can configure each Section, Category Group and Commerce Product Type that has public URLs. + +A list of these content types includes status indicators identifying what’s been configured for each one: + +![Screenshot of SEOmatic’s Content SEO settings landing, which lists each of the site’s content sections in a table by name, with additional columns for entry count, section type, title indicator, description indicator, image indicator, sitemap indicator, and robots setting](../resources/screenshots/seomatic-content.png) + +SEOmatic allows you to have different Content SEO settings on both a per-site and per-[Entry Type](https://craftcms.com/docs/3.x/entries.html#entry-types) basis. + +Click the name of any listed item to edit its settings. + +::: tip Settings are unique for each type! +Unlike the previous [Global SEO](./global-seo.md) section, the settings below each correspond with a specific Content SEO section or entry type you’ve chosen. +::: + +## General Settings + +![Screenshot of SEOmatic’s General Content SEO settings for a Blog section, with an SEO preview and fields for Main Entity of Page, SEO Title Source, and Site Name Position Source](../resources/screenshots/seomatic-content-general.png) + +This is where you can set up the fields from which SEOmatic extracts the **SEO Title**, **SEO Description**, and **SEO Image**. These per-section Content SEO settings, when they have values, will override the Global SEO general settings. + +## Twitter Settings + +![Screenshot of SEOmatic’s Twitter Content SEO settings for a Blog section, with an SEO preview and fields for Twitter Card Type and Twitter Creator Source](../resources/screenshots/seomatic-content-twitter.png) + +By default, Twitter settings will mirror what you set in the **General** section, but you can customize them to your heart’s content. + +## Facebook Settings + +![Screenshot of SEOmatic’s Facebook Content SEO settings for a Blog section, with an SEO preview and fields for Facebook Open Graph Type and Facebook Open Graph Title Source](../resources/screenshots/seomatic-content-facebook.png) + +Facebook settings will also mirror what you set in the **General** section, but you can customize them here. + +## Sitemap Settings + +![Screenshot of SEOmatic’s Sitemap Content SEO settings for a Blog section, with an enabled lightswitch, lightswitches for including images and videos, including indexable files, and alternate translation URLs; more fields for Change Frequency and Priority](../resources/screenshots/seomatic-content-sitemap.png) + +SEOmatic automatically creates a sitemap index for each of your Site Groups. This sitemap index points to individual sitemaps for each of your Sections, Category Groups, and Commerce Product Types. + +Instead of one massive sitemap that must be updated any time anything changes, only the sitemap for the Section, Category Group, or Commerce Product Type will be updated when something changes in it. + +SEOmatic can automatically include files such as `.pdf`, `.xls`, `.doc` and other indexable file types in Asset fields or Asset fields in matrix or Neo blocks. + +In addition, SEOmatic can automatically create [Image sitemaps](https://support.google.com/webmasters/answer/178636?hl=en) and [Video sitemaps](https://developers.google.com/webmasters/videosearch/sitemaps) from images & videos in Asset fields or Asset fields in matrix or Neo blocks. + +Sitemap Indexes are automatically submitted to search engines whenever a new Section, Category Group, or Commerce Product Type is added. + +Section Sitemaps are automatically submitted to search engines whenever a new Element in that Section, Category Group, or Commerce Product Type is added. + +### Sitemap Generation + +Because XML sitemaps can be time-intensive to generate with a growing number of entries, SEOmatic creates your sitemaps via a queue job and caches the result. The cache is automatically broken whenever something in that sitemap is changed, and a new queue job is created to regenerate it. + +If `runQueueAutomatically` is set to `false` in [General Config Settings](https://craftcms.com/docs/3.x/config/config-settings.html#runqueueautomatically) the Queue job to create the sitemap will not be run during the http request for the sitemap. You’ll need to run it manually via whatever means you use to run the Queue. + +Normally SEOmatic will regenerate the sitemap for a Section, Category Group, or Product any time you save an element. However, if you are importing a large number of elements, or prefer to regenerate the sitemap manually you can set disable the **Regenerate Sitemaps Automatically** option in SEOmatic’s Plugin Settings. + +![Screenshot of a console running the following command to generate a blog sitemap: `./craft seomatic/sitemap/generate --siteId=1 --handle=blog`](../resources/screenshots/seomatic-sitemap-console-command.png) + +You can then regenerate the sitemap via CLI. This will regenerate all sitemaps: + +```bash +./craft seomatic/sitemap/generate +``` + +You can also limit it to a specific Section, Category Group, or Product handle: + +```bash +./craft seomatic/sitemap/generate --handle=blog +``` + +...or you can regenerate all sitemaps for a specific `siteId`: + +```bash +./craft seomatic/sitemap/generate --siteId=1 +``` + +...or both: + +```bash +./craft seomatic/sitemap/generate --handle=blog --siteId=1 +``` + +::: tip Manually Updating Sitemaps +If you disable **Regenerate Sitemaps Automatically**, sitemaps can _only_ be updated via CLI command, or by clearing SEOmatic’s sitemap caches via **Utilities** → **Clear Caches**. +::: + +### Additional Sitemaps + +If you have custom sitemaps that are not in the CMS, you can manually add them to their own Sitemap Index via **Site Settings** → **Sitemap**. + +You can also add to it via plugin: + +```php +use nystudio107\seomatic\events\RegisterSitemapsEvent; +use nystudio107\seomatic\models\SitemapIndexTemplate; +use yii\base\Event; + +Event::on( + SitemapIndexTemplate::class, + SitemapIndexTemplate::EVENT_REGISTER_SITEMAPS, + function(RegisterSitemapsEvent $event) { + $event->sitemaps[] = [ + 'loc' => $url, + 'lastmod' => $lastMod, + ]; + } +); +``` + +### Additional Sitemap URLs + +If you have custom URLs that are not in the CMS, you can manually add them to their own Sitemap Index via **Site Settings** → **Sitemap**. + +You can also add to it via a plugin: + +```php +use nystudio107\seomatic\events\RegisterSitemapUrlsEvent; +use nystudio107\seomatic\models\SitemapCustomTemplate; +use yii\base\Event; + +Event::on( + SitemapCustomTemplate::class, + SitemapCustomTemplate::EVENT_REGISTER_SITEMAP_URLS, + function(RegisterSitemapUrlsEvent $event) { + $event->sitemaps[] = [ + 'loc' => $url, + 'changefreq' => $changeFreq, + 'priority' => $priority, + 'lastmod' => $lastMod, + ]; + } +); +``` diff --git a/docs/docs/configuring/dashboard.md b/docs/docs/configuring/dashboard.md new file mode 100644 index 000000000..c515ff23a --- /dev/null +++ b/docs/docs/configuring/dashboard.md @@ -0,0 +1,7 @@ +# Dashboard + +The Dashboard gives you a progress overview for how fully set up your settings are for SEOmatic’s Global SEO, Content SEO, and Site Settings. + +![Screenshot the SEOmatic Dashboard, with ring completion charts for Global SEO, Content SEO, and Site Settings](../resources/screenshots/seomatic-dashboard.png) + +Click on any of the graphs to explore the relevant settings in more detail. diff --git a/docs/docs/configuring/global-seo.md b/docs/docs/configuring/global-seo.md new file mode 100644 index 000000000..f92b0951b --- /dev/null +++ b/docs/docs/configuring/global-seo.md @@ -0,0 +1,70 @@ +# Global SEO + +Global SEO is where you set default site-wide settings, on a per-site basis. + +The **Copy Settings From:** dropdown lets you copy settings from one site to another. + +## General Settings + +![Screenshot of SEOmatic’s General settings in the Global SEO section, with an SEO Preview and fields for Main Entity of Page, SEO Title Source, and Site Name Position](../resources/screenshots/seomatic-global-general.png) + +Because meta information should reflect your content, you’ll want designate the fields that SEOmatic extracts the **SEO Title**, **SEO Description**, and **SEO Image** from. + +## Twitter Settings + +![Screenshot of SEOmatic’s Twitter settings in the Global SEO section, with an SEO Preview and fields for Twitter Card Type, Twitter Creator Source, and Twitter Title Source](../resources/screenshots/seomatic-global-twitter.png) + +By default, the Twitter settings will mirror what you set in the [General section](#general-settings), but you can customize them to your heart’s content. + +## Facebook Settings + +![Screenshot of SEOmatic’s Facebook settings in the Global SEO section, with an SEO Preview and fields for Facebook Open Graph Type and Facebook Open Graph Title Source](../resources/screenshots/seomatic-global-facebook.png) + +Like the Twitter settings, Facebook settings will also mirror whatever you’ve set in the [General section](#general-settings), but you can further customize them here. + +## Robots Settings + +![Screenshot of SEOmatic’s Robots settings in the Global SEO section, with a “View robots.txt” button, a lightswitch for whether it should be rendered, and a code field for editing its template](../resources/screenshots/seomatic-global-robots.png) + +A `robots.txt` file at the root of your site tells search engine crawlers what they’re allowed to access. + +The file uses the [Robots Exclusion Standard](http://www.robotstxt.org/robotstxt.html), which is a protocol with a small set of commands that can be used to indicate access to your site by section and by specific kinds of web crawlers (such as mobile crawlers vs desktop crawlers). + +You shouldn’t need to edit the default **Robots.txt Template** setting, but you can if you like. Click **View robots.txt** to see how `robots.txt` is rendered by the template. + +### Troubleshooting + +Two things could prevent SEOmatic from automatically handling `/robots.txt` requests: + +1. An actual `robots.txt` file in your `web/` folder, which will take precedence. +2. An nginx directive that prevents Craft CMS from handling the `robots.txt` URL. + +If you’re running nginx, make sure that you _don’t_ have a line like this in your config file: + +```nginx +location = /robots.txt { access_log off; log_not_found off; } +``` + +A directive like this will prevent SEOmatic from being able to service the request for `/robots.txt`. If you do have a line like this in your config file, comment it out and restart nginx by running `sudo nginx -s reload`. + +### Humans Settings + +![Screenshot of SEOmatic’s Humans settings in the Global SEO section, with a “View humans.txt” button, a lightswitch for whether it should be rendered, and a code field for editing its template](../resources/screenshots/seomatic-global-humans.png) + +[Humans.txt](http://humanstxt.org/) is an initiative for including a text file identifying a site’s creators. By adding a text file, you can prove your authorship (not your property) in an external, fast, easy and accessible way. + +Edit the default **Humans.txt Template** to your heart’s content. Click **View humans.txt** to view the rendered `humans.txt` output. + +## Ads Settings + +![Screenshot of SEOmatic’s Ads settings in the Global SEO section, with a “View ads.txt” button, a lightswitch for whether it should be rendered, and a code field for editing its template](../resources/screenshots/seomatic-global-ads.png) + +The [ads.txt](https://iabtechlab.com/ads-txt/) project aims to increase transparency in the programmatic advertising ecosystem. “Ads.txt” stands for Authorized Digital Sellers and is a simple, flexible and secure method that publishers and distributors can use to publicly declare the companies they authorize to sell their digital inventory. + +Edit the **Ads.txt Template** as needed and click **View ads.txt** to view the rendered output. + +## Security Settings + +The [security.txt](https://securitytxt.org/) defines a standard to help organizations define the process for security researchers to disclose security vulnerabilities securely. + +Edit the default **Security.txt Template** as needed and click **View security.txt** to view the rendered `security.txt` output. diff --git a/docs/docs/configuring/index.md b/docs/docs/configuring/index.md new file mode 100644 index 000000000..7b8407995 --- /dev/null +++ b/docs/docs/configuring/index.md @@ -0,0 +1,67 @@ +--- +title: Configuring SEOmatic +description: Configuring SEOmatic documentation for the SEOmatic plugin. The SEOmatic plugin facilitates modern SEO best practices & implementation for Craft CMS 3. +--- +# Configuring SEOmatic + +SEOmatic gets working as soon as you install it, but it needs to be configured for your site to be truly useful. + +This section covers [what SEOmatic does automatically](#automatic-behavior) and common [text field features](#control-panel-settings-fields), then walks through each of the SEOmatic settings sections. + +## Automatic Behavior + +As soon as you install SEOmatic, it automatically will render metadata on your web pages, and create sitemaps for all of your Sections, Category Groups, and Commerce Product Types that have public URLs. You don’t need to add any template code for this to happen. + +![Screenshot of Content SEO Twitter settings for a Blog section, with an open site menu displaying options for “Affiliate”, “English”, and “Spanish” sites](../resources/screenshots/seomatic-multi-site.png) + +All of SEOmatic’s settings are multi-site aware, allowing you to have different settings for each site/language combination. + +::: tip Check Your Multi-Environment Settings +Make sure you’ve set up your [Multi-Environment Config Settings](./multi-environment.md) properly if you’re using SEOmatic in multiple environments. +::: + +## Control Panel Settings Fields + +While you may not normally need to take advantage of it, SEOmatic’s text input fields for the [Global SEO](./global-seo.md) and [Content SEO](./content-seo.md) settings have bonus perks: + +- They’re parsed as Twig object templates, so you can use single- and double-bracket Twig expressions in them along with plain old text. +- They’re parsed for aliases and [environment variables](https://craftcms.com/docs/3.x/config/#control-panel-settings). +- They have access to SEOmatic’s global variables. + +#### Examples + +This outputs the contents of the **companyInfo** field from the **siteInfo** global: + +```twig +{{ siteInfo.companyInfo }} +``` + +This outputs the contents of the **description** field from the current entry, which would be relevant to a [Content SEO](./content-seo.md) setting: + +```twig +{{ entry.description }} +``` + +This complex expression uses SEOmatic’s [empty coalesce operator](../using/empty-coalesce-operator.md) (`???`) to output the first global field that isn’t empty, or fallback text: + +```twig +{{ siteInfo.companyInfo ??? siteInfo.companyText ??? "Some default text" }} +``` + +You could do the exact same thing with the `entry` variable when that’s available: + +```twig +{{ entry.description ??? entry.summary ??? "Some default text" }} +``` + +You can access SEOmatic global variables using Twig’s usual double-bracket syntax: + +```twig +{{ seomatic.meta.seoTitle }} +``` + +Single-bracket syntax is available for compatibility with previous SEOmatic versions: + +```twig +{seomatic.meta.seoTitle} +``` diff --git a/docs/docs/configuring/multi-environment.md b/docs/docs/configuring/multi-environment.md new file mode 100644 index 000000000..923dce2a0 --- /dev/null +++ b/docs/docs/configuring/multi-environment.md @@ -0,0 +1,119 @@ +# Multi-Environment Config Settings + +SEOmatic does different things depending on the SEOmatic environment it is running in. This is a separate setting from your Craft environment, because you can name those anything you like. + +SEOmatic needs some way to map what you call your local, staging, and production environments to a normalized representation. + +In `local` dev and `staging` environments, the following things change: + +1. `<meta name="robots">` tags are rendered with `none` to prevent Google indexing. +2. The `robots.txt` page is rendered to disallow all indexing. +3. No scripts are loaded on the page, to prevent errant data being sent to endpoints. +4. Because the `<meta name="robots">` tag is set to `none`, the `<link rel="canonical">` is not rendered. + +You can override all of these things as you see fit, but they are automatically changed in this manner to help protect you from having pages indexed or sending data from environments where you should not. + +If you’re using a multi-environment config, you can map your environment settings using SEOmatic’s `config.php` something like this: + +```php +<?php +return [ + // The public-facing name of the plugin + 'pluginName' => 'SEOmatic', + + // Should SEOmatic render metadata? + 'renderEnabled' => true, + + // Should SEOmatic render frontend sitemaps? + 'sitemapsEnabled' => true, + + // Should sitemaps be regenerated automatically? + 'regenerateSitemapsAutomatically' => true, + + // Should sitemaps be submitted to search engines automatically whenever there are changes? + 'submitSitemaps' => true, + + // Should SEOmatic add to the http response headers? + 'headersEnabled' => true, + + // The server environment, either `live`, `staging`, or `local` + 'environment' => 'live', + + // Should SEOmatic display the SEO Preview sidebar? + 'displayPreviewSidebar' => true, + + // Should SEOmatic add a Social Media Preview Target? + 'socialMediaPreviewTarget' => true, + + // The social media platforms that should be displayed in the SEO Preview sidebar + 'sidebarDisplayPreviewTypes' => [ + 'google', + 'twitter', + 'facebook' + ], + + // Should SEOmatic display the SEO Analysis sidebar? + 'displayAnalysisSidebar' => true, + + // If `devMode` is on, prefix the <title> with this string + 'devModeTitlePrefix' => '🚧 ', + + // Prefix the control panel <title> with this string + 'cpTitlePrefix' => '⚙ ', + + // If `devMode` is on, prefix the control panel <title> with this string + 'devModeCpTitlePrefix' => '🚧⚙ ', + + // The separator character to use for the `<title>` tag + 'separatorChar' => '|', + + // The max number of characters in the `<title>` tag + 'maxTitleLength' => 70, + + // The max number of characters in the `<meta name="description">` tag + 'maxDescriptionLength' => 155, + + // Site Groups define logically separate sites + 'siteGroupsSeparate' => true, + + // Whether to dynamically include the hreflang tags + 'addHrefLang' => true, + + // Whether to dynamically include the `x-default` hreflang tags + 'addXDefaultHrefLang' => true, + + // Whether to dynamically include hreflang tags on paginated pages + 'addPaginatedHreflang' => true, + + // Should the Canonical URL be automatically lower-cased? + 'lowercaseCanonicalUrl' => true, + + // Should the meta generator tag and X-Powered-By header be included? + 'generatorEnabled' => true, + + // SEOmatic uses the Craft `siteUrl` to generate the external URLs. If you + // are using it in a non-standard environment, such as a headless GraphQL or + // ElementAPI server, you can override what it uses for the `siteUrl` below. + 'siteUrlOverride' => '', + + // The duration of the SEOmatic meta cache in seconds. Null means always cached until explicitly broken + // If devMode is on, caches last 30 seconds. + 'metaCacheDuration' => null, + + // Determines whether the meta container endpoint should be enabled for anonymous front end access + 'enableMetaContainerEndpoint' => false, + + // Determines whether the JSON-LD endpoint should be enabled for anonymous front end access + 'enableJsonLdEndpoint' => false, + + // SeoElementInterface[] The default SeoElement type classes + 'defaultSeoElementTypes' => [ + ], +]; +``` + +Copy the `config.php` to your Craft `config/` directory as `seomatic.php` and you can configure the settings in a multi-environment friendly way. See the [Craft Environments](https://craftcms.com/docs/3.x/config/#config-files) page for details, and **N.B.:** + +> The `'*'` key is required here so Craft knows to treat it as a multi-environment key, but the other keys are up to you + +This is how you can make your multi-environment nomenclature to SEOmatic’s. This works exactly like Craft’s [multi-environment config](https://craftcms.com/docs/3.x/config/#multi-environment-configs) files such as `general.php` and `db.php`. See [SEOmatic’s `config.php`](https://github.com/nystudio107/craft-seomatic/blob/develop/src/config.php) for details. diff --git a/docs/docs/configuring/plugin-settings.md b/docs/docs/configuring/plugin-settings.md new file mode 100644 index 000000000..da99c394c --- /dev/null +++ b/docs/docs/configuring/plugin-settings.md @@ -0,0 +1,58 @@ +# Plugin Settings + +Plugin Settings let you control various SEOmatic settings across all sites/languages. + +![Screenshot of the SEOmatic plugin settings in the Craft control panel, with tabs for General, Appearance, Titles, Tags, Endpoints, and Advanced](../resources/screenshots/seomatic-plugin-settings.png) + +## General Plugin Settings + +* **Plugin name** – The name used for the plugin throughout the control panel. +* **Automatic Render Enabled** – Controls whether SEOmatic automatically renders metadata on your pages. If you turn this off, you will need to manually render the metadata via `seomatic.tag.render()`, `seomatic.link.render()`, etc. Selectively disable rendering via Twig with `{% do seomatic.config.renderEnabled(false) %}`. +* **Sitemaps Enabled** – Controls whether SEOmatic will automatically render front-end sitemaps for your site. +* **Regenerate Sitemaps Automatically** – Controls whether sitemaps will automatically be regenerated when entries are saved. +* **Submit Sitemap Changes** – Should sitemaps be submitted to search engines automatically whenever there are changes? +* **Include Homepage in Breadcrumbs** – Should the homepage be included in the generated Breadcrumbs JSON-LD? +* **Manually Set SEOmatic Environment** – If off, SEOmatic will automatically attempt to determine the current environment. Turn this on to manually set the environment. +* **Environment** – The server environment, either `live`, `staging`, or `local`. If `devMode` is on, SEOmatic will override this setting to local Development. This setting controls whether certain things render; for instance only in the `live` production environment will Google Analytics and other tracking tags send analytics data. SEOmatic also automatically sets the `robots` tag to `none` for everything but the `live` production environment. + +## Appearance Plugin Settings + +* **Display Sidebar SEO Preview** – Controls whether to display the Google, Twitter, and Facebook social media previews in the sidebar on entry. Category, and product pages. +* **Add Social Media Preview Target** – Controls whether to add the Google, Twitter, Facebook, etc. social media previews as a Preview Target. +* **SEO Preview Sites** – Social media platforms that should be displayed in the SEO Preview. + +## Title Plugin Settings + +* **devMode `<title>` prefix** – If devMode is on, prefix the `<title>` with this string. +* **Control Panel `<title>` prefix** – Prefix the control panel `<title>` with this string. +* **devMode Control Panel `<title>` prefix** – If devMode is on, prefix the control panel `<title>` with this string. +* **Separator Character** – The separator character to use for the `<title>` tag. +* **Max SEO Title Length** – The max number of characters in the `<title>` tag; anything beyond this will be truncated on word boundaries. +* **Max SEO Description Length** – The max number of characters in the `meta description` tag. +* **Truncate Title Tags** – Should Title tags be truncated at the max length, on word boundaries? +* **Truncate Description Tags** – Should Description tags be truncated at the max length, on word boundaries? + +## Tags Plugin Settings + +* **Add `hreflang` Tags** – Controls whether SEOmatic will automatically add `hreflang` and `og:locale:alternate` tags. +* **Include `x-default` hreflang Tag** – Controls whether SEOmatic will automatically include an x-default hreflang tag. +* **Include Paginated `hreflang` Tags** – Controls whether SEOmatic will automatically include hreflang tags on paginated pages +* **Generator Enabled** – Controls whether SEOmatic will include the meta `generator` tag and `X-Powered-By` header +* **HTTP Headers Enabled** – Controls whether SEOmatic will automatically add `X-Robots-Tag`, `canonical`, & `Referrer-Policy` to the http response headers. +* **Nonces for `<script>` tags** – Whether SEOmatic should automatically add script-src [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src) (CSP) nonces to `<script>` tags (including JSON-LD). +* **Fixed `script-src` Content Security Policies** – Fixed [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src) (CSP) script-src policies that should be added before the Nonces. + +## Endpoints Plugin Settings + +* **Meta Container Endpoint Access** – Whether anonymous access to the Meta Container endpoint should be allowed. +* **JSON-LD Endpoint Access** – Whether anonymous access to the JSON-LD endpoint should be allowed. + +## Advanced Plugin Settings + +* **Site Groups define logically separate sites** – If you are using Site Groups to logically separate 'sister sites’, turn this on. +* **Always include `canonical` links regardless of environment** - SEO best practices are to have canonical links not appear on pages that are not intended to be indexed. SEOmatic does this for you by default, but you can override that behavior with this setting +* **Lowercase Canonical URL** – Should the Canonical URL be automatically lower-cased? +* **SEOmatic Debug Toolbar Panel** - Determines whether the SEOmatic debug toolbar panel should be added to the Yii2 debug toolbar. +* **Site URL Override** – SEOmatic uses the Craft siteUrl to generate the external URLs. If you are using it in a non-standard environment, such as a headless GraphQL or ElementAPI server, you can override what it uses for the `siteUrl`. +* **Meta Cache Duration** – The duration of the SEOmatic meta cache. The default Unlimited setting is typically desired, as SEOmatic will break the cache as needed. If devMode is on, caches last 30 seconds. + diff --git a/docs/docs/configuring/site-settings.md b/docs/docs/configuring/site-settings.md new file mode 100644 index 000000000..bc1630af7 --- /dev/null +++ b/docs/docs/configuring/site-settings.md @@ -0,0 +1,45 @@ +# Site Settings + +Site Settings are broadly used to identify the site’s creator and establish links for search engines and external services. + +## Identity Settings + +![Screenshot of SEOmatic’s Identity settings in the Site Settings section, with fields visible for Site Name, Site Owner Entity Type, Entity Name, Alternate Entity Name, Entity Description, and Entity URL](../resources/screenshots/seomatic-site-identity.png) + +These settings are used to globally define the identity and ownership of the site. + +They’re combined with the SEO Template Meta settings to generate [JSON-LD](https://developers.google.com/schemas/formats/json-ld?hl=en) microdata. + +The Site Owner type determines the JSON-LD schema that will be used to identity the site to search engines. + +Leave any fields blank that aren’t applicable or which you do not want as part of the SEO schema. + +## Creator Settings + +![Screenshot of SEOmatic’s Creator settings in the Site Settings section, with fields visible for Site Creator Entity Type, Entity Name, Alternate Entity Name, Entity Description, and Entity URL](../resources/screenshots/seomatic-site-creator.png) + +These settings are used to globally define the _creator_ of the site, such as an agency or freelancer. + +They’re combined with the SEO Template Meta settings to generate [JSON-LD](https://developers.google.com/schemas/formats/json-ld?hl=en) microdata and the `humans.txt` file. + +The Site Creator type determines the JSON-LD schema that will be used to identity the site to search engines. + +Leave any fields blank that aren’t applicable or which you do not want as part of the SEO schema. + +## Social Media Settings + +![Screenshot of SEOmatic’s Social Media settings in the Site Settings section, with fields visible for Twitter Handle, Facebook Profile ID, Facebook App ID, Google Site Verification, Bing Site Verification, and Pinterest Site Verification](../resources/screenshots/seomatic-site-social.png) + +The social media settings connect your site to its other points of pressence on the internet. They also facilitate attaching your branding to social media posts via Twitter Cards and Facebook Open Graph. + +## Sitemap Settings + +![Screenshot of SEOmatic’s Sitemap settings in the Site Settings section, with table fields for adding additional sitemaps by URL and last modification date, and sitemap URLs by URL, change frequency, and priority](../resources/screenshots/seomatic-site-sitemap.png) + +SEOmatic will automatically create a sitemap for each of your sections, but if you have additional sitemaps or individual URLs that are outside of the CMS that you want to include, you can add them here. + +## Miscellaneous Settings + +![Screenshot of SEOmatic’s Miscellaneous settings in the Site Settings section, with fields for Search Target URL Pattern and Search Query Input](../resources/screenshots/seomatic-site-misc.png) + +Miscellaneous site-wide SEO settings. diff --git a/docs/docs/configuring/tracking-scripts.md b/docs/docs/configuring/tracking-scripts.md new file mode 100644 index 000000000..8d0f7c48c --- /dev/null +++ b/docs/docs/configuring/tracking-scripts.md @@ -0,0 +1,85 @@ +# Tracking Scripts + +SEOmatic supports setting up common tracking scripts from the control panel. + +These are included on front-end pages when the SEOmatic environment is set to `live` production. If `devMode` is enabled, the SEOmatic environment is automatically set to `local` development. + +## Google Analytics Settings + +![Screenshot of SEOmatic’s Google Analytics settings in the Tracking Scripts section, with an enabled switch and fields visible for Google Analytics Tracking ID, Automatically send Google Analytics PageView, Google Analytics IP Anonymization, Display Features, and Ecommerce](../resources/screenshots/seomatic-tracking-ga.png) + +Google Analytics gives you the digital analytics tools you need to analyze data from all touchpoints in one place, for a deeper understanding of the customer experience. You can then share the insights that matter with your whole organization. [Learn More](https://www.google.com/analytics/analytics/#?modal_active=none) + +If you’d like to include the Google Analytics script even when `devMode` is enabled, you can add this line to a template: + +```twig +{% do seomatic.script.get('googleAnalytics').include(true) %} +``` + +## Google `gtag.js` Settings + +![Screenshot of SEOmatic’s Google gtag.js settings in the Tracking Scripts section, with an enabled switch and fields visible for Google Analytics Tracking ID, AdWords Conversion ID, DoubleClick Floodlight ID, and Automatically send PageView](../resources/screenshots/seomatic-tracking-gtag.png) + +The [global site tag (gtag.js)](https://developers.google.com/gtagjs/) is a JavaScript tagging framework and API that allows you to send event data to AdWords, DoubleClick, and Google Analytics. Instead of having to manage multiple tags for different products, you can use gtag.js and more easily benefit from the latest tracking features and integrations as they become available. + +If you’d like to include the gtag.js script even when `devMode` is enabled, you can add this line to a template: + +```twig +{% do seomatic.script.get('gtag').include(true) %} +``` + +## Google Tag Manager Settings + +![Screenshot of SEOmatic’s Google Tag Manager settings in the Tracking Scripts section, with an enabled switch and fields visible for Google Tag Manager ID, DataLayer Variable Name, Google Tag Manager Script URL, and Google Tag Manager Script <noscript> URL](../resources/screenshots/seomatic-tracking-gtm.png) + +[Google Tag Manager](https://support.google.com/tagmanager/answer/6102821?hl=en) is a tag management system that allows you to quickly and easily update tags and code snippets on your site. Once the Tag Manager snippet has been added to your site or mobile app, you can configure tags via Google’s web-based user interface without having to alter and deploy additional code. + +You can set the `dataLayer` passed in to Google Tag Manager via Twig: + +```twig +{% do seomatic.script.get('googleTagManager').dataLayer({ + 'woof': 'bark' +}) %} +``` + +If you’d like to include the Google Tag Manager script even when `devMode` is enabled, you can add this line to a template: + +```twig +{% do seomatic.script.get('googleTagManager').include(true) %} +``` + +## Facebook Pixel Settings + +![Screenshot of SEOmatic’s Facebook Pixel settings in the Tracking Scripts section, with an enabled switch and fields visible for Facebook Pixel ID, Automatically send Facebook Pixel PageView, Facebook Pixel Script URL, and Facebook Pixel Script <noscript> URL](../resources/screenshots/seomatic-tracking-fb.png) + +The [Facebook Pixel](https://www.facebook.com/business/help/651294705016616) is an analytics tool that helps you measure the effectiveness of your advertising. You can use the Facebook pixel to understand the actions people are taking on your site and reach audiences you care about. + +If you’d like to include the Facebook Pixel script even when `devMode` is enabled, you can add this line to a template: + +```twig +{% do seomatic.script.get('facebookPixel').include(true) %} +``` + +## LinkedIn Insight Settings + +![Screenshot of SEOmatic’s LinkedIn Insight settings in the Tracking Scripts section, with an enabled switch and fields visible for LinkedIn Data Partner ID, LinkedIn Insight Script URL, LinkedIn Insight <noscript> URL, and Script Template](../resources/screenshots/seomatic-tracking-li.png) + +The LinkedIn Insight Tag is a lightweight JavaScript tag that powers conversion tracking, retargeting, and web analytics for LinkedIn ad campaigns. + +If you’d like to include the LinkedIn Insight script even when `devMode` is enabled, you can add this line to a template: + +```twig +{% do seomatic.script.get('linkedInInsight').include(true) %} +``` + +## HubSpot Settings + +![Screenshot of SEOmatic’s HubSpot settings in the Tracking Scripts section, with an enabled switch and fields visible for HubSpot ID, HubSpot Script URL, and Body Script Template](../resources/screenshots/seomatic-tracking-hs.png) + +If you’re not hosting your entire site on HubSpot, or have pages on your site that are not hosted on HubSpot, you’ll need to install the HubSpot tracking code on your non-HubSpot pages to capture those analytics. + +If you’d like to include the HubSpot script even when `devMode` is enabled, you can add this line to a template: + +```twig +{% do seomatic.script.get('hubSpot').include(true) %} +``` diff --git a/docs/docs/fields.md b/docs/docs/fields.md index a262c342a..a6c0c3707 100644 --- a/docs/docs/fields.md +++ b/docs/docs/fields.md @@ -1,50 +1,49 @@ --- -title: SEOmatic Fields +title: SEO Settings Field description: SEOmatic Fields documentation for the SEOmatic plugin. The SEOmatic plugin facilitates modern SEO best practices & implementation for Craft CMS 3. --- -# SEOmatic Fields -## SEO Settings Field +# SEO Settings Field SEOmatic has an SEO Settings Field that you can add to your Field Layouts. For most sites, the Field is not needed; instead set up the fields to pull from in the Content SEO settings for each Section. Modern SEO works best if it actually reflects what is on the page, visible to the user, so pulling from your page’s content will work well in most cases. -### Using SEO Settings Fields +## Using SEO Settings Fields However, in some cases you may want more control over page SEO for specific entries. That’s where the SEO Settings field comes in. Add it to your Section’s Field Layout, and you can override specific SEO settings on a per-entry basis. When a new entry is created with an SEO Settings field in it, the field values will all have the **Override** light switch turned off. -The Field settings let you control exactly what fields will appear and be visible for you or your client to override: +The field settings let you control exactly what fields will appear and be visible for you or your client to override: -![Screenshot](./resources/screenshots/seomatic-field-settings.png) +![Screenshot of settings for the SEO Settings field type](./resources/screenshots/seomatic-field-settings.png) By default, just a few sensible settings are made visible in the Field: -![Screenshot](./resources/screenshots/seomatic-field-defaults.png) +![Screenshot of the SEO Settings field as seen from an entry detail page](./resources/screenshots/seomatic-field-defaults.png) With the **Override** light switch off, the settings will default to the Content SEO and/or Global SEO setting for that field, so you can use the Field only for the exceptional cases. If you turn the **Override** light switch on: -![Screenshot](./resources/screenshots/seomatic-field-defaults-override.png) +![Screenshot of the SEO Settings field as seen from an entry detail page, with the SEO Description Source switch flipped on and a Custom Text selection making an input available for text entry](./resources/screenshots/seomatic-field-defaults-override.png) ...you can override the given setting on a per-entry basis. You can enable every possible field to be displayed in the SEO Settings field if you like: -![Screenshot](./resources/screenshots/seomatic-field-full.png) +![Screenshot of the SEO Settings field as seen from an entry detail page, showing more tabs (General, Twitter, Facebook, Sitemap) and more fields in the selected General tab](./resources/screenshots/seomatic-field-full.png) But it’s probably best to limit it to just the things that you or your client might want to change on a per-entry basis. If you enable an SEO Settings field in an Element Index’s Table Columns, you’ll see an SEO preview there as well: -![Screenshot](./resources/screenshots/seomatic-table-columns-google.png) +![Screenshot of a Craft CMS Entries channel listing, with an SEO Settings column to the right that displays a SERP preview next to each item](./resources/screenshots/seomatic-table-columns-google.png) You can control whether the preview will be from Google, Facebook, or Twitter in the Field Settings. -![Screenshot](./resources/screenshots/seomatic-table-columns-facebook.png) +![Screenshot of a Craft CMS Entries channel listing, with an SEO Settings column to the right displaying a social card preview next to each item](./resources/screenshots/seomatic-table-columns-facebook.png) ### Template Access @@ -54,9 +53,9 @@ To access your SEOmatic field’s data directly in a template, you can do so via {{ entry.mySeoSettingsField.metaGlobalVars.seoTitle }} ``` -All of the variables listed in the [General Variables](./using.html#general-variables) can be accessed in this manner. +All of the variables listed in the [General Variables](./using/index.md#seomatic-variables) can be accessed in this manner. -There may be occasions where you want to output the final parsed value of an SEOmatic variable on the frontend. You can do that via `entry.mySeoSettingsField.metaGlobalVars.parsedValue()`. For example: +There may be occasions where you want to output the final parsed value of an SEOmatic variable on the front end. You can do that via `entry.mySeoSettingsField.metaGlobalVars.parsedValue()`. For example: ```twig {{ entry.mySeoSettingsField.metaGlobalVars.parsedValue('seoDescription') }} @@ -65,5 +64,3 @@ There may be occasions where you want to output the final parsed value of an SEO This will output the final parsed value of the `entry.mySeoSettingsField.metaGlobalVars.seoDescription` variable. This parsing is done automatically by SEOmatic just before the meta information is added to your page. - -Brought to you by [nystudio107](https://nystudio107.com/) diff --git a/docs/docs/google-amp.md b/docs/docs/google-amp.md new file mode 100644 index 000000000..98c019d1f --- /dev/null +++ b/docs/docs/google-amp.md @@ -0,0 +1,53 @@ +# Google AMP Support + +SEOmatic works great with [Google AMP](https://www.ampproject.org/)! In fact, it will provide the [JSON-LD structured data](https://www.ampproject.org/docs/fundamentals/spec) that is _required_ by the AMP spec. + +You do however need to [Make your page discoverable](https://www.ampproject.org/docs/fundamentals/discovery): + +Add the following to the non-AMP template to tell Google where the AMP version of the page is; `yourAmpPageLink` the URL to your AMP page: + +```twig +{% set linkTag = seomatic.link.create({ + "rel": "amphtml", + "href": yourAmpPageLink +}) %} +``` + +And this to the AMP template to tell Google where the canonical HTML page is: + +```twig +{% do seomatic.meta.canonicalUrl(entry.url) %} +``` + +Since AMP [doesn’t allow for third-party JavaScript](https://medium.com/google-developers/how-to-avoid-common-mistakes-when-publishing-accelerated-mobile-pages-9ea61abf530f), you might want to add this to your AMP templates: + +```twig +{% do seomatic.script.container().include(false) %} +``` + +This will cause SEOmatic to not render _any_ custom scripts you might have enabled (such as Google Analytics, gtag, etc.) + +Then you can include Google AMP Analytics as per [Adding Analytics to your AMP pages](https://developers.google.com/analytics/devguides/collection/amp-analytics/) (this assumes you’re using `gtag`): + +```twig +{% set script = seomatic.script.get('gtag') %} +{% set analyticsId = script.vars.googleAnalyticsId.value ??? '' %} + +<amp-analytics type="googleanalytics"> + <script type="application/json"> + { + "vars": { + "account": "{{ analyticsId }}" + }, + "triggers": { + "trackPageview": { + "on": "visible", + "request": "pageview" + } + } + } + </script> +</amp-analytics> +``` + +The above uses the `???` empty coalesce operator that comes with SEOmatic; check out [SEOmatic’s ??? Empty Coalesce operator](./using/empty-coalesce-operator.md) for details. diff --git a/docs/docs/index.md b/docs/docs/index.md index 11be1bce8..c9b994fbc 100644 --- a/docs/docs/index.md +++ b/docs/docs/index.md @@ -2,47 +2,61 @@ title: SEOmatic plugin for Craft CMS 3.x description: Documentation for the SEOmatic plugin. The SEOmatic plugin facilitates modern SEO best practices & implementation for Craft CMS 3. --- -[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/nystudio107/craft-seomatic/badges/quality-score.png?b=v3)](https://scrutinizer-ci.com/g/nystudio107/craft-seomatic/?branch=v3) [![Code Coverage](https://scrutinizer-ci.com/g/nystudio107/craft-seomatic/badges/coverage.png?b=v3)](https://scrutinizer-ci.com/g/nystudio107/craft-seomatic/?branch=v3) [![Build Status](https://scrutinizer-ci.com/g/nystudio107/craft-seomatic/badges/build.png?b=v3)](https://scrutinizer-ci.com/g/nystudio107/craft-seomatic/build-status/v3) -[![Code Intelligence Status](https://scrutinizer-ci.com/g/nystudio107/craft-seomatic/badges/code-intelligence.svg?b=v3)](https://scrutinizer-ci.com/code-intelligence) -# SEOmatic plugin for Craft CMS 3.x +# SEOmatic Plugin for Craft CMS 3.x -SEOmatic facilitates [modern SEO best practices](https://nystudio107.com/blog/modern-seo-snake-oil-vs-substance) & implementation for Craft CMS 3. It is a turnkey SEO system that is comprehensive, powerful, and flexible. +SEOmatic is a comprehensive, powerful, and flexible turnkey SEO system that facilitates [modern SEO best practices](https://nystudio107.com/blog/modern-seo-snake-oil-vs-substance) & implementation for Craft CMS. -![Screenshot](./resources/img/plugin-banner.jpg) +![Plugin banner that reads “Introducing SEOmatic, SEO done right.”](./resources/img/plugin-banner.jpg) -Related: [SEOmatic for Craft 2.x](https://github.com/nystudio107/seomatic). SEOmatic for Craft CMS 3 is a complete rewrite & re-architecture from scratch. +[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/nystudio107/craft-seomatic/badges/quality-score.png?b=v4)](https://scrutinizer-ci.com/g/nystudio107/craft-seomatic/?branch=v4) [![Code Coverage](https://scrutinizer-ci.com/g/nystudio107/craft-seomatic/badges/coverage.png?b=v4)](https://scrutinizer-ci.com/g/nystudio107/craft-seomatic/?branch=v4) [![Build Status](https://scrutinizer-ci.com/g/nystudio107/craft-seomatic/badges/build.png?b=v4)](https://scrutinizer-ci.com/g/nystudio107/craft-seomatic/build-status/v4) [![Code Intelligence Status](https://scrutinizer-ci.com/g/nystudio107/craft-seomatic/badges/code-intelligence.svg?b=v4)](https://scrutinizer-ci.com/code-intelligence) -**Note**: _The license fee for this plugin is $99.00 via the Craft Plugin Store._ +## Key Features -One SEO-related topic that SEOmatic _does not_ cover is 404 redirects; for that we recommend our [Retour plugin](https://github.com/nystudio107/craft-retour). +- Healthy SEO by default, tailored to your Craft site’s content model—including Craft Commerce products. +- Implements HTML tags, JSON-LD microdata, Twitter Card tags, Facebook Open Graph tags, XML sitemaps, robots.txt, humans.txt, and ads.txt. +- Supports SEO-friendly pagination. +- Control panel SEO previews for content authors. +- Custom fields for overriding default SEO values. +- Visual Configuration overview for helping with project setup. +- Deep support for Craft features: multi-site, customizable permissions, headless mode, GraphQL, and more. +- Tools for validating and debugging metadata. +- Various utilities for managing additional meta tags, text excerpts, and more. + +::: tip Use Retour for 404 Redirects +SEOmatic _does not_ cover is 404 redirects; for that we recommend our [Retour plugin](https://github.com/nystudio107/craft-retour). +::: ## Used By -![Screenshot](./resources/img/moz-logo-blue.png)![Screenshot](./resources/img/craft-cms-logo.png) +<UsedByLogos /> -SEOmatic is the SEO tool that the SEO experts at [Moz.com](https://moz.com/) and the creators of Craft CMS, Pixel & Tonic, rely on to handle their SEO! +The SEO experts at [Moz.com](https://moz.com/) and the creators of Craft CMS rely on SEOmatic! ## Requirements -This plugin requires Craft CMS 3.1.19 or later. +This plugin requires Craft CMS 3.0.0 or later. ## Installation -To install SEOmatic, follow these steps: - 1. Open your terminal and go to your Craft project: - cd /path/to/project + ``` + cd /path/to/project + ``` -2. Then tell Composer to load the plugin: +2. Tell Composer to load the plugin: - composer require nystudio107/craft-seomatic + ``` + composer require nystudio107/craft-seomatic + ``` -3. Install the plugin via `./craft install/plugin seomatic` via the CLI, or in the Control Panel, go to Settings → Plugins and click the “Install” button for SEOmatic. +3. Install the plugin via CLI: -You can also install SEOmatic via the **Plugin Store** in the Craft Control Panel. + ``` + php craft install/plugin seomatic + ``` -SEOmatic works on Craft 3.x. + Or in the control panel, go to **Settings** → **Plugins** and click **Install** for SEOmatic. -Brought to you by [nystudio107](https://nystudio107.com/) +You can alternatively install SEOmatic via the **Plugin Store** in the Craft control panel. diff --git a/docs/docs/issues.md b/docs/docs/issues.md index 91ef73939..f0096e3ac 100644 --- a/docs/docs/issues.md +++ b/docs/docs/issues.md @@ -2,42 +2,48 @@ title: Issues & Upgrading description: Issues & Upgrading documentation for the SEOmatic plugin. The SEOmatic plugin facilitates modern SEO best practices & implementation for Craft CMS 3. --- + # Issues & Upgrading +Where to report issues and notes for upgrading from previous versions. + ## Issues -Please report any issues you find to the [SEOmatic Issues](https://github.com/nystudio107/craft-seomatic/issues) page. +Please report any issues you find to [SEOmatic Issues](https://github.com/nystudio107/craft-seomatic/issues) on GitHub. ## Upgrading from SEOmatic 1.x for Craft CMS 2.x -If you are upgrading a site from Craft CMS 2.x to Craft CMS 3.x that used the older SEOmatic plugin, here’s what you need to know. +If you’re upgrading a site from Craft CMS 2.x to 3.x that used the older SEOmatic plugin, here’s what you need to know. SEOmatic will migrate your old Craft 2.x Field settings & data in the following ways: - - * The Content SEO settings for each Section where you had an old SEOmatic Meta FieldType will be migrated for you. - + +* The Content SEO settings for each Section where you had an old SEOmatic Meta FieldType will be migrated for you. * If you add a new SEO Settings Field to a section that had an old SEOmatic Meta field in it, it will migrate any custom data you had entered on a per-Entry basis -**Important:** Keep your old Craft 2.x Seomatic_Meta fields intact; don’t delete them or change the Field type to the new SEO Settings field type. Instead, create a new SEO Settings field in the same Section, Category Group, or Commerce Product Type. It will automatically look for and migrate data from the old Seomatic_Meta Field. +::: warning +Keep your old Craft 2.x Seomatic_Meta fields intact; don’t delete them or change them to use the new SEO Settings field type. Instead, create a new SEO Settings field in the same Section, Category Group, or Commerce Product Type. It will automatically look for and migrate data from the old Seomatic_Meta Field. +::: SEOmatic for Craft CMS 3 is a complete rewrite and re-architecture from scratch of the plugin. This allowed us to take what we learned from SEOmatic 1.x, and rebuild it with a much more robust and extendable architecture. If feasible, we think the best way to update sites using SEOmatic is to start fresh, and explore how the conceptual changes in the plugin affect how you use it. In most cases, you don’t even need to use an SEOmatic Field, and the setup is cleaner and easier without it! We hope you love it! -**N.B.:** The Twig templating syntax has changed (but you may not need to use Twig at all with the new version), so give the docs a once-over. +::: tip Check Your Templates +The Twig templating syntax has changed. You may not need to use Twig at all with the new version, but consider giving the [Twig Templating](using/) docs a once-over. +::: ## Importing Data to SEOmatic It is highly recommended that you set up mappings from existing content to your SEO via the **Content SEO** settings as described above. Usually this obviates the need to import data into SEOmatic, instead _pulling_ it from your content. -In addition to that, however, if you also have custom SEO data that you need to import, you can import that into an SEO Settings field using the [FeedMe plugin](https://plugins.craftcms.com/feed-me) from Pixel & Tonic. - -**N.B.:** The SEO Settings field is intended to be used as a custom override for your Content SEO Settings. In many cases, you won’t need or want an SEO Settings field at all. +In addition to that, however, if you also have custom SEO data that you need to import, you can import that into an SEO Settings field using Pixel & Tonic’s [Feed Me plugin](https://plugins.craftcms.com/feed-me). -Once you have added an SEO Settings field added to a Section, it will show up as an import target in FeedMe: +::: tip +The SEO Settings field is meant to be a custom override for your Content SEO Settings. In many cases, you won’t need or want an SEO Settings field at all. +::: -![Screenshot](./resources/screenshots/seomatic-feedme-import.png) +Once you have added an SEO Settings field added to a Section, it will show up as an import target in Feed Me: -See the [FeedMe documentation](https://docs.craftcms.com/feed-me/v4/) for more information on importing data into Craft CMS. +![Screenshot of Feed Me import fields with a long list of SEO mappings](./resources/screenshots/seomatic-feedme-import.png) -Brought to you by [nystudio107](https://nystudio107.com/) +See the [Feed Me documentation](https://docs.craftcms.com/feed-me/v4/) for more information on importing data into Craft CMS. diff --git a/docs/docs/multi-site.md b/docs/docs/multi-site.md new file mode 100644 index 000000000..8e3dce9f5 --- /dev/null +++ b/docs/docs/multi-site.md @@ -0,0 +1,40 @@ +# Multi-Site Language/Locale Support + +SEOmatic comes with multi-site support baked in. Each site has its own localized settings that can be different on a per-site basis. + +Craft CMS [defines Sites](https://craftcms.com/docs/3.x/sites.html) as any combination of site settings and locale (language). But there needs to be some way to organize these sites to define a relationship between them. That’s what [Site Groups](https://github.com/craftcms/cms/issues/1668) are for. + +SEOmatic treats each Site Group as a separate entity, and any sites contained in that site group are treated as localizations of the same site. + +This is necessary because there needs to be some way to let SEOmatic know what the relationship is between the various sites. + +So for example, you might have: + +``` +├── Primary Site Group +│   ├── English Site +│   ├── Chinese Site +| └── German Site +├── Sister Site Group +│   ├── English Site +| └── German Site +``` + +While you technically don’t have to organize your Site Groups in this manner, SEOmatic currently requires it so that it can understand the relationship between your sites. + +This is necessary because for a variety of SEO-related things, we need to tell search engines what is really just another localization/translation of the same thing. + +If you _don’t_ want to organize your sites in this manner, you’ll need to turn off the **Site Groups define logically separate sites** setting on the Plugin Settings page. + +Sites that are grouped together under the same Site Group will have `<link rel="alternate" hreflang="XX">` & `<meta content="xx_XX" property="og:locale:alternate">` URLs added automatically in the HTML. + +To disable SEOmatic’s automatic rendering of these tags, you can do: + +```twig +{% do seomatic.link.get('alternate').include(false) %} +{% do seomatic.tag.get('og:locale:alternate').include(false) %} +``` + +Sites that are grouped together under the same Site Group will also be included in the appropriate sitemap indexes, and have `<xhtml:link rel="alternate" hreflang="xx-xx">` tags added to the respective sitemaps. + +To disable the generation of the `<xhtml:link rel="alternate" hreflang="xx-xx">` on a per-Entry basis, you can do this by adding an SEO Settings to the Section/Category Group/Product in question, and turn off **Sitemap Enabled** on a per-entry basis. diff --git a/docs/docs/overview.md b/docs/docs/overview.md index 72d17deb5..9123d28e7 100644 --- a/docs/docs/overview.md +++ b/docs/docs/overview.md @@ -2,27 +2,24 @@ title: SEOmatic Overview description: SEOmatic Overview documentation for the SEOmatic plugin. The SEOmatic plugin facilitates modern SEO best practices & implementation for Craft CMS 3 & 4. --- -# SEOmatic Overview - -SEOmatic facilitates [modern SEO best practices](https://nystudio107.com/blog/modern-seo-snake-oil-vs-substance) & implementation for Craft CMS 3 & 4. It is a turnkey SEO system that is comprehensive, powerful, and flexible. -SEOmatic allows you to quickly get a site up and running with a robust, comprehensive SEO strategy. It is also implemented in a Craft-y way, in that it is also flexible and customizable. +# SEOmatic Overview -It implements [JSON-LD](https://developers.google.com/schemas/formats/json-ld?hl=en) microdata, [Twitter Cards](https://dev.twitter.com/cards/overview) tags, [Facebook OpenGraph](https://developers.facebook.com/docs/sharing/opengraph) tags, [Sitemaps](https://www.sitemaps.org/protocol.html) of your content, [Robots.txt](http://www.robotstxt.org/robotstxt.html) bot directives, [Humans.txt](http://humanstxt.org) authorship accreditation, and as well as HTML meta tags. +SEOmatic allows you to quickly get a site running with a robust, comprehensive SEO strategy that follows [modern best practices](https://nystudio107.com/blog/modern-seo-snake-oil-vs-substance). It does this in a Craft-y way that’s flexible and customizable. -SEOmatic populates your templates with SEO Meta in the same way that Craft populates your templates with `entry` variables, with a similar level of freedom and flexibility in terms of how you use them. +SEOmatic adds meta containers that are available to your templates much like Craft’s `entry` variables. Working with them should feel familiar and flexible. -SEOmatic works automatically with Craft Commerce 2 as well, providing metadata, JSON-LD structured data, and sitemaps for your Products. +Unlike Craft’s `entry` variables, the meta containers may use information that’s modified at different levels and expressed in different ways on the site. -SEOmatic also caches each unique SEO Meta request so that your site performance is minimally impacted by the rich SEO Meta tags provided. +SEOmatic manages caches behind the scenes to ensure all this information can be used effectively with a minimal impact on site performance. ## The Meta Cascade -SEOmatic cascades SEO data for any given route, by allowing three distinct places where content authors / admins can add that data: +SEOmatic cascades SEO data for any given route, by allowing three distinct places where content authors can add that data: -* **Global SEO** - Global SEO settings are the base settings that are used site-wide. If there are no more specific SEO settings for a given page, it will fall back on the Global SEO settings -* **Content SEO** - Each Section in Craft CMS (Entries, Categories, Products, etc.) gets its own unique set of SEO settings that will be applied to that section (and Entry Types also can have unique settings). Typically you would set up your Content SEO settings to _pull_ from existing fields in the corresponding sections. -* **SEO Settings fields** - If you require overrides on a per-entry basis, the SEO Settings field allows you to do that as well. However, if Content SEO is set up to pull from your existing content fields, SEO Settings fields only sparringly need to be used +1. **Global SEO** – Site-wide base settings applied when there isn’t anything more specific. +2. **Content SEO** – Settings for each Craft _section_, like Entries, Categories, and Products. Sections and entry types can designate which fields SEOmatic should pull details from. +3. **SEO Settings Fields** – Entry-level customization via the included SEO Settings field type. Ideally this is only necessary for tailoring when _Content SEO_ configuration designates useful defaults. These SEO settings layer on top of each other, so the most specific value provided is always what is used for a given page. Content SEO settings override Global SEO settings, and SEO Settings fields override them both. @@ -32,10 +29,37 @@ In this way, the SEO data that SEOmatic provides _cascades_ together to form the ## Twig Overrides -SEOmatic also has a very robust Twig API for all of the SEO settings. For a given page, all of the SEO information provided by content authors cascades together as described above, and then is available in your Twig templates (or in PHP) for you to manipulate further as you see fit. +You can work with and further manipulate the SEO information from that cascade using robust Twig and PHP APIs, for complete control over the SEO meta data that is rendered for your website. + +See [Using SEOmatic](./using/) for an in-depth look at how SEOmatic works under the hood, and for reference on the Twig APIs. + +## Plugin Support + +SEOmatic automatically works with the following plugins: + +* [Craft Commerce](https://plugins.craftcms.com/commerce) from Pixel & Tonic +* [Digital Products](https://plugins.craftcms.com/digital-products) from Pixel & Tonic +* [Calendar](https://plugins.craftcms.com/calendar) from Solspace +* [Campaign](https://plugins.craftcms.com/campaign) from Put Your Lights On + +This means that SEOmatic will treat the Elements that these plugins provide as first class citizens, just like Craft Entries & Categories. + +SEOmatic will generate metadata, sitemaps, and have a Craft CP UI for them. If you have a custom Element provided by a plugin or module, you can integrate it using the [SeoElementInterface](https://github.com/nystudio107/craft-seomatic/blob/v4/src/base/SeoElementInterface.php). + +## Emoji Support + +SEOmatic supports using Emojis in any of the fields in SEOmatic, so you could use one in the SEO Description, for instance: + +![Screenshot of an SEO Settings field that includes emoji in a Custom Text description override](./resources/screenshots/seomatic-emoji-support.png) + +It’s up to Google whether or not to display the emojis that you add to your SEO meta, but used effectively, they can help make your entries in the SERP stand out from others. Learn more: [Why Use Emojis in Your SEO / PPC Strategy?](https://www.jellyfish.net/en-us/news-and-views/why-use-emojis-in-your-seo-ppc-strategy) + +![Screenshot of SEOmatic’s General settings in the Global SEO section, with the macOS emoji picker open and a boom emoji leading the global site title](./resources/screenshots/seomatic-mac-emoji-keyboard.png) + +On the Mac, you can invoke an Emoji keyboard inside of any text field by hitting Command Control Space. This works in any Mac application, not just web browsers or SEOmatic. -In this way, you have complete control over the SEO meta data that is rendered for your website. +## Single Page App (SPA) Support -See the **Using SEOmatic** section for an in-depth look at how SEOmatic works under the hood, and for reference on the Twig APIs. +SEOmatic fully supports working with SPAs, allowing you to receive the metadata needed for a given route either as an array, or as DOM elements ready to be inserted. -Brought to you by [nystudio107](https://nystudio107.com/) +See the [Headless SPA API](advanced.md#headless-spa-api) section for details. diff --git a/docs/docs/resources.md b/docs/docs/resources.md index b9c2829c2..1e9a7c34b 100644 --- a/docs/docs/resources.md +++ b/docs/docs/resources.md @@ -2,8 +2,11 @@ title: SEO Resources description: SEO Resources documentation for the SEOmatic plugin. The SEOmatic plugin facilitates modern SEO best practices & implementation for Craft CMS 3. --- + # SEO Resources +Learn more about SEO goals, strategy, and tips. + ## Crafting Modern SEO Presentation: [![Crafting Modern SEO video](https://i.vimeocdn.com/video/671925645-ac6a1d9ae202eede970bc17a8438f8efe076e0a4be34eac8bfff83bad4885ac3-d?mw=1920&mh=1080&q=70)](http://dotall.com/sessions/seo-best-practices-from-a-developers-point-of-view) @@ -21,5 +24,3 @@ description: SEO Resources documentation for the SEOmatic plugin. The SEOmatic p * [Modern SEO: Snake Oil vs. Substance](https://nystudio107.com/blog/modern-seo-snake-oil-vs-substance) * [JSON-LD, Structured Data and Erotica](https://nystudio107.com/blog/json-ld-structured-data-and-erotica) - -Brought to you by [nystudio107](https://nystudio107.com/) diff --git a/docs/docs/resources/img/craft-cms-logo.png b/docs/docs/resources/img/craft-cms-logo.png deleted file mode 100644 index bf334f2d87200988e74d1ff028057644cc579a61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3068 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 diff --git a/docs/docs/resources/img/moz-logo-blue.png b/docs/docs/resources/img/moz-logo-blue.png deleted file mode 100644 index f29b5f3fec17a8d89b8155b5d261c0178efdebe3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14665 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 G3-~_)EpJ%> diff --git a/docs/docs/resources/screenshots/seomatic-global-security.png b/docs/docs/resources/screenshots/seomatic-global-security.png deleted file mode 100644 index cbaba1a9ecf370a0b9f94532c68915d47e38903e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178706 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 YcZ%Ykt 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 diff --git a/docs/docs/technologies.md b/docs/docs/technologies.md deleted file mode 100644 index a15c0f6a7..000000000 --- a/docs/docs/technologies.md +++ /dev/null @@ -1,157 +0,0 @@ ---- -title: SEO Technologies -description: SEO Technologies documentation for the SEOmatic plugin. The SEOmatic plugin facilitates modern SEO best practices & implementation for Craft CMS 3. ---- -# SEO Technologies - -## Pagination and SEO - -If you are using paginated entries, you’ll want to add some additional markup to your templates to make Google et al aware of this. Fortunately, SEOmatic makes that easy, you simply do: - -```twig -{% do seomatic.helper.paginate(PAGEINFO) %} -``` - - The `PAGEINFO` here is the variable from the `{% paginate %}` tag as [described here](https://docs.craftcms.com/v3/templating/tags/paginate.html#the-pageInfo-variable), this will properly set the `canonicalUrl`, as well as adding the `<link rel='prev'>` and `<link rel='next'>` tags for you. - -A complete example (just a modified version of the [Craft 3 Documentation on {% Paginate %}](https://docs.craftcms.com/v3/templating/tags/paginate.html#the-pageInfo-variable)) might look like this: - -```twig -{% paginate craft.entries.section('blog').limit(10) as pageInfo, pageEntries %} -{% do seomatic.helper.paginate(pageInfo) %} - -{% for entry in pageEntries %} - <article> - <h1>{{ entry.title }}</h1> - {{ entry.body }} - </article> -{% endfor %} - -{% if pageInfo.prevUrl %}<a href="{{ pageInfo.prevUrl }}">Previous Page</a>{% endif %} -{% if pageInfo.nextUrl %}<a href="{{ pageInfo.nextUrl }}">Next Page</a>{% endif %} -``` -More info: [SEO Guide to Google Webmaster Recommendations for Pagination](https://moz.com/blog/seo-guide-to-google-webmaster-recommendations-for-pagination) - -## Multi-Site Language/Locale Support - -SEOmatic comes with multi-site support baked in. Each site has its own localized settings that can be different on a per-site basis. - -Craft CMS [defines Sites](https://docs.craftcms.com/v3/sites.html) as any combination of site settings and locale (language). But there needs to be some way to organize these sites to define a relationship between them. That’s what [Site Groups](https://github.com/craftcms/cms/issues/1668) are for. - -SEOmatic treats each Site Group as a separate entity, and any sites contained in that site group are treated as localizations of the same site. - -This is necessary because there needs to be some way to let SEOmatic know what the relationship is between the various sites. - -So for example, you might have: - -``` -├── Primary Site Group -│   ├── English Site -│   ├── Chinese Site -| └── German Site -├── Sister Site Group -│   ├── English Site -| └── German Site -``` - -While you technically don’t have to organize your Site Groups in this manner, SEOmatic currently requires it so that it can understand the relationship between your sites. - -This is necessary because for a variety of SEO-related things, we need to tell search engines what is really just another localization/translation of the same thing. - -If you _don’t_ want to organize your sites in this manner, you’ll need to turn off the **Site Groups define logically separate sites** setting on the Plugin Settings page. - -Sites that are grouped together under the same Site Group will have `<link rel="alternate" hreflang="XX">` & `<meta content="xx_XX" property="og:locale:alternate">` URLs added automatically in the HTML. - -To disable SEOmatic’s automatic rendering of these tags, you can do: -```twig -{% do seomatic.link.get('alternate').include(false) %} -{% do seomatic.tag.get('og:locale:alternate').include(false) %} -``` - -Sites that are grouped together under the same Site Group will also be included in the appropriate sitemap indexes, and have `<xhtml:link rel="alternate" hreflang="xx-xx">` tags added to the respective sitemaps. - -To disable the generation of the `<xhtml:link rel="alternate" hreflang="xx-xx">` on a per-Entry basis, you can do this by adding an SEO Settings to the Section/Category Group/Product in question, and turn off **Sitemap Enabled** on a per-entry basis. - -## Plugin Support - -SEOmatic automatically works with the following plugins: - -* [Craft Commerce](https://plugins.craftcms.com/commerce) from Pixel & Tonic -* [Digital Products](https://plugins.craftcms.com/digital-products) from Pixel & Tonic -* [Calendar](https://plugins.craftcms.com/calendar) from Solspace - -This means that SEOmatic will treat the Elements that these plugins provide as first class citizens, just like Craft Entries & Categories. - -SEOmatic will generate metadata, sitemaps, and have a Craft CP UI for them. If you have a custom Element provided by a plugin or module, you can integrate it using the [SeoElementInterface](https://github.com/nystudio107/craft-seomatic/blob/v3/src/base/SeoElementInterface.php). - -## Emoji Support - -SEOmatic supports using Emojis in any of the fields in SEOmatic, so you could use one in the SEO Description, for instance: - -![Screenshot](./resources/screenshots/seomatic-emoji-support.png) - -It’s up to Google whether or not to display the emojis that you add to your SEO meta, but used effectively, they can help make your entries in the SERP stand out from others. Learn more: [Why Use Emojis in Your SEO / PPC Strategy?](https://www.jellyfish.net/en-us/news-and-views/why-use-emojis-in-your-seo-ppc-strategy) - -![Screenshot](./resources/screenshots/seomatic-mac-emoji-keyboard.png) - -On the Mac, you can invoke an Emoji keyboard inside of any text field by hitting Command Control Space. This works in any Mac application, not just web browsers or SEOmatic. - -## Google AMP Support - -SEOmatic works great with [Google AMP](https://www.ampproject.org/)! In fact, it will provide the [JSON-LD structured data](https://www.ampproject.org/docs/fundamentals/spec) that is _required_ by the AMP spec. - -You do however need to [Make your page discoverable](https://www.ampproject.org/docs/fundamentals/discovery): - -Add the following to the non-AMP template to tell Google where the AMP version of the page is; `yourAmpPageLink` the URL to your AMP page: - -```twig -{% set linkTag = seomatic.link.create({ - "rel": "amphtml", - "href": yourAmpPageLink - }) -%} -``` - -And this to the AMP template to tell Google where the canonical HTML page is: - -```twig -{% do seomatic.meta.canonicalUrl(entry.url) %} -``` - -Since AMP [doesn’t allow for third-party JavaScript](https://medium.com/google-developers/how-to-avoid-common-mistakes-when-publishing-accelerated-mobile-pages-9ea61abf530f), you might want to add this to your AMP templates: -```twig -{% do seomatic.script.container().include(false) %} -``` - -This will cause SEOmatic to not render _any_ custom scripts you might have enabled (such as Google Analytics, gtag, etc.) - -Then you can include Google AMP Analytics as per [Adding Analytics to your AMP pages](https://developers.google.com/analytics/devguides/collection/amp-analytics/) (this assumes you’re using `gtag`): -``` -{% set script = seomatic.script.get('gtag') %} -{% set analyticsId = script.vars.googleAnalyticsId.value ??? '' %} -<amp-analytics type="googleanalytics"> - <script type="application/json"> - { - "vars": { - "account": "{{ analyticsId }}" - }, - "triggers": { - "trackPageview": { - "on": "visible", - "request": "pageview" - } - } - } - </script> -</amp-analytics> -``` - -The above uses the `???` empty coalesce operator that comes with SEOmatic; check out [SEOmatic’s ??? Empty Coalesce operator](#seomatics--empty-coalesce-operator) for details. - -## Single Page App (SPA) Support - -SEOmatic fully supports working with SPAs, allowing you to receive the metadata needed for a given route either as an array, or as DOM elements ready to be inserted. - -See the **Headless SPA API** section for details. - -Brought to you by [nystudio107](https://nystudio107.com/) diff --git a/docs/docs/using.md b/docs/docs/using.md deleted file mode 100644 index d068797b5..000000000 --- a/docs/docs/using.md +++ /dev/null @@ -1,841 +0,0 @@ ---- -title: Using SEOmatic -description: Using SEOmatic documentation for the SEOmatic plugin. The SEOmatic plugin facilitates modern SEO best practices & implementation for Craft CMS 3. ---- -# Using SEOmatic - -## SEOmatic’s ??? Empty Coalesce operator - -SEOmatic adds the `???` operator to Twig that will return the first thing that is defined, not null, and not empty. This allows you to safely "cascade" empty text/image values. - -This can be used both in Twig templates, and in any of SEOmatic’s fields, which are parsed as Twig templates as well. - -This is particularly useful for SEO fields (both text & images), where you’re dealing with a number of fallback/default values that may or may not exist, and may or may not be empty. - -The `???` Empty Coalescing operator is similar to the `??` [null coalescing operator](https://nystudio107.com/blog/handling-errors-gracefully-in-craft-cms#coalescing-the-night-away), but also ignores empty strings (`""`) and empty arrays (`[]`) as well. - -The problem is that to [code defensively](https://nystudio107.com/blog/handling-errors-gracefully-in-craft-cms#defensive-coding-in-twig), you want to make sure that all of these things are defined, not null, and also have a value. So you end up with something like: - -```twig -{% if entry is defined and entry.description is defined and entry.description | length %} - {% set description = entry.description %} -{% elseif category is defined and category.description is defined and category.description | length %} - {% set description = category.description %} -{% else %} - {% set description = global.description %} -{% endif %} -``` - -This gets quite verbose and quite tiresome quickly. There are other ways you can do something similar, such as using using the `?:` [ternary operator](https://twig.symfony.com/doc/2.x/templates.html#other-operators) and the [default filter](https://twig.symfony.com/doc/2.x/filters/default.html), but this too gets a bit unwieldy. - -You can use the [null coalescing operator](https://nystudio107.com/blog/handling-errors-gracefully-in-craft-cms#coalescing-the-night-away), which picks the first thing that is defined and not null: - -```twig -{% set description = entry.description ?? category.description ?? global.description %} -``` - -But the problem here is it’ll _just_ pick the first thing that is defined and not `null`. So if `entry.description` is an empty string, it’ll use that, which is rarely what you want. - -Enter the Empty Coalescing operator, and it becomes: - -```twig -{% set description = entry.description ??? category.description ??? global.description %} -``` - -Now the first thing that is defined, not null, _and_ not empty will be what `description` is set to. - -Nice. Simple. Readable. And most importantly, likely the result you’re expecting. - -The examples presented here use the `???` operator for SEOmatic functions, but you can use them for anything you like. - -We’ve submitted a [pull request](https://github.com/twigphp/Twig/pull/2787) in the hopes of making this part of Twig core. This functionality is also available separately in the [Empty Coalesce](https://nystudio107.com/plugins/empty-coalesce) plugin. - -## Twig Templating - -SEOmatic can work fully without any Twig templating code at all. However, it provides a robust API that you can tap into from your Twig templates should you desire to do so. - -SEOmatic makes a global `seomatic` variable available in your Twig templates that allows you to work with the SEOmatic variables and functions. - -## A Word About `{% cache %}` Tags - -If you use Craft’s built-in `{% cache %}` tags, ensure that you don’t have any of SEOmatic’s tags (listed below) inside of them. The reason is that SEOmatic dynamically generates the tags on each request, using its own caching system for performance reasons. - -When you surround any Twig code in a `{% cache %}` tag, that code will only ever be executed once. On subsequent runs, the HTML result of what was inside of the `{% cache %}` tag is just returned, and the Twig code inside of it is never executed. - -For more information on how the `{% cache %}` tag works, see the [The Craft {% cache %} Tag In-Depth](https://nystudio107.com/blog/the-craft-cache-tag-in-depth) article. - -## SEOmatic Variables - -All of the SEOmatic variables can be accessed as you would any normal Twig variable: - -```twig -{{ seomatic.meta.seoTitle }} -``` -Or -```twig -{% set title = seomatic.meta.seoTitle %} -``` - -They can also be changed by passing in a value with the Twig `{% do %}` syntax: - -```twig -{% do seomatic.meta.seoTitle("Some Title") %} -``` -Or -```twig -{% do seomatic.meta.seoDescription("This is my description. There are many like it, but this one is mine.") %} -``` - -You can also set multiple variables at once using array syntax: - -```twig -{% do seomatic.meta.setAttributes({ - "seoTitle": "Some Title", - "seoDescription": "This is my description. There are many like it, but this one is mine." - }) -%} -``` - -Or you can chain them together: - -```twig -{% do seomatic.meta - .seoTitle("Some Title") - .seoDescription("This is my description. There are many like it, but this one is mine.") -%} -``` - -These do the same thing, so use whichever you prefer. - -You can set SEOmatic variables anywhere in your templates, even in sub-templates you `include` from other templates. This works because SEOmatic dynamically injects the meta tags, scripts, links, and JSON-LD into your page after the template is done rendering. - -SEOmatic variables can also reference other SEOmatic variables using single-bracket syntax: - - ```twig - {% do seomatic.meta.seoDescription("{seomatic.meta.seoTitle}") %} - ``` - -You can also reference `entry`, `category`, or `product` Craft variables, if they are present in your template: - - ```twig - {% do seomatic.meta.seoTitle("{entry.title}") %} - ``` -Or -```twig - {% do seomatic.meta.seoTitle("{category.title}") %} -``` - -But most of the time, you’ll want to just set them like you would regular variables: - - ```twig - {% do seomatic.meta.seoTitle(entry.title) %} - ``` -Or -```twig - {% do seomatic.meta.seoTitle(category.title) %} -``` -...so that there is no additional Twig parsing that needs to be done. - -SEOmatic variables are also parsed for aliases, and in Craft 3.1, for [environment variables](https://docs.craftcms.com/v3/config/environments.html#control-panel-settings) as well. - -There may be occasions where you want to output the final parsed value of an SEOmatic variable on the frontend. You can do that via `seomatic.meta.parsedValue()`. For example: - -```twig -{{ seomatic.meta.parsedValue('seoDescription') }} -``` - -This will output the final parsed value of the `seomatic.meta.seoDescription` variable. - -This parsing is done automatically by SEOmatic just before the meta information is added to your page. - -## Meta Variables: `seomatic.meta` - -The `seomatic.meta` variable contains all of the meta variables that control the SEO that will be rendered on the site. They are pre-populated from your settings and content in the Control Panel, but you can change them as you see fit. - -### General Variables: - -* **`seomatic.meta.mainEntityOfPage`** - the [schema.org](http://schema.org/docs/full.html) type that represents the main entity of the page -* **`seomatic.meta.seoTitle`** - the title that is used for the `<title>` tag -* **`seomatic.meta.siteNamePosition`** - controls where the `seomatic.site.siteName` appears relative to the `seomatic.meta.seoTitle` in the `<title>` tag. Valid values are `before`, `after`, or `none`. -* **`seomatic.meta.seoDescription`** - the description that is used for the `<meta name="description">` tag -* **`seomatic.meta.seoKeywords`** - the keywords that are used for the `<meta name="keywords">` tag. Note that this tag is _ignored_ by Google -* **`seomatic.meta.seoImage`** - the image URL that is used for SEO image -* **`seomatic.meta.seoImageWidth`** - the width of the SEO image -* **`seomatic.meta.seoImageHeight`** - the height of the SEO image -* **`seomatic.meta.seoImageDescription`** - a textual description of the SEO image -* **`seomatic.meta.canonicalUrl`** - the URL used for the `<link rel="canonical">` tag. By default, this is set to `{seomatic.helper.safeCanonicalUrl()}` or `{entry.url}`/`{category.url}`/`{product.url}`, but you can change it as you see fit. This variable is also used to set the `link rel="canonical"` HTTP header. -* **`seomatic.meta.robots`** - the setting used for the `<meta name="robots">` tag that controls how bots should index your site. This variable is also used to set the `X-Robots-Tag` HTTP header. [Learn More](https://developers.google.com/search/reference/robots_meta_tag) - -### Facebook OpenGraph Variables: - -* **`seomatic.meta.ogType`** - the value used for the `<meta property="og:type">` tag, such as `website` or `article` -* **`seomatic.meta.ogTitle`** - the value used for the `<meta property="og:title">` tag. This defaults to `{seomatic.meta.seoTitle}` -* **`seomatic.meta.ogSiteNamePosition`** - controls where the `seomatic.site.siteName` appears relative to the `seomatic.meta.ogTitle` in the `<meta property="og:title">` tag. Valid values are `before`, `after`, or `none`. -* **`seomatic.meta.ogDescription`** - the value used for the `<meta property="og:description">` tag. This defaults to `{seomatic.meta.seoDescription}` -* **`seomatic.meta.ogImage`** - the value used for the `<meta property="og:image">` tag. This defaults to `{seomatic.meta.seoImage}` -* **`seomatic.meta.ogImageWidth`** - the width of the ogImage. This defaults to `{seomatic.meta.seoImageWidth}` -* **`seomatic.meta.ogImageHeight`** - the height of the ogImage. This defaults to `{seomatic.meta.seoImageHeight}` -* **`seomatic.meta.ogImageDescription`** - the value used for the `<meta property="og:image:alt">` tag. This defaults to `{seomatic.meta.seoImageDescription}` - -### Twitter Variables: - -* **`seomatic.meta.twitterCard`** - the value used for the `<meta name="twitter:card">` tag, such as `summary` or `summary_large_image` -* **`seomatic.meta.twitterCreator`** - the value used for the `<meta name="twitter:creator">` tag. This defaults to `{seomatic.site.twitterHandle}` -* **`seomatic.meta.twitterTitle`** - the value used for the `<meta name="twitter:title">` tag. This defaults to `{seomatic.meta.seoTitle}` -* **`seomatic.meta.twitterSiteNamePosition`** - controls where the `seomatic.site.siteName` appears relative to the `seomatic.meta.twitterTitle` in the `<meta name="twitter:title">` tag. Valid values are `before`, `after`, or `none`. -* **`seomatic.meta.twitterDescription`** - the value used for the `<meta name="twitter:description">` tag. This defaults to `{seomatic.meta.seoDescription}` -* **`seomatic.meta.twitterImage`** - the value used for the `<meta name="twitter:image">` tag. This defaults to `{seomatic.meta.seoImage}` -* **`seomatic.meta.twitterImageWidth`** - the width of the Twitter image. This defaults to `{seomatic.meta.seoImageWidth}` -* **`seomatic.meta.twitterImageHeight`** - the height of the Twitter image. This defaults to `{seomatic.meta.seoImageHeight}` -* **`seomatic.meta.twitterImageDescription`** - the value used for the `<meta name="twitter:image:alt">` tag. This defaults to `{seomatic.meta.seoImageDescription}` - -## Site Variables `seomatic.site` - -The `seomatic.site` variable has site-wide settings that are available on a per-site basis for multi-site setups. - -* **`seomatic.site.siteName`** - The name of the site -* **`seomatic.site.twitterHandle`** - The site Twitter handle -* **`seomatic.site.facebookProfileId`** - The site Facebook profile ID -* **`seomatic.site.facebookAppId`** - The site Facebook app ID -* **`seomatic.site.googleSiteVerification`** - The Google Site Verification code -* **`seomatic.site.bingSiteVerification`** - The Bing Site Verification code -* **`seomatic.site.pinterestSiteVerification`** - The Pinterest Site Verification code -* **`seomatic.site.sameAsLinks`** - Array of links for Same As... Sites, indexed by the handle. So for example you could access the site Facebook URL via `seomatic.site.sameAsLinks["facebook"]["url"]`. These links are used to generate the `<meta property="og:same_as">` tags, and are also used in the `sameAs` property in the `mainEntityOfPage` JSON-LD. -* **`seomatic.site.siteLinksSearchTarget`** - Google Site Links search target. [Learn More](https://developers.google.com/search/docs/data-types/sitelinks-searchbox) -* **`seomatic.site.siteLinksQueryInput`** - Google Site Links query input. [Learn More](https://developers.google.com/search/docs/data-types/sitelinks-searchbox) - -### Site Identity Variables `seomatic.site.identity` - -The `seomatic.site.identity` variable is used to create [JSON-LD Structured Data](https://developers.google.com/search/docs/guides/intro-structured-data) that _can_ appear as [Rich Snippets](https://developers.google.com/search/docs/guides/mark-up-content) on Google Search Engine Results Pages (SERP). JSON-LD Structured Data helps computers understand context and relationships, and is also read by other social media sites and apps. - -The `seomatic.site.identity` encapsulates all of the information associated with the owner of the site. - -* **`seomatic.site.identity.siteType`** - The schema.org general type -* **`seomatic.site.identity.siteSubType`** - The schema.org sub-type -* **`seomatic.site.identity.siteSpecificType`** - The schema.org specific type -* **`seomatic.site.identity.computedType`** - The computed most specific schema.org type -* **`seomatic.site.identity.genericName`** - The name of the entity that owns the site -* **`seomatic.site.identity.genericAlternateName`** - An alternate or nickname for the entity that owns the site -* **`seomatic.site.identity.genericDescription`** - A description of the entity that owns the site -* **`seomatic.site.identity.genericUrl`** - A URL for the entity that owns the site -* **`seomatic.site.identity.genericImage`** - A URL to an image or logo that represents the entity that owns the site. The image must be in JPG, PNG, or GIF format. -* **`seomatic.site.identity.genericImageWidth`** - The width of the entity image -* **`seomatic.site.identity.genericImageHeight`** - The height of the entity image -* **`seomatic.site.identity.genericImageIds`** - Asset ID array for the entity image -* **`seomatic.site.identity.genericTelephone`** - The primary contact telephone number for the entity that owns the site -* **`seomatic.site.identity.genericEmail`** - The primary contact email address for the entity that owns the site -* **`seomatic.site.identity.genericStreetAddress`** - The street address of the entity that owns the website, for example: 123 Main Street -* **`seomatic.site.identity.genericAddressLocality`** - locality of the entity that owns the website, for example: Portchester -* **`seomatic.site.identity.genericAddressRegion`** - The region of the entity that owns the website, for example: New York or NY -* **`seomatic.site.identity.genericPostalCode`** - The postal code of the entity that owns the website, for example: 14580 -* **`seomatic.site.identity.genericAddressCountry`** - The country in which the entity that owns the site is located, for example: US -* **`seomatic.site.identity.genericGeoLatitude`** - The latitude of the location of the entity that owns the website, for example: -120.5436367 -* **`seomatic.site.identity.genericGeoLongitude`** - The longitude of the location of the entity that owns the website, for example: 80.6033588 -* **`seomatic.site.identity.personGender`** - Only for entities of the type Person, the gender of the person -* **`seomatic.site.identity.personBirthPlace`** - Only for entities of the type Person, the place where the person was born -* **`seomatic.site.identity.organizationDuns`** - Only for entities of the type Organization, the DUNS (Dunn & Bradstreet) number of the organization that owns the site -* **`seomatic.site.identity.organizationFounder`** - Only for entities of the type Organization, the name of the founder of the organization -* **`seomatic.site.identity.organizationFoundingDate`** - Only for entities of the type Organization, the date the organization/company/restaurant was founded in [ISO 8601 date format](http://schema.org/Date), for example: `2018-03-26` -* **`seomatic.site.identity.organizationFoundingLocation`** - Only for entities of the type Organization, the location where the organization was founded -* **`seomatic.site.identity.organizationContactPoints`** - Only for entities of the type Organization, an array of contact points for the organization. [Learn More](https://developers.google.com/search/docs/guides/enhance-site#provide-business-contact-markup) -* **`seomatic.site.identity.corporationTickerSymbol`** - Only for entities of the type Corporation, the exchange ticker symbol of the corporation -* **`seomatic.site.identity.localBusinessPriceRange`** - Only for entities of the type LocalBusiness, the approximate price range of the goods or services offered by this local business -* **`seomatic.site.identity.localBusinessOpeningHours`** - Only for entities of the type LocalBusiness, an array of the opening hours for this local business. [Learn More][https://developers.google.com/search/docs/data-types/local-business] -* **`seomatic.site.identity.restaurantServesCuisine`** - Only for entities of the type Food Establishment, the primary type of cuisine that the food establishment serves -* **`seomatic.site.identity.restaurantMenuUrl`** - Only for entities of the type Food Establishment, a URL to the food establishment’s menu -* **`seomatic.site.identity.restaurantReservationsUrl`** - Only for entities of the type Food Establishment, a URL to the food establishment’s reservations page - -### Site Creator Variables `seomatic.site.creator` - -The `seomatic.site.creator` variable is used to create [JSON-LD Structured Data](https://developers.google.com/search/docs/guides/intro-structured-data) that _can_ appear as [Rich Snippets](https://developers.google.com/search/docs/guides/mark-up-content) on Google Search Engine Results Pages (SERP). JSON-LD Structured Data helps computers understand context and relationships, and is also read by other social media sites and apps. - -The `seomatic.site.creator` encapsulates all of the information associated with the creator of the site. This information is also used in the `humans.txt` page - -* **`seomatic.site.creator.siteType`** - The schema.org general type -* **`seomatic.site.creator.siteSubType`** - The schema.org sub-type -* **`seomatic.site.creator.siteSpecificType`** - The schema.org specific type -* **`seomatic.site.creator.computedType`** - The computed most specific schema.org type -* **`seomatic.site.creator.genericName`** - The name of the entity that created the site -* **`seomatic.site.creator.genericAlternateName`** - An alternate or nickname for the entity that created the site -* **`seomatic.site.creator.genericDescription`** - A description of the entity that created the site -* **`seomatic.site.creator.genericUrl`** - A URL for the entity that created the site -* **`seomatic.site.creator.genericImage`** - A URL to an image or logo that represents the entity that created the site. The image must be in JPG, PNG, or GIF format. -* **`seomatic.site.creator.genericImageWidth`** - The width of the entity image -* **`seomatic.site.creator.genericImageHeight`** - The height of the entity image -* **`seomatic.site.creator.genericImageIds`** - Asset ID array for the entity image -* **`seomatic.site.creator.genericTelephone`** - The primary contact telephone number for the entity that created the site -* **`seomatic.site.creator.genericEmail`** - The primary contact email address for the entity that created the site -* **`seomatic.site.creator.genericStreetAddress`** - The street address of the entity that created the website, for example: 123 Main Street -* **`seomatic.site.creator.genericAddressLocality`** - locality of the entity that created the website, for example: Portchester -* **`seomatic.site.creator.genericAddressRegion`** - The region of the entity that created the website, for example: New York or NY -* **`seomatic.site.creator.genericPostalCode`** - The postal code of the entity that created the website, for example: 14580 -* **`seomatic.site.creator.genericAddressCountry`** - The country in which the entity that created the site is located, for example: US -* **`seomatic.site.creator.genericGeoLatitude`** - The latitude of the location of the entity that created the website, for example: -120.5436367 -* **`seomatic.site.creator.genericGeoLongitude`** - The longitude of the location of the entity that created the website, for example: 80.6033588 -* **`seomatic.site.creator.personGender`** - Only for entities of the type Person, the gender of the person -* **`seomatic.site.creator.personBirthPlace`** - Only for entities of the type Person, the place where the person was born -* **`seomatic.site.creator.organizationDuns`** - Only for entities of the type Organization, the DUNS (Dunn & Bradstreet) number of the organization that created the site -* **`seomatic.site.creator.organizationFounder`** - Only for entities of the type Organization, the name of the founder of the organization -* **`seomatic.site.creator.organizationFoundingDate`** - Only for entities of the type Organization, the date the organization/company/restaurant was founded in [ISO 8601 date format](http://schema.org/Date), for example: `2018-03-26` -* **`seomatic.site.creator.organizationFoundingLocation`** - Only for entities of the type Organization, the location where the organization was founded -* **`seomatic.site.creator.organizationContactPoints`** - Only for entities of the type Organization, an array of contact points for the organization. [Learn More](https://developers.google.com/search/docs/guides/enhance-site#provide-business-contact-markup) -* **`seomatic.site.creator.corporationTickerSymbol`** - Only for entities of the type Corporation, the exchange ticker symbol of the corporation -* **`seomatic.site.creator.localBusinessPriceRange`** - Only for entities of the type LocalBusiness, the approximate price range of the goods or services offered by this local business -* **`seomatic.site.creator.localBusinessOpeningHours`** - Only for entities of the type LocalBusiness, an array of the opening hours for this local business. [Learn More][https://developers.google.com/search/docs/data-types/local-business] -* **`seomatic.site.creator.restaurantServesCuisine`** - Only for entities of the type Food Establishment, the primary type of cuisine that the food establishment serves -* **`seomatic.site.creator.restaurantMenuUrl`** - Only for entities of the type Food Establishment, a URL to the food establishment’s menu -* **`seomatic.site.creator.restaurantReservationsUrl`** - Only for entities of the type Food Establishment, a URL to the food establishment’s reservations page - -## Config Variables `seomatic.config` - -The `seomatic.config` variables are the global plugin configuration variables set in the `config.php` file. You can copy the `config.php` file to the Craft `config/` directory as `seomatic.php` to change them in a multi-environment friendly way. - -* **`seomatic.config.pluginName`** - The public-facing name of the plugin -* **`seomatic.config.renderEnabled`** - Should SEOmatic render metadata? -* **`seomatic.config.environment`** - The server environment, either `live`, `staging`, or `local` -* **`seomatic.config.displayPreviewSidebar`** - Should SEOmatic display the SEO Preview sidebar? -* **`seomatic.config.displayAnalysisSidebar`** - Should SEOmatic display the SEO Analysis sidebar? -* **`seomatic.config.devModeTitlePrefix`** - If `devMode` is on, prefix the `<title>` with this string -* **`seomatic.config.separatorChar`** - The separator character to use for the `<title>` tag -* **`seomatic.config.maxTitleLength`** - The max number of characters in the `<title>` tag -* **`seomatic.config.maxDescriptionLength`** - The max number of characters in the `<meta name="description">` tag - -## Helper Functions `seomatic.helper` - -* **`seomatic.helper.paginate(PAGEINFO)`** - Given the `PAGEINFO` variable from the `{% paginate %}` tag as [described here](https://docs.craftcms.com/v3/templating/tags/paginate.html#the-pageInfo-variable), this will properly set the `canonicalUrl`, as well as adding the `<link rel='prev'>` and `<link rel='next'>` tags for you. -* **`seomatic.helper.isPreview()`** - returns `true` if the current request is a preview, `false` if it is not -* **`seomatic.helper.sameAsByHandle(HANDLE)`** - returns an array of information about the **Same As URLs** site specified in `HANDLE`. Here’s an example of the information in the returned array: -``` -array (size=4) - 'siteName' => string 'Twitter' - 'handle' => string 'twitter' - 'url' => string 'https://twitter.com/nystudio107' - 'account' => string 'nystudio107' -``` -* **`seomatic.helper.truncate(TEXT, LENGTH, SUBSTR)`** - Truncates the `TEXT` to a given `LENGTH`. If `SUBSTR` is provided, and truncating occurs, the string is further truncated so that the substring may be appended without exceeding the desired length. -* **`seomatic.helper.truncateOnWord(TEXT, LENGTH, SUBSTR)`** - Truncates the `TEXT` to a given `LENGTH`, while ensuring that it does not split words. If `SUBSTR` is provided, and truncating occurs, the string is further truncated so that the substring may be appended without exceeding the desired length. -* **`seomatic.helper.getLocalizedUrls(URI, SITE_ID)`** - Return a list of localized URLs for a given `URI` that are in the `SITE_ID` site’s group. Both `URI` and `SITE_ID` are optional, and will use the current request’s `URI` and the current site’s `SITE_ID` if omitted. -* **`seomatic.helper.loadMetadataForUri(URI, SITE_ID)`** - Load the appropriate meta containers for the given `URI` and optional `SITE_ID` -* **`seomatic.helper.sitemapIndexForSiteId(SITE_ID)`** - Get the URL to the `SITE_ID`s sitemap index -* **`seomatic.helper.extractTextFromField(FIELD)`** - Extract plain text from a PlainText, Redactor, CKEdtior, Tags, Matrix, or Neo field -* **`seomatic.helper.extractKeywords(TEXT, LIMIT)`** - Extract up to `LIMIT` most important keywords from `TEXT` -* **`seomatic.helper.extractSummary(TEXT)`** - Extract the most important 3 sentences from `TEXT` -* **`seomatic.helper.socialTransform(ASSET, TRANSFORMNAME)`** - Transform the `ASSET` (either an Asset or an Asset ID) for social media sites in `TRANSFORMNAME`; valid values are `base`, `facebook`, `twitter-summary`, and `twitter-large` -* **`seomatic.helper.seoFileLink(FILE_URL, ROBOTS, CANONICAL, INLINE)`** - Generates a link to a local or remote file that allows you to set the `X-Robots-Tag` header via `ROBOTS` (defaults to `all`) and `Link` canonical header via `CANONICAL` (defaults to `''`) as per [Advanced rel="canonical" HTTP Headers](https://moz.com/blog/how-to-advanced-relcanonical-http-headers). `INLINE` controls whether the file will be displayed inline or downloaded. If any values are empty `''`, the headers will not be included. -* **`seomatic.helper.sanitizeUserInput(TEXT)`** - Sanitize the `TEXT` by decoding any HTML Entities, URL decoding the text, then removing any newlines, stripping HTML tags, stripping Twig tags, and changing single {}'s into ()'s - -## SEOmatic Tags & Containers - -All of the SEOmatic tags, links, scripts, title, and JSON-LD are meta objects that have their values set from the `seomatic.meta` variables. - -These meta objects know what properties they should have, and can self-validate. If `devMode` is on, you can check the Yii2 Debug Toolbar’s Log to see any validation warnings or errors with your tags. - -All of SEOmatic’s meta objects are stored in containers, and they can be accessed and manipulated directly. You can even dynamically create new tags via Twig at template render time. - -All of the meta object (tags, scripts, links, title, and JSON-LD) have the same API to make it easy to use. - -### Meta Object `.get()` -```twig -{% set descriptionTag = seomatic.tag.get("description") %} -``` -...will return the `<meta name="description">` meta object to you in `descriptionTag`. - -### Meta Object Properties - -You can access meta object properties just like you can any Twig variable: - -```twig -{{ descriptionTag.content }} -``` -Or -```twig -{% set myContent = seomatic.meta.seoTitle %} -``` - -They can also be changed by passing in a value with the Twig `{% do %}` syntax: - - -```twig -{% do descriptionTag.content("Some description") %} -``` - -All meta objects also have an `include` property that determines whether or not they should be included on your web page: - -```twig -{% do descriptionTag.include(false) %} -``` - -You could also chain this together in a single line: -```twig -{% do seomatic.tag.get("description").include(false) %} -``` - -And you can set multiple attributes at once using an array syntax: - -```twig -{% do seomatic.tag.get("description").setAttributes({ - "content": "Some Description", - "include": false - }) -%} -``` - -Which is the same as doing: - - -```twig -{% do seomatic.tag.get("description") - .content("Some Description") - .include(false) -%} -``` - -So use whatever you like better. - -### Extra Tag Attributes - -Should you need to add extra tag attributes to a Meta Item, such as the various `data-` tags, you can do that with the `.tagAttrs` property: - -```twig -{% set tag = seomatic.tag.get('description') %} -{% if tag | length %} - {% do tag.tagAttrs({ - "data-type": "lazy-description", - }) %} -{% endif %} -``` - -This will generate a tag that looks like this: -```html -<meta name="description" content="Here is my description!" data-type="lazy-description"> -``` - -A more practical example would be using [Klaro](https://heyklaro.com/) to manage Cookie consent, etc. to not activate Google Analytics until consent is given: - -```twig -{% set tag = seomatic.script.get('googleAnalytics') %} -{% if tag | length %} - {% do tag.tagAttrs({ - "type": "text/plain", - "data-type": "application/javascript", - "data-name": "google-analytics", - }) %} -{% endif %} -``` - -Then when the page renders in production, it’ll look like this: -```html -<script type="text/plain" data-name="google-analytics" data-type="application/javascript">(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ -(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), -m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) -})(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); -ga('create', 'UA-XXXXXXXXX', 'auto'); -ga('send', 'pageview'); -</script> - -``` - -For a complete list of the Script handles SEOmatic uses can be found in [ScriptContainer.php](https://github.com/nystudio107/craft-seomatic/blob/v3/src/seomatic-config/globalmeta/ScriptContainer.php) - -### Meta Object `.create()` - -To create a new meta object, you pass in a key:value array of the attributes to use when creating it: - -```twig -{% set linkTag = seomatic.link.create({ - "rel": "canonical", - "href": "https://nystudio107.com" - }) -%} -``` - -By default, newly created meta objects are added to the appropriate meta container, so they will be rendered on the page. Should you wish to create a meta object but _not_ have it added to a container, you can pass in an optional `false` parameter: - -```twig -{% set linkTag = seomatic.link.create({ - "rel": "canonical", - "href": "https://nystudio107.com" - }, false) -%} -``` - -### Meta Object Validation - -All meta objects can self-validate: -```twig -{% set myJsonLd = seomatic.jsonLd.create({ - 'type': 'Article', - 'name': 'Some Blog', - 'url': 'woopsie', -}) %} - -{% if myJsonLd.validate() %} - <p>Valid!</p> -{% else %} - <ul> - {% for param,errors in myJsonLd.errors %} - <li> - {{ param ~ " " }} - <ul> - {% for error in errors %} - <li> - {{ error ~ " " }} - </li> - {% endfor %} - </ul> - </li> - {% endfor %} - </ul> -{% endif %} -``` - -This will output: - -* URL - * Must be one of these types: URL - -Which tells you that the `url` parameter is invalid. The default validation just ensures that all of the properties are correct. - -You can also set the _scenario_ to display properties that Google requires/recommends: - -```twig -{% set myJsonLd = seomatic.jsonLd.create({ - 'type': 'Article', - 'name': 'Some Blog', - 'url': 'woopsie', -}) %} - -{% do myJsonLd.setScenario('google') %} - -{% if myJsonLd.validate() %} - <p>Valid!</p> -{% else %} - <ul> - {% for param,errors in myJsonLd.errors %} - <li> - {{ param ~ " " }} - <ul> - {% for error in errors %} - <li> - {{ error ~ " " }} - </li> - {% endfor %} - </ul> - </li> - {% endfor %} - </ul> -{% endif %} -``` - -This will output: - -* URL - * Must be one of these types: URL -* Image - * This property is recommended by Google. -* Author - * This property is required by Google. -* DatePublished - * This property is required by Google. -* Headline - * This property is required by Google. -* Publisher - * This property is required by Google. -* MainEntityOfPage - * This property is recommended by Google. -* DateModified - * This property is recommended by Google. - -If the site has `devMode` on, all of the meta objects are automatically validated as they are rendered, with the results displayed in the Yii Debug Toolbar. The Yii Debug Toolbar can be enabled in your account settings page. - -## JSON-LD Meta Object Functions `seomatic.jsonLd` - -* **`seomatic.jsonLd.get(META_HANDLE)`** Returns the JSON-LD meta object of the handle `META_HANDLE` or `null` if it is not found -* **`seomatic.jsonLd.create()`** Creates a JSON-LD meta object from an array of key-value properties. The `type` can be any of the [Schema.org](http://schema.org/docs/full.html) types. -* **`seomatic.jsonLd.add(META_OBJECT)`** Adds the `META_OBJECT` to the JSON-LD container to be rendered -* **`seomatic.jsonLd.render()`** Renders all of the JSON-LD meta objects to your template. This is only needed if you have turned off **Automatic Render** in Plugin Settings -* **`seomatic.jsonLd.container()`** Returns the container that holds an array of all of the JSON-LD meta objects - -### JSON-LD Meta Object Examples: - -Create a new [Article](http://schema.org/Article) JSON-LD meta object: -```twig -{% set myJsonLd = seomatic.jsonLd.create({ - 'type': 'Article', - 'name': 'Some Blog', - 'url': 'https://nystudio107.com/blog', -}) %} -``` - -Get the existing **MainEntityOfPage** as set in the Global SEO or Content SEO Control Panel section to modify it (schema.org: [mainEntityOfPage](http://schema.org/docs/datamodel.html#mainEntityBackground)): -```twig -{% set mainEntity = seomatic.jsonLd.get('mainEntityOfPage') %} -``` - -To add something to the existing **MainEntityOfPage** (in this case an [Offer](https://schema.org/Offer)), you can do it like this: -```twig -{% set mainEntity = seomatic.jsonLd.get('mainEntityOfPage') %} - -{% set offersJsonLd = seomatic.jsonLd.create({ - 'type': 'Offer', - 'name': 'Some prop', - 'url': 'Some url', -}, false) %} - -{% do mainEntity.offers(offersJsonLd) %} -``` - -The `, false` parameter tells it to create the JSON-LD object, but to _not_ automatically add it to the JSON-LD container. We do this because we don’t want it rendered on its own, we want it as part of the existing `mainEntityOfPage` JSON-LD object. - -Get the existing **BreadcrumbList** as generated automatically by SEOmatic to modify them (schema.org: [BreadcrumbList](http://schema.org/BreadcrumbList)): -```twig -{% set crumbs = seomatic.jsonLd.get('breadcrumbList') %} -``` - -Display the breadcrumbs on the page: - -```twig -{% set crumbList = seomatic.jsonLd.get('breadcrumbList').itemListElement %} -{% for crumb in crumbList %} - <a href="{{ crumb.item }}">{{ crumb.name }}</a> - {% if not loop.last %}»{% endif %} -{% endfor %} -``` - -To entirely replace the existing **BreadcrumbList** on a page: -```twig -{% set crumbList = seomatic.jsonLd.create({ - 'type': 'BreadcrumbList', - 'name': 'Breadcrumbs', - 'description': 'Breadcrumbs list', - 'itemListElement': [ - { - 'type': 'ListItem', - 'position': 1, - 'name': 'Homepage', - 'item': 'http://example.com/' - }, - { - 'type': 'ListItem', - 'position': 2, - 'name': 'Our blog', - 'item': 'http://example.com/blog/' - }, - { - 'type': 'ListItem', - 'position': 3, - 'name': 'Technology blogs', - 'item': 'http://example.com/blog/tech' - }, - ] -}) %} -``` - -If you need to create a schema element and propagate it, then use "key". -Propagate **SiteNavigationElement**: -```twig - {% for nav in navigationMenu %} - {% do seomatic.jsonLd.create({ - 'key': 'navItem' ~ nav.title, - 'type': 'SiteNavigationElement', - 'name': nav.title, - 'url': nav.url - }) %} - {% endfor %} -``` - -Get the existing **Identity** as set in the Site Settings Control Panel section to modify it: -```twig -{% set identity = seomatic.jsonLd.get('identity') %} -``` - -Let’s say you want to add a [Brand](https://schema.org/Brand) to the **Identity**, you’d do this: - -```twig -{% set identity = seomatic.jsonLd.get('identity') %} - -{% set brand = seomatic.jsonLd.create({ - 'type': 'Brand', - 'name': 'Some prop', - 'url': 'Some url', -}, false) %} - -{% do identity.brand(brand) %} -``` - -The `, false` parameter tells it to create the JSON-LD object, but to _not_ automatically add it to the JSON-LD container. We do this because we don’t want it rendered on its own, we want it as part of the existing `mainEntityOfPage` JSON-LD object. - -Get the existing **Creator** as set in the Site Settings Control Panel section to modify it: -```twig -{% set identity = seomatic.jsonLd.get('creator') %} -``` - -## Link Meta Object Functions `seomatic.link` - -* **`seomatic.link.get(META_HANDLE)`** Returns the Link meta object of the handle `META_HANDLE` or `null` if it is not found -* **`seomatic.link.create(CONFIG_ARRAY)`** Creates a Link meta object from an array of key-value properties -* **`seomatic.link.add(META_OBJECT)`** Adds the `META_OBJECT` to the Link container to be rendered -* **`seomatic.link.render()`** Renders all of the Link meta objects to your template. This is only needed if you have turned off **Automatic Render** in Plugin Settings -* **`seomatic.link.container()`** Returns the container that holds an array of all of the Link meta objects - -### Link Meta Object Examples: - -Change the `<link rel="canonical">`: -```twig -{% do seomatic.link.get("canonical").href("https://nystudio107.com") %} -``` - -Note that you can achieve the same result with: -```twig -{% do seomatic.meta.canonicalUrl("https://nystudio107.com") %} -``` - -...since the `canonicalUrl` populates the `<link rel="canonical">` Link meta object - -To check what `alternate` links are rendered: - -```twig - {% set alt = seomatic.link.get('alternate') %} - {% do alt.href([ - 'http://example.com', - 'http://example.com/es' - ]).hreflang([ - 'x-default', - 'es', - ]) - %} -``` - -## Script Meta Object Functions `seomatic.script` - -* **`seomatic.script.get(META_HANDLE)`** Returns the Script meta object of the handle `META_HANDLE` or `null` if it is not found -* **`seomatic.script.create()`** Creates a Script meta object from an array of key-value properties -* **`seomatic.script.add(META_OBJECT)`** Adds the `META_OBJECT` to the Script container to be rendered -* **`seomatic.script.render()`** Renders all of the Script meta objects to your template. This is only needed if you have turned off **Automatic Render** in Plugin Settings -* **`seomatic.script.container()`** Returns the container that holds an array of all of the Script meta objects - -### Script Meta Object Examples: - -Don’t include the Google Analytics script on the page: -```twig -{% do seomatic.script.get("googleAnalytics").include(false) %} -``` - -For a complete list of the Script handles SEOmatic uses can be found in [ScriptContainer.php](https://github.com/nystudio107/craft-seomatic/blob/v3/src/seomatic-config/globalmeta/ScriptContainer.php) - -## Tag Meta Object Functions `seomatic.tag` - -* **`seomatic.tag.get(META_HANDLE)`** Returns the Tag meta object of the handle `META_HANDLE` or `null` if it is not found -* **`seomatic.tag.create()`** Creates a Tag meta object from an array of key-value properties -* **`seomatic.tag.add(META_OBJECT)`** Adds the `META_OBJECT` to the Tag container to be rendered -* **`seomatic.tag.render()`** Renders all of the Tag meta objects to your template. This is only needed if you have turned off **Automatic Render** in Plugin Settings -* **`seomatic.tag.container()`** Returns the container that holds an array of all of the Tag meta objects - -### Tag Meta Object Examples: - -Change the `<meta name="twitter:title">`: - -```twig -{% do seomatic.tag.get("twitter:title").content("Hello, world") %} -``` - -Note that you can achieve the same result with: -```twig -{% do seomatic.meta.twitterTitle("Hello, world") %} -``` - -...since the `twitterTitle` populates the `<meta name="twitter:title">` Tag meta object by default. - -Let’s say you didn’t want Google et al to index a particular page or under certain conditions. You could do this: - -```twig -{% do seomatic.tag.get("robots").content("none") %} -``` - -Note that you can achieve the same result with: -```twig -{% do seomatic.meta.robots("none") %} -``` - -...since the `robots` populates the `<meta name="robots">` Tag meta object by default. - -You can have multiple OpenGraph tags of the same time, for example `og:image`: - -```twig -{% set ogImage = seomatic.tag.get('og:image') %} -{% do ogImage.content([ - 'http://example.com/image1.jpg', - 'http://example.com/image2.jpg', -]) %} -``` - -...and it’ll generate a tag for each image: -```html -<meta content="http://example.com/image2.jpg" property="og:image"> -<meta content="http://example.com/image1.jpg" property="og:image"> -``` - -## Title Meta Object Functions `seomatic.title` - -* **`seomatic.title.get(META_HANDLE)`** Returns the Title meta object of the handle `META_HANDLE` or `null` if it is not found -* **`seomatic.title.create()`** Creates a Title meta object from an array of key/value properties -* **`seomatic.title.add(META_OBJECT)`** Adds the `META_OBJECT` to the Title container to be rendered -* **`seomatic.title.render()`** Renders Title meta object to your template. This is only needed if you have turned off **Automatic Render** in Plugin Settings -* **`seomatic.title.container()`** Returns the container that holds an array with the Title meta object in it - -### Tag Meta Object Examples: - -Change the `<title>`: - -```twig -{% do seomatic.title.get("title").content("My page title") %} -``` - -Note that you can achieve the same result with: -```twig -{% do seomatic.meta.seoTitle("My page title") %} -``` - -...since the `seoTitle` populates the `<title">` Title meta object - -## Meta Containers - -Normally you don’t need to work with meta containers directly, but SEOmatic gives you access to them to. - -You can get the meta container for each type of meta object by doing: - -```twig -{% set jsonLdContainer = seomatic.jsonLd.container() %} -{% set linkContainer = seomatic.link.container() %} -{% set scriptContainer = seomatic.script.container() %} -{% set tagContainer = seomatic.tag.container() %} -{% set titleContainer = seomatic.title.container() %} -``` - -Then you can do things like tell an entire container to not render: - -```twig -{% set scriptContainer = seomatic.script.container() %} -{% do scriptContainer.include(false) %} -``` - -Or just: - -```twig -{% do seomatic.script.container().include(false) %} -``` - -Containers are also cached. Typically SEOmatic manages this cache for you, but should you wish to invalidate the cache manually, you can do so via: - -```twig -{% set scriptContainer = seomatic.script.container() %} -{% do scriptContainer.clearCache(true) %} -``` - -Or just: - -```twig -{% do seomatic.script.container().clearCache(true) %} -``` - -Brought to you by [nystudio107](https://nystudio107.com/) diff --git a/docs/docs/using/config-variables.md b/docs/docs/using/config-variables.md new file mode 100644 index 000000000..075c01de5 --- /dev/null +++ b/docs/docs/using/config-variables.md @@ -0,0 +1,13 @@ +# Config Variables + +The `seomatic.config` variables are the global plugin configuration variables set in the `config.php` file. You can copy the `config.php` file to the Craft `config/` directory as `seomatic.php` to change them in a multi-environment friendly way. + +* **`seomatic.config.pluginName`** – The public-facing name of the plugin. +* **`seomatic.config.renderEnabled`** – Should SEOmatic render metadata? +* **`seomatic.config.environment`** – The server environment, either `live`, `staging`, or `local`. +* **`seomatic.config.displayPreviewSidebar`** – Should SEOmatic display the SEO Preview sidebar? +* **`seomatic.config.displayAnalysisSidebar`** – Should SEOmatic display the SEO Analysis sidebar? +* **`seomatic.config.devModeTitlePrefix`** – If `devMode` is on, prefix the `<title>` with this string. +* **`seomatic.config.separatorChar`** – The separator character to use for the `<title>` tag. +* **`seomatic.config.maxTitleLength`** – The max number of characters in the `<title>` tag. +* **`seomatic.config.maxDescriptionLength`** – The max number of characters in the `<meta name="description">` tag. diff --git a/docs/docs/using/empty-coalesce-operator.md b/docs/docs/using/empty-coalesce-operator.md new file mode 100644 index 000000000..7872fca1d --- /dev/null +++ b/docs/docs/using/empty-coalesce-operator.md @@ -0,0 +1,55 @@ +# Empty Coalesce Operator + +SEOmatic adds the `???` operator to Twig that will return the first thing that is defined, not null, and not empty. This allows you to safely "cascade" empty text/image values. + +This can be used both in Twig templates, and in any of SEOmatic’s fields, which are parsed as Twig templates as well. + +This is particularly useful for SEO fields (both text & images), where you’re dealing with a number of fallback/default values that may or may not exist, and may or may not be empty. + +The `???` Empty Coalescing operator is similar to the `??` [null coalescing operator](https://nystudio107.com/blog/handling-errors-gracefully-in-craft-cms#coalescing-the-night-away), but also ignores empty strings (`""`) and empty arrays (`[]`) as well. + +The problem is that to [code defensively](https://nystudio107.com/blog/handling-errors-gracefully-in-craft-cms#defensive-coding-in-twig), you want to make sure that all of these things are defined, not null, and also have a value. So you end up with something like: + +```twig +{% if entry is defined and + entry.description is defined and + entry.description | length +%} + {% set description = entry.description %} +{% elseif category is defined and + category.description is defined and + category.description | length +%} + {% set description = category.description %} +{% else %} + {% set description = global.description %} +{% endif %} +``` + +This gets quite verbose and quite tiresome quickly. There are other ways you can do something similar, such as using using the `?:` [ternary operator](https://twig.symfony.com/doc/2.x/templates.html#other-operators) and the [default filter](https://twig.symfony.com/doc/2.x/filters/default.html), but this too gets a bit unwieldy. + +You can use the [null coalescing operator](https://nystudio107.com/blog/handling-errors-gracefully-in-craft-cms#coalescing-the-night-away), which picks the first thing that is defined and not null: + +```twig +{% set description = entry.description ?? + category.description ?? + global.description %} +``` + +But the problem here is it’ll _just_ pick the first thing that is defined and not `null`. So if `entry.description` is an empty string, it’ll use that, which is rarely what you want. + +Enter the Empty Coalescing operator, and it becomes: + +```twig +{% set description = entry.description ??? + category.description ??? + global.description %} +``` + +Now `description` will be set to the first thing that is defined, not null, _and_ not empty. + +Nice. Simple. Readable. And most importantly, likely the result you’re expecting. + +The examples presented here use the `???` operator for SEOmatic functions, but you can use them for anything you like. + +We’ve submitted a [pull request](https://github.com/twigphp/Twig/pull/2787) in the hopes of making this part of Twig core. This functionality is also available separately in the [Empty Coalesce](https://nystudio107.com/plugins/empty-coalesce) plugin. diff --git a/docs/docs/using/helper-functions.md b/docs/docs/using/helper-functions.md new file mode 100644 index 000000000..d33992e8b --- /dev/null +++ b/docs/docs/using/helper-functions.md @@ -0,0 +1,25 @@ +# Helper Functions + +The `seomatic.helper` functions are utilities that can help with pagination, previews, and preparing text and Assets. + +* **`seomatic.helper.paginate(PAGEINFO)`** – Given the `PAGEINFO` variable from the `{% paginate %}` tag as [described here](https://craftcms.com/docs/3.x/dev/tags.html#paginate), this will properly set the `canonicalUrl`, as well as adding the `<link rel='prev'>` and `<link rel='next'>` tags for you. +* **`seomatic.helper.isPreview()`** – Returns `true` if the current request is a preview, `false` if it is not. +* **`seomatic.helper.sameAsByHandle(HANDLE)`** – Returns an array of information about the **Same As URLs** site specified in `HANDLE`. Here’s an example of the information in the returned array: + ```php + array (size=4) + 'siteName' => string 'Twitter' + 'handle' => string 'twitter' + 'url' => string 'https://twitter.com/nystudio107' + 'account' => string 'nystudio107' + ``` +* **`seomatic.helper.truncate(TEXT, LENGTH, SUBSTR)`** – Truncates the `TEXT` to a given `LENGTH`. If `SUBSTR` is provided, and truncating occurs, the string is further truncated so that the substring may be appended without exceeding the desired length. +* **`seomatic.helper.truncateOnWord(TEXT, LENGTH, SUBSTR)`** – Truncates the `TEXT` to a given `LENGTH`, while ensuring that it does not split words. If `SUBSTR` is provided, and truncating occurs, the string is further truncated so that the substring may be appended without exceeding the desired length. +* **`seomatic.helper.getLocalizedUrls(URI, SITE_ID)`** – Return a list of localized URLs for a given `URI` that are in the `SITE_ID` site’s group. Both `URI` and `SITE_ID` are optional, and will use the current request’s `URI` and the current site’s `SITE_ID` if omitted. +* **`seomatic.helper.loadMetadataForUri(URI, SITE_ID)`** – Load the appropriate meta containers for the given `URI` and optional `SITE_ID`. +* **`seomatic.helper.sitemapIndexForSiteId(SITE_ID)`** – Get the URL to the `SITE_ID`s sitemap index +* **`seomatic.helper.extractTextFromField(FIELD)`** – Extract plain text from a PlainText, Redactor, CKEdtior, Tags, Matrix, or Neo field. +* **`seomatic.helper.extractKeywords(TEXT, LIMIT)`** – Extract up to `LIMIT` most important keywords from `TEXT`. +* **`seomatic.helper.extractSummary(TEXT)`** – Extract the most important 3 sentences from `TEXT`. +* **`seomatic.helper.socialTransform(ASSET, TRANSFORMNAME)`** – Transform the `ASSET` (either an Asset or an Asset ID) for social media sites in `TRANSFORMNAME`; valid values are `base`, `facebook`, `twitter-summary`, and `twitter-large`. +* **`seomatic.helper.seoFileLink(FILE_URL, ROBOTS, CANONICAL, INLINE)`** – Generates a link to a local or remote file that allows you to set the `X-Robots-Tag` header via `ROBOTS` (defaults to `all`) and `Link` canonical header via `CANONICAL` (defaults to `''`) as per [Advanced rel="canonical" HTTP Headers](https://moz.com/blog/how-to-advanced-relcanonical-http-headers). `INLINE` controls whether the file will be displayed inline or downloaded. If any values are empty `''`, the headers will not be included. +* **`seomatic.helper.sanitizeUserInput(TEXT)`** – Sanitize the `TEXT` by decoding any HTML Entities, URL decoding the text, then removing any newlines, stripping HTML tags, stripping Twig tags, and changing single {}'s into ()'s. diff --git a/docs/docs/using/index.md b/docs/docs/using/index.md new file mode 100644 index 000000000..2d54df096 --- /dev/null +++ b/docs/docs/using/index.md @@ -0,0 +1,331 @@ +--- +title: Twig Templating +description: Using SEOmatic documentation for the SEOmatic plugin. The SEOmatic plugin facilitates modern SEO best practices & implementation for Craft CMS 3. +--- + +# Twig Templating + +SEOmatic can work fully without any Twig templating code at all. However, it provides a robust API that you can tap into from your Twig templates should you desire to do so. + +SEOmatic makes a global `seomatic` variable available in your Twig templates that allows you to work with the SEOmatic variables and functions. + +## A Word About `{% cache %}` Tags + +If you use Craft’s built-in `{% cache %}` tags, ensure that you don’t have any of SEOmatic’s tags (listed below) inside of them. The reason is that SEOmatic dynamically generates the tags on each request, using its own caching system for performance reasons. + +When you surround any Twig code in a `{% cache %}` tag, that code will only ever be executed once. On subsequent runs, the HTML result of what was inside of the `{% cache %}` tag is just returned, and the Twig code inside of it is never executed. + +For more information on how the `{% cache %}` tag works, see the [The Craft {% cache %} Tag In-Depth](https://nystudio107.com/blog/the-craft-cache-tag-in-depth) article. + +## SEOmatic Variables + +All of the SEOmatic variables can be accessed as you would any normal Twig variable: + +```twig +{{ seomatic.meta.seoTitle }} +``` +Or +```twig +{% set title = seomatic.meta.seoTitle %} +``` + +They can also be changed by passing in a value with the Twig `{% do %}` syntax: + +```twig +{% do seomatic.meta.seoTitle("Some Title") %} +``` +Or +```twig +{% do seomatic.meta.seoDescription( + "This is my description. There are many like it, but this one is mine." +) %} +``` + +You can also set multiple variables at once using array syntax: + +```twig +{% do seomatic.meta.setAttributes({ + "seoTitle": "Some Title", + "seoDescription": "This is my description. There are many like it..." +}) %} +``` + +Or you can chain them together: + +```twig +{% do seomatic.meta + .seoTitle("Some Title") + .seoDescription("This is my description. There are many like it...") %} +``` + +These do the same thing, so use whichever you prefer. + +You can set SEOmatic variables anywhere in your templates, even in sub-templates you `include` from other templates. This works because SEOmatic dynamically injects the meta tags, scripts, links, and JSON-LD into your page after the template is done rendering. + +SEOmatic variables can also reference other SEOmatic variables using single-bracket syntax: + +```twig +{% do seomatic.meta.seoDescription("{seomatic.meta.seoTitle}") %} +``` + +You can also reference `entry`, `category`, or `product` Craft variables, if they are present in your template: + +```twig +{% do seomatic.meta.seoTitle("{entry.title}") %} +``` + +Or + +```twig +{% do seomatic.meta.seoTitle("{category.title}") %} +``` + +But most of the time, you’ll want to just set them like you would regular variables: + +```twig +{% do seomatic.meta.seoTitle(entry.title) %} +``` + +Or + +```twig +{% do seomatic.meta.seoTitle(category.title) %} +``` + +...so that there is no additional Twig parsing that needs to be done. + +SEOmatic variables are also parsed for aliases, and in Craft 3.1, for [environment variables](https://craftcms.com/docs/3.x/config/#control-panel-settings) as well. + +There may be occasions where you want to output the final parsed value of an SEOmatic variable on the front end. You can do that via `seomatic.meta.parsedValue()`. For example: + +```twig +{{ seomatic.meta.parsedValue('seoDescription') }} +``` + +This will output the final parsed value of the `seomatic.meta.seoDescription` variable. + +This parsing is done automatically by SEOmatic just before the meta information is added to your page. + +## Tags & Containers + +All of the SEOmatic tags, links, scripts, title, and JSON-LD are meta objects that have their values set from the `seomatic.meta` variables. + +These meta objects know what properties they should have, and can self-validate. If `devMode` is on, you can check the Yii2 Debug Toolbar’s Log to see any validation warnings or errors with your tags. + +All of SEOmatic’s meta objects are stored in containers, and they can be accessed and manipulated directly. You can even dynamically create new tags via Twig at template render time. + +All of the meta object (tags, scripts, links, title, and JSON-LD) have the same API to make it easy to use. + +### Meta Object `.get()` + +```twig +{% set descriptionTag = seomatic.tag.get("description") %} +``` + +...will return the `<meta name="description">` meta object to you in `descriptionTag`. + +### Meta Object Properties + +You can access meta object properties just like you can any Twig variable: + +```twig +{{ descriptionTag.content }} +``` + +Or + +```twig +{% set myContent = seomatic.meta.seoTitle %} +``` + +They can also be changed by passing in a value with the Twig `{% do %}` syntax: + +```twig +{% do descriptionTag.content("Some description") %} +``` + +All meta objects also have an `include` property that determines whether or not they should be included on your web page: + +```twig +{% do descriptionTag.include(false) %} +``` + +You could also chain this together in a single line: + +```twig +{% do seomatic.tag.get("description").include(false) %} +``` + +And you can set multiple attributes at once using an array syntax: + +```twig +{% do seomatic.tag.get("description").setAttributes({ + "content": "Some Description", + "include": false +}) %} +``` + +Which is the same as doing: + +```twig +{% do seomatic.tag.get("description") + .content("Some Description") + .include(false) %} +``` + +So use whatever you like better. + +### Extra Tag Attributes + +Should you need to add extra tag attributes to a Meta Item, such as the various `data-` tags, you can do that with the `.tagAttrs` property: + +```twig +{% set tag = seomatic.tag.get('description') %} +{% if tag | length %} + {% do tag.tagAttrs({ + "data-type": "whatever", + }) %} +{% endif %} +``` + +This will generate a tag like this: + +```html +<meta name="description" content="My description!" data-type="whatever"> +``` + +A more practical example would be using [Klaro](https://heyklaro.com/) to manage Cookie consent, etc. to not activate Google Analytics until consent is given: + +```twig +{% set tag = seomatic.script.get('googleAnalytics') %} +{% if tag | length %} + {% do tag.tagAttrs({ + "type": "text/plain", + "data-type": "application/javascript", + "data-name": "google-analytics", + }) %} +{% endif %} +``` + +Then when the page renders in production, it’ll look like this: +```html +<script type="text/plain" data-name="google-analytics" data-type="application/javascript">(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ +(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), +m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) +})(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); +ga('create', 'UA-XXXXXXXXX', 'auto'); +ga('send', 'pageview'); +</script> +``` + +See [ScriptContainer.php](https://github.com/nystudio107/craft-seomatic/blob/v4/src/seomatic-config/globalmeta/ScriptContainer.php) for a complete list of the script handles SEOmatic uses. + +### Meta Object `.create()` + +To create a new meta object, you pass in a key:value array of the attributes to use when creating it: + +```twig +{% set linkTag = seomatic.link.create({ + "rel": "canonical", + "href": "https://nystudio107.com" +}) %} +``` + +By default, newly created meta objects are added to the appropriate meta container, so they will be rendered on the page. Should you wish to create a meta object but _not_ have it added to a container, you can pass in an optional `false` parameter: + +```twig +{% set linkTag = seomatic.link.create({ + "rel": "canonical", + "href": "https://nystudio107.com" +}, false) %} +``` + +### Meta Object Validation + +All meta objects can self-validate: + +```twig +{% set myJsonLd = seomatic.jsonLd.create({ + 'type': 'Article', + 'name': 'Some Blog', + 'url': 'woopsie', +}) %} + +{% if myJsonLd.validate() %} + <p>Valid!</p> +{% else %} + <ul> + {% for param,errors in myJsonLd.errors %} + <li> + {{ param ~ " " }} + <ul> + {% for error in errors %} + <li> + {{ error ~ " " }} + </li> + {% endfor %} + </ul> + </li> + {% endfor %} + </ul> +{% endif %} +``` + +This will output: + +* URL + * Must be one of these types: URL + +Which tells you that the `url` parameter is invalid. The default validation just ensures that all of the properties are correct. + +You can also set the _scenario_ to display properties that Google requires/recommends: + +```twig +{% set myJsonLd = seomatic.jsonLd.create({ + 'type': 'Article', + 'name': 'Some Blog', + 'url': 'woopsie', +}) %} + +{% do myJsonLd.setScenario('google') %} + +{% if myJsonLd.validate() %} + <p>Valid!</p> +{% else %} + <ul> + {% for param,errors in myJsonLd.errors %} + <li> + {{ param ~ " " }} + <ul> + {% for error in errors %} + <li> + {{ error ~ " " }} + </li> + {% endfor %} + </ul> + </li> + {% endfor %} + </ul> +{% endif %} +``` + +This will output: + +* URL + * Must be one of these types: URL +* Image + * This property is recommended by Google. +* Author + * This property is required by Google. +* DatePublished + * This property is required by Google. +* Headline + * This property is required by Google. +* Publisher + * This property is required by Google. +* MainEntityOfPage + * This property is recommended by Google. +* DateModified + * This property is recommended by Google. + +If the site has `devMode` on, all of the meta objects are automatically validated as they are rendered, with the results displayed in the Yii Debug Toolbar. The Yii Debug Toolbar can be enabled in your account settings page. diff --git a/docs/docs/using/json-ld-meta.md b/docs/docs/using/json-ld-meta.md new file mode 100644 index 000000000..9bd904608 --- /dev/null +++ b/docs/docs/using/json-ld-meta.md @@ -0,0 +1,126 @@ +# JSON-LD Meta Object Functions + +The `seomatic.jsonLd` functions make it easier to create, manipulate, and render valid JSON-LD microdata. + +* **`seomatic.jsonLd.get(META_HANDLE)`** – Returns the JSON-LD meta object of the handle `META_HANDLE` or `null` if it is not found. +* **`seomatic.jsonLd.create()`** – Creates a JSON-LD meta object from an array of key-value properties. The `type` can be any of the [Schema.org](http://schema.org/docs/full.html) types. +* **`seomatic.jsonLd.add(META_OBJECT)`** – Adds the `META_OBJECT` to the JSON-LD container to be rendered. +* **`seomatic.jsonLd.render()`** – Renders all of the JSON-LD meta objects to your template. Only necessary if you’ve disabled **Automatic Render** in [Plugin Settings](../configuring/plugin-settings.md). +* **`seomatic.jsonLd.container()`** – Returns the container that holds an array of all of the JSON-LD meta objects. + +## JSON-LD Meta Object Examples: + +Create a new [Article](http://schema.org/Article) JSON-LD meta object: + +```twig +{% set myJsonLd = seomatic.jsonLd.create({ + 'type': 'Article', + 'name': 'Some Blog', + 'url': 'https://nystudio107.com/blog', +}) %} +``` + +Get the existing **MainEntityOfPage** as set in the Global SEO or Content SEO control panel section to modify it (schema.org: [mainEntityOfPage](http://schema.org/docs/datamodel.html#mainEntityBackground)): +```twig +{% set mainEntity = seomatic.jsonLd.get('mainEntityOfPage') %} +``` + +To add something to the existing **MainEntityOfPage** (in this case an [Offer](https://schema.org/Offer)), you can do it like this: +```twig +{% set mainEntity = seomatic.jsonLd.get('mainEntityOfPage') %} + +{% set offersJsonLd = seomatic.jsonLd.create({ + 'type': 'Offer', + 'name': 'Some prop', + 'url': 'Some url', +}, false) %} + +{% do mainEntity.offers(offersJsonLd) %} +``` + +The `, false` parameter tells it to create the JSON-LD object, but to _not_ automatically add it to the JSON-LD container. We do this because we don’t want it rendered on its own, we want it as part of the existing `mainEntityOfPage` JSON-LD object. + +Get the existing **BreadcrumbList** as generated automatically by SEOmatic to modify them (schema.org: [BreadcrumbList](http://schema.org/BreadcrumbList)): +```twig +{% set crumbs = seomatic.jsonLd.get('breadcrumbList') %} +``` + +Display the breadcrumbs on the page: + +```twig +{% set crumbList = seomatic.jsonLd.get('breadcrumbList').itemListElement %} +{% for crumb in crumbList %} + <a href="{{ crumb.item }}">{{ crumb.name }}</a> + {% if not loop.last %}»{% endif %} +{% endfor %} +``` + +To replace the existing **BreadcrumbList** on a page: + +```twig +{% set crumbList = seomatic.jsonLd.create({ + 'type': 'BreadcrumbList', + 'name': 'Breadcrumbs', + 'description': 'Breadcrumbs list', + 'itemListElement': [ + { + 'type': 'ListItem', + 'position': 1, + 'name': 'Homepage', + 'item': 'http://example.com/' + }, + { + 'type': 'ListItem', + 'position': 2, + 'name': 'Our blog', + 'item': 'http://example.com/blog/' + }, + { + 'type': 'ListItem', + 'position': 3, + 'name': 'Technology blogs', + 'item': 'http://example.com/blog/tech' + }, + ] +}) %} +``` + +Use `key` to create a schema element and propagate it. Propagate **SiteNavigationElement**: + +```twig +{% for nav in navigationMenu %} + {% do seomatic.jsonLd.create({ + 'key': 'navItem' ~ nav.title, + 'type': 'SiteNavigationElement', + 'name': nav.title, + 'url': nav.url + }) %} +{% endfor %} +``` + +Get the existing **Identity** as set in the Site Settings control panel section to modify it: + +```twig +{% set identity = seomatic.jsonLd.get('identity') %} +``` + +Let’s say you want to add a [Brand](https://schema.org/Brand) to the **Identity**, you’d do this: + +```twig +{% set identity = seomatic.jsonLd.get('identity') %} + +{% set brand = seomatic.jsonLd.create({ + 'type': 'Brand', + 'name': 'Some prop', + 'url': 'Some url', +}, false) %} + +{% do identity.brand(brand) %} +``` + +The `, false` parameter tells it to create the JSON-LD object, but to _not_ automatically add it to the JSON-LD container. We do this because we don’t want it rendered on its own, we want it as part of the existing `mainEntityOfPage` JSON-LD object. + +Get the existing **Creator** as set in the Site Settings control panel section to modify it: +```twig +{% set identity = seomatic.jsonLd.get('creator') %} +``` diff --git a/docs/docs/using/link-meta.md b/docs/docs/using/link-meta.md new file mode 100644 index 000000000..7b9ca9958 --- /dev/null +++ b/docs/docs/using/link-meta.md @@ -0,0 +1,36 @@ +# Link Meta Object Functions + +The `seomatic.link` functions are for working with `<link>` tags. + +* **`seomatic.link.get(META_HANDLE)`** – Returns the Link meta object of the handle `META_HANDLE` or `null` if it is not found. +* **`seomatic.link.create(CONFIG_ARRAY)`** – Creates a Link meta object from an array of key-value properties. +* **`seomatic.link.add(META_OBJECT)`** – Adds the `META_OBJECT` to the Link container to be rendered. +* **`seomatic.link.render()`** – Renders all of the Link meta objects to your template. Only necessary if you’ve disabled **Automatic Render** in [Plugin Settings](../configuring/plugin-settings.md). +* **`seomatic.link.container()`** – Returns the container that holds an array of all of the Link meta objects. + +## Link Meta Object Examples: + +Change the `<link rel="canonical">`: +```twig +{% do seomatic.link.get("canonical").href("https://nystudio107.com") %} +``` + +Note that you can achieve the same result with: +```twig +{% do seomatic.meta.canonicalUrl("https://nystudio107.com") %} +``` + +...since the `canonicalUrl` populates the `<link rel="canonical">` Link meta object + +To check what `alternate` links are rendered: + +```twig +{% set alt = seomatic.link.get('alternate') %} +{% do alt.href([ + 'http://example.com', + 'http://example.com/es' +]).hreflang([ + 'x-default', + 'es', +]) %} +``` diff --git a/docs/docs/using/meta-containers.md b/docs/docs/using/meta-containers.md new file mode 100644 index 000000000..3bc03a51e --- /dev/null +++ b/docs/docs/using/meta-containers.md @@ -0,0 +1,39 @@ +# Meta Containers + +Normally you don’t need to work with meta containers directly, but SEOmatic gives you access to them too. + +You can get the meta container for each type of meta object by doing: + +```twig +{% set jsonLdContainer = seomatic.jsonLd.container() %} +{% set linkContainer = seomatic.link.container() %} +{% set scriptContainer = seomatic.script.container() %} +{% set tagContainer = seomatic.tag.container() %} +{% set titleContainer = seomatic.title.container() %} +``` + +Then you can do things like tell an entire container to not render: + +```twig +{% set scriptContainer = seomatic.script.container() %} +{% do scriptContainer.include(false) %} +``` + +Or just: + +```twig +{% do seomatic.script.container().include(false) %} +``` + +Containers are also cached. Typically SEOmatic manages this cache for you, but should you wish to invalidate the cache manually, you can do so via: + +```twig +{% set scriptContainer = seomatic.script.container() %} +{% do scriptContainer.clearCache(true) %} +``` + +Or just: + +```twig +{% do seomatic.script.container().clearCache(true) %} +``` diff --git a/docs/docs/using/meta-variables.md b/docs/docs/using/meta-variables.md new file mode 100644 index 000000000..a276f7861 --- /dev/null +++ b/docs/docs/using/meta-variables.md @@ -0,0 +1,41 @@ +# Meta Variables + +The `seomatic.meta` variable contains all of the meta variables that control the SEO that will be rendered on the site. They are pre-populated from your settings and content in the control panel, but you can change them as you see fit. + +## General Variables + +* **`seomatic.meta.mainEntityOfPage`** – The [schema.org](http://schema.org/docs/full.html) type that represents the main entity of the page. +* **`seomatic.meta.seoTitle`** – The title that is used for the `<title>` tag. +* **`seomatic.meta.siteNamePosition`** – controls where the `seomatic.site.siteName` appears relative to the `seomatic.meta.seoTitle` in the `<title>` tag. Valid values are `before`, `after`, or `none`. +* **`seomatic.meta.seoDescription`** – The description that is used for the `<meta name="description">` tag. +* **`seomatic.meta.seoKeywords`** – The keywords that are used for the `<meta name="keywords">` tag. Note that this tag is _ignored_ by Google. +* **`seomatic.meta.seoImage`** – The image URL that is used for SEO image. +* **`seomatic.meta.seoImageWidth`** – The width of the SEO image. +* **`seomatic.meta.seoImageHeight`** – The height of the SEO image. +* **`seomatic.meta.seoImageDescription`** – A textual description of the SEO image. +* **`seomatic.meta.canonicalUrl`** – The URL used for the `<link rel="canonical">` tag. By default, this is set to `{seomatic.helper.safeCanonicalUrl()}` or `{entry.url}`/`{category.url}`/`{product.url}`, but you can change it as you see fit. This variable is also used to set the `link rel="canonical"` HTTP header. +* **`seomatic.meta.robots`** – The setting used for the `<meta name="robots">` tag that controls how bots should index your site. This variable is also used to set the `X-Robots-Tag` HTTP header. [Learn More](https://developers.google.com/search/reference/robots_meta_tag) + +## Facebook Open Graph Variables + +* **`seomatic.meta.ogType`** – The value used for the `<meta property="og:type">` tag, such as `website` or `article`. +* **`seomatic.meta.ogTitle`** – The value used for the `<meta property="og:title">` tag. This defaults to `{seomatic.meta.seoTitle}`. +* **`seomatic.meta.ogSiteNamePosition`** – controls where the `seomatic.site.siteName` appears relative to the `seomatic.meta.ogTitle` in the `<meta property="og:title">` tag. Valid values are `before`, `after`, or `none`. +* **`seomatic.meta.ogDescription`** – The value used for the `<meta property="og:description">` tag. This defaults to `{seomatic.meta.seoDescription}`. +* **`seomatic.meta.ogImage`** – The value used for the `<meta property="og:image">` tag. This defaults to `{seomatic.meta.seoImage}`. +* **`seomatic.meta.ogImageWidth`** – The width of the ogImage. This defaults to `{seomatic.meta.seoImageWidth}`. +* **`seomatic.meta.ogImageHeight`** – The height of the ogImage. This defaults to `{seomatic.meta.seoImageHeight}`. +* **`seomatic.meta.ogImageDescription`** – The value used for the `<meta property="og:image:alt">` tag. This defaults to `{seomatic.meta.seoImageDescription}`. + +## Twitter Variables + +* **`seomatic.meta.twitterCard`** – The value used for the `<meta name="twitter:card">` tag, such as `summary` or `summary_large_image`. +* **`seomatic.meta.twitterCreator`** – The value used for the `<meta name="twitter:creator">` tag. This defaults to `{seomatic.site.twitterHandle}`. +* **`seomatic.meta.twitterTitle`** – The value used for the `<meta name="twitter:title">` tag. This defaults to `{seomatic.meta.seoTitle}`. +* **`seomatic.meta.twitterSiteNamePosition`** – controls where the `seomatic.site.siteName` appears relative to the `seomatic.meta.twitterTitle` in the `<meta name="twitter:title">` tag. Valid values are `before`, `after`, or `none`. +* **`seomatic.meta.twitterDescription`** – The value used for the `<meta name="twitter:description">` tag. This defaults to `{seomatic.meta.seoDescription}`. +* **`seomatic.meta.twitterImage`** – The value used for the `<meta name="twitter:image">` tag. This defaults to `{seomatic.meta.seoImage}`. +* **`seomatic.meta.twitterImageWidth`** – The width of the Twitter image. This defaults to `{seomatic.meta.seoImageWidth}`. +* **`seomatic.meta.twitterImageHeight`** – The height of the Twitter image. This defaults to `{seomatic.meta.seoImageHeight}`. +* **`seomatic.meta.twitterImageDescription`** – The value used for the `<meta name="twitter:image:alt">` tag. This defaults to `{seomatic.meta.seoImageDescription}`. + diff --git a/docs/docs/using/pagination.md b/docs/docs/using/pagination.md new file mode 100644 index 000000000..28006a8af --- /dev/null +++ b/docs/docs/using/pagination.md @@ -0,0 +1,35 @@ +# Pagination & SEO + +If you are using paginated entries, you’ll want to add some additional markup to your templates to make Google et al aware of this. Fortunately, SEOmatic makes that easy, you simply do: + +```twig +{% do seomatic.helper.paginate(PAGEINFO) %} +``` + +The `PAGEINFO` here is the variable from the `{% paginate %}` tag as [described here](https://craftcms.com/docs/3.x/dev/tags.html#paginate), this will properly set the `canonicalUrl`, as well as adding the `<link rel='prev'>` and `<link rel='next'>` tags for you. + +A complete example (following [Craft’s {% paginate %} documentation](https://craftcms.com/docs/3.x/dev/tags.html#paginate)) might look like this: + +```twig{4} +{% paginate craft.entries() + .section('blog') + .limit(10) as pageInfo, pageEntries %} +{% do seomatic.helper.paginate(pageInfo) %} + +{% for entry in pageEntries %} + <article> + <h1>{{ entry.title }}</h1> + {{ entry.body }} + </article> +{% endfor %} + +{% if pageInfo.prevUrl %} + <a href="{{ pageInfo.prevUrl }}">Previous Page</a> +{% endif %} + +{% if pageInfo.nextUrl %} + <a href="{{ pageInfo.nextUrl }}">Next Page</a> +{% endif %} +``` + +More info: [SEO Guide to Google Webmaster Recommendations for Pagination](https://moz.com/blog/seo-guide-to-google-webmaster-recommendations-for-pagination) diff --git a/docs/docs/using/script-meta.md b/docs/docs/using/script-meta.md new file mode 100644 index 000000000..098efcc1f --- /dev/null +++ b/docs/docs/using/script-meta.md @@ -0,0 +1,19 @@ +# Script Meta Object Functions + +The `seomatic.script` functions are for working with `<script>` tags. + +* **`seomatic.script.get(META_HANDLE)`** – Returns the Script meta object of the handle `META_HANDLE` or `null` if it is not found. +* **`seomatic.script.create()`** – Creates a Script meta object from an array of key-value properties. +* **`seomatic.script.add(META_OBJECT)`** – Adds the `META_OBJECT` to the Script container to be rendered. +* **`seomatic.script.render()`** – Renders all of the Script meta objects to your template. Only necessary if you’ve disabled **Automatic Render** in [Plugin Settings](../configuring/plugin-settings.md). +* **`seomatic.script.container()`** – Returns the container that holds an array of all of the Script meta objects. + +## Script Meta Object Examples: + +Don’t include the Google Analytics script on the page: + +```twig +{% do seomatic.script.get("googleAnalytics").include(false) %} +``` + +For a complete list of the Script handles SEOmatic uses can be found in [ScriptContainer.php](https://github.com/nystudio107/craft-seomatic/blob/v4/src/seomatic-config/globalmeta/ScriptContainer.php) diff --git a/docs/docs/using/site-variables.md b/docs/docs/using/site-variables.md new file mode 100644 index 000000000..4faf38f3d --- /dev/null +++ b/docs/docs/using/site-variables.md @@ -0,0 +1,96 @@ +# Site Variables + +The `seomatic.site` variable has site-wide settings that are available on a per-site basis for multi-site setups. + +* **`seomatic.site.siteName`** – The name of the site. +* **`seomatic.site.twitterHandle`** – The site Twitter handle. +* **`seomatic.site.facebookProfileId`** – The site Facebook profile ID. +* **`seomatic.site.facebookAppId`** – The site Facebook app ID. +* **`seomatic.site.googleSiteVerification`** – The Google Site Verification code. +* **`seomatic.site.bingSiteVerification`** – The Bing Site Verification code. +* **`seomatic.site.pinterestSiteVerification`** – The Pinterest Site Verification code. +* **`seomatic.site.sameAsLinks`** – Array of links for Same As... Sites, indexed by the handle. So for example you could access the site Facebook URL via `seomatic.site.sameAsLinks["facebook"]["url"]`. These links are used to generate the `<meta property="og:same_as">` tags, and are also used in the `sameAs` property in the `mainEntityOfPage` JSON-LD. +* **`seomatic.site.siteLinksSearchTarget`** – Google Site Links search target. [Learn More](https://developers.google.com/search/docs/data-types/sitelinks-searchbox) +* **`seomatic.site.siteLinksQueryInput`** – Google Site Links query input. [Learn More](https://developers.google.com/search/docs/data-types/sitelinks-searchbox) + +## Site Identity Variables + +The `seomatic.site.identity` variable is used to create [JSON-LD Structured Data](https://developers.google.com/search/docs/guides/intro-structured-data) that _can_ appear as [Rich Snippets](https://developers.google.com/search/docs/guides/mark-up-content) on Google Search Engine Results Pages (SERP). JSON-LD Structured Data helps computers understand context and relationships, and is also read by other social media sites and apps. + +The `seomatic.site.identity` encapsulates all of the information associated with the owner of the site. + +* **`seomatic.site.identity.siteType`** – The schema.org general type. +* **`seomatic.site.identity.siteSubType`** – The schema.org sub-type. +* **`seomatic.site.identity.siteSpecificType`** – The schema.org specific type. +* **`seomatic.site.identity.computedType`** – The computed most specific schema.org type. +* **`seomatic.site.identity.genericName`** – The name of the entity that owns the site. +* **`seomatic.site.identity.genericAlternateName`** – An alternate or nickname for the entity that owns the site. +* **`seomatic.site.identity.genericDescription`** – A description of the entity that owns the site. +* **`seomatic.site.identity.genericUrl`** – A URL for the entity that owns the site. +* **`seomatic.site.identity.genericImage`** – A URL to an image or logo that represents the entity that owns the site. The image must be in JPG, PNG, or GIF format. +* **`seomatic.site.identity.genericImageWidth`** – The width of the entity image. +* **`seomatic.site.identity.genericImageHeight`** – The height of the entity image. +* **`seomatic.site.identity.genericImageIds`** – Asset ID array for the entity image. +* **`seomatic.site.identity.genericTelephone`** – The primary contact telephone number for the entity that owns the site. +* **`seomatic.site.identity.genericEmail`** – The primary contact email address for the entity that owns the site. +* **`seomatic.site.identity.genericStreetAddress`** – The street address of the entity that owns the website, for example: 123 Main Street. +* **`seomatic.site.identity.genericAddressLocality`** – Locality of the entity that owns the website, for example: Portchester. +* **`seomatic.site.identity.genericAddressRegion`** – The region of the entity that owns the website, for example: New York or NY. +* **`seomatic.site.identity.genericPostalCode`** – The postal code of the entity that owns the website, for example: 14580 +* **`seomatic.site.identity.genericAddressCountry`** – The country in which the entity that owns the site is located, for example: US +* **`seomatic.site.identity.genericGeoLatitude`** – The latitude of the location of the entity that owns the website, for example: -120.5436367 +* **`seomatic.site.identity.genericGeoLongitude`** – The longitude of the location of the entity that owns the website, for example: 80.6033588 +* **`seomatic.site.identity.personGender`** – Only for entities of the type Person, the gender of the person. +* **`seomatic.site.identity.personBirthPlace`** – Only for entities of the type Person, the place where the person was born. +* **`seomatic.site.identity.organizationDuns`** – Only for entities of the type Organization, the DUNS (Dunn & Bradstreet) number of the organization that owns the site. +* **`seomatic.site.identity.organizationFounder`** – Only for entities of the type Organization, the name of the founder of the organization. +* **`seomatic.site.identity.organizationFoundingDate`** – Only for entities of the type Organization, the date the organization/company/restaurant was founded in [ISO 8601 date format](http://schema.org/Date), for example: `2018-03-26`. +* **`seomatic.site.identity.organizationFoundingLocation`** – Only for entities of the type Organization, the location where the organization was founded. +* **`seomatic.site.identity.organizationContactPoints`** – Only for entities of the type Organization, an array of contact points for the organization. [Learn More](https://developers.google.com/search/docs/guides/enhance-site#provide-business-contact-markup) +* **`seomatic.site.identity.corporationTickerSymbol`** – Only for entities of the type Corporation, the exchange ticker symbol of the corporation. +* **`seomatic.site.identity.localBusinessPriceRange`** – Only for entities of the type LocalBusiness, the approximate price range of the goods or services offered by this local business. +* **`seomatic.site.identity.localBusinessOpeningHours`** – Only for entities of the type LocalBusiness, an array of the opening hours for this local business. [Learn More](https://developers.google.com/search/docs/appearance/structured-data/local-business) +* **`seomatic.site.identity.restaurantServesCuisine`** – Only for entities of the type Food Establishment, the primary type of cuisine that the food establishment serves. +* **`seomatic.site.identity.restaurantMenuUrl`** – Only for entities of the type Food Establishment, a URL to the food establishment’s menu. +* **`seomatic.site.identity.restaurantReservationsUrl`** – Only for entities of the type Food Establishment, a URL to the food establishment’s reservations page. + +## Site Creator Variables + +The `seomatic.site.creator` variable is used to create [JSON-LD Structured Data](https://developers.google.com/search/docs/guides/intro-structured-data) that _can_ appear as [Rich Snippets](https://developers.google.com/search/docs/guides/mark-up-content) on Google Search Engine Results Pages (SERP). JSON-LD Structured Data helps computers understand context and relationships, and is also read by other social media sites and apps. + +The `seomatic.site.creator` encapsulates all of the information associated with the creator of the site. This information is also used in the `humans.txt` page + +* **`seomatic.site.creator.siteType`** – The schema.org general type. +* **`seomatic.site.creator.siteSubType`** – The schema.org sub-type. +* **`seomatic.site.creator.siteSpecificType`** – The schema.org specific type. +* **`seomatic.site.creator.computedType`** – The computed most specific schema.org type. +* **`seomatic.site.creator.genericName`** – The name of the entity that created the site. +* **`seomatic.site.creator.genericAlternateName`** – An alternate or nickname for the entity that created the site. +* **`seomatic.site.creator.genericDescription`** – A description of the entity that created the site. +* **`seomatic.site.creator.genericUrl`** – A URL for the entity that created the site. +* **`seomatic.site.creator.genericImage`** – A URL to an image or logo that represents the entity that created the site. The image must be in JPG, PNG, or GIF format. +* **`seomatic.site.creator.genericImageWidth`** – The width of the entity image. +* **`seomatic.site.creator.genericImageHeight`** – The height of the entity image. +* **`seomatic.site.creator.genericImageIds`** – Asset ID array for the entity image. +* **`seomatic.site.creator.genericTelephone`** – The primary contact telephone number for the entity that created the site. +* **`seomatic.site.creator.genericEmail`** – The primary contact email address for the entity that created the site. +* **`seomatic.site.creator.genericStreetAddress`** – The street address of the entity that created the website, for example: 123 Main Street. +* **`seomatic.site.creator.genericAddressLocality`** – locality of the entity that created the website, for example: Portchester +* **`seomatic.site.creator.genericAddressRegion`** – The region of the entity that created the website, for example: New York or NY +* **`seomatic.site.creator.genericPostalCode`** – The postal code of the entity that created the website, for example: 14580 +* **`seomatic.site.creator.genericAddressCountry`** – The country in which the entity that created the site is located, for example: US +* **`seomatic.site.creator.genericGeoLatitude`** – The latitude of the location of the entity that created the website, for example: -120.5436367 +* **`seomatic.site.creator.genericGeoLongitude`** – The longitude of the location of the entity that created the website, for example: 80.6033588 +* **`seomatic.site.creator.personGender`** – Only for entities of the type Person, the gender of the person. +* **`seomatic.site.creator.personBirthPlace`** – Only for entities of the type Person, the place where the person was born. +* **`seomatic.site.creator.organizationDuns`** – Only for entities of the type Organization, the DUNS (Dunn & Bradstreet) number of the organization that created the site. +* **`seomatic.site.creator.organizationFounder`** – Only for entities of the type Organization, the name of the founder of the organization. +* **`seomatic.site.creator.organizationFoundingDate`** – Only for entities of the type Organization, the date the organization/company/restaurant was founded in [ISO 8601 date format](http://schema.org/Date), for example: `2018-03-26` +* **`seomatic.site.creator.organizationFoundingLocation`** – Only for entities of the type Organization, the location where the organization was founded. +* **`seomatic.site.creator.organizationContactPoints`** – Only for entities of the type Organization, an array of contact points for the organization. [Learn More](https://developers.google.com/search/docs/guides/enhance-site#provide-business-contact-markup) +* **`seomatic.site.creator.corporationTickerSymbol`** – Only for entities of the type Corporation, the exchange ticker symbol of the corporation. +* **`seomatic.site.creator.localBusinessPriceRange`** – Only for entities of the type LocalBusiness, the approximate price range of the goods or services offered by this local business. +* **`seomatic.site.creator.localBusinessOpeningHours`** – Only for entities of the type LocalBusiness, an array of the opening hours for this local business. [Learn More](https://developers.google.com/search/docs/appearance/structured-data/local-business) +* **`seomatic.site.creator.restaurantServesCuisine`** – Only for entities of the type Food Establishment, the primary type of cuisine that the food establishment serves. +* **`seomatic.site.creator.restaurantMenuUrl`** – Only for entities of the type Food Establishment, a URL to the food establishment’s menu. +* **`seomatic.site.creator.restaurantReservationsUrl`** – Only for entities of the type Food Establishment, a URL to the food establishment’s reservations page. diff --git a/docs/docs/using/tag-meta.md b/docs/docs/using/tag-meta.md new file mode 100644 index 000000000..70e898b09 --- /dev/null +++ b/docs/docs/using/tag-meta.md @@ -0,0 +1,56 @@ +# Tag Meta Object Functions + +The `seomatic.tag` functions are for working with `<meta>` tags. + +* **`seomatic.tag.get(META_HANDLE)`** – Returns the Tag meta object of the handle `META_HANDLE` or `null` if it is not found. +* **`seomatic.tag.create()`** – Creates a Tag meta object from an array of key-value properties. +* **`seomatic.tag.add(META_OBJECT)`** – Adds the `META_OBJECT` to the Tag container to be rendered. +* **`seomatic.tag.render()`** – Renders all of the Tag meta objects to your template. Only necessary if you’ve disabled **Automatic Render** in [Plugin Settings](../configuring/plugin-settings.md). +* **`seomatic.tag.container()`** – Returns the container that holds an array of all of the Tag meta objects. + +## Tag Meta Object Examples + +Change the `<meta name="twitter:title">`: + +```twig +{% do seomatic.tag.get("twitter:title").content("Hello, world") %} +``` + +Note that you can achieve the same result with: + +```twig +{% do seomatic.meta.twitterTitle("Hello, world") %} +``` + +...since the `twitterTitle` populates the `<meta name="twitter:title">` Tag meta object by default. + +Let’s say you didn’t want Google et al to index a particular page or under certain conditions. You could do this: + +```twig +{% do seomatic.tag.get("robots").content("none") %} +``` + +Note that you can achieve the same result with: + +```twig +{% do seomatic.meta.robots("none") %} +``` + +...since the `robots` populates the `<meta name="robots">` Tag meta object by default. + +You can have multiple Open Graph tags of the same time, for example `og:image`: + +```twig +{% set ogImage = seomatic.tag.get('og:image') %} +{% do ogImage.content([ + 'http://example.com/image1.jpg', + 'http://example.com/image2.jpg', +]) %} +``` + +...and it’ll generate a tag for each image: + +```html +<meta content="http://example.com/image2.jpg" property="og:image"> +<meta content="http://example.com/image1.jpg" property="og:image"> +``` diff --git a/docs/docs/using/title-meta.md b/docs/docs/using/title-meta.md new file mode 100644 index 000000000..51cd5b2af --- /dev/null +++ b/docs/docs/using/title-meta.md @@ -0,0 +1,26 @@ +# Title Meta Object Functions + +The `seomatic.title` functions are for working with a page’s `<title>` tag. + +* **`seomatic.title.get(META_HANDLE)`** – Returns the Title meta object of the handle `META_HANDLE` or `null` if it’s not found. +* **`seomatic.title.create()`** – Creates a Title meta object from an array of key-value properties. +* **`seomatic.title.add(META_OBJECT)`** – Adds the `META_OBJECT` to the Title container to be rendered. +* **`seomatic.title.render()`** – Renders Title meta object to your template. Only necessary if you’ve disabled **Automatic Render** in [Plugin Settings](../configuring/plugin-settings.md). +* **`seomatic.title.container()`** – Returns the container that holds an array with the Title meta object in it. + +## Tag Meta Object Examples + +Change the `<title>`: + +```twig +{% do seomatic.title.get("title").content("My page title") %} +``` + +Note that you can achieve the same result with: + +```twig +{% do seomatic.meta.seoTitle("My page title") %} +``` + +...since the `seoTitle` populates the `<title>` Title meta object. + diff --git a/docs/docs/what-it-does.md b/docs/docs/what-it-does.md new file mode 100644 index 000000000..b4a5bb4fc --- /dev/null +++ b/docs/docs/what-it-does.md @@ -0,0 +1,102 @@ +# What SEOmatic Does + +This page offers a more in-depth look at what SEOmatic does for you automatically, so can know where to jump in if there’s something you’d like to change. + +Once you’re familiar with the [meta cascade](./overview.md#the-meta-cascade), it’s safe to jump straight to [configuration](./configuring/) if you’d rather skip this under-the-hood tour. + +None of the information presented here is necessary for you to understand in order to use SEOmatic effectively. + +This section is provided in case you want a gestalt view of how it all works. + +## Minimal Configuration + +SEOmatic’s approach is to be as useful as possible with the least amount of required configuration. + +Because of this, and because it’s deeply integrated with Craft CMS, several things happen the moment you install it: + +- SEO preview targets are added to every section with public URLs. +- Front-end templates are injected with title, meta, link, and JSON-LD tags. +- XML sitemaps and robots.txt are served, taking care to prevent indexing for non-production environments. +- Front-end and control panel page titles include emoji to visually identify non-production environments. +- HTTP response headers are added to front-end and control panel URLs. +- An SEOmatic panel is included when Craft’s [debug toolbar](./advanced.md#debug-toolbar) is enabled. +- Page titles are prepended with 🚧 to indicate non-production environments. + +## Leveraging the Content Model + +### Healthy SEO by Default + +SEOmatic’s most important benefit is the ability to render the best metadata for a page using information that’s already available. The details can come from layered configuration, tailoring by content authors, and complete customization by developers using PHP or Twig. + +This is more complicated than relying on entry fields or elaborate templates for one very good reason: it leverages Craft’s bespoke content modeling for healthy SEO by default. This frees content authors from having to manage SEO fields so they can focus on excellent content. + +This can be a subtle thing for a small site, and a huge deal as it grows and evolves. + +### Routes → Bundles → Containers + +In order to make this possible, SEOmatic responds to a Craft request by examining its route and finding relevant SEO settings organized in bundles. + +You can think of bundles as blobs of SEO settings that may be relevant to a given route. + +SEOmatic starts with the Global SEO settings as a base, and then layers on top any Content SEO settings the correspond to a more specific Craft CMS Section. If there are any SEO Settings fields in that Section, those are then layered on top of the Content SEO settings. + +This is called the [meta cascade](./overview.md#the-meta-cascade). + +From these combined SEO settings, SEOmatic then creates containers that have objects for all of the tags, links, scripts, and other SEO metadata that it will render on your page for you. + +These containers are injected in your Twig templates so that you can modify them as you see fit before the metadata they contain is finally rendered on the page. + +You can also modify the containers via PHP in a custom module or plugin as well. + +The [title container](https://github.com/nystudio107/craft-seomatic/blob/develop/src/seomatic-config/globalmeta/TitleContainer.php), for example, describes the `<title>` HTML tag. It has simple settings for how the site name should be treated in addition to the page title. + +The [tag container](https://github.com/nystudio107/craft-seomatic/blob/develop/src/seomatic-config/globalmeta/TagContainer.php) is more complicated, detailing every expected `<meta>` tag that would commonly appear on a page. + +A series of these containers is added by default, because most sites will use them: + +- [TitleContainer](https://github.com/nystudio107/craft-seomatic/blob/develop/src/seomatic-config/globalmeta/TitleContainer.php) describes the `<title>` tag that’s rendered in the `<head>`. +- [TagContainer](https://github.com/nystudio107/craft-seomatic/blob/develop/src/seomatic-config/globalmeta/TagContainer.php) describes all the `<meta>` tags, rendered just after the `<title>` tag. +- [LinkContainer](https://github.com/nystudio107/craft-seomatic/blob/develop/src/seomatic-config/globalmeta/LinkContainer.php) describes the `<link>` tags, rendered following the `<meta>` tags. +- [ScriptContainer](https://github.com/nystudio107/craft-seomatic/blob/develop/src/seomatic-config/globalmeta/ScriptContainer.php) describes the supported tracking `<script>` tags. +- [JsonLdContainer](https://github.com/nystudio107/craft-seomatic/blob/develop/src/seomatic-config/globalmeta/JsonLdContainer.php) describes the JSON-LD `<script type="application/ld+json">` tag data that’s rendered below any `<script>` tags just before `</body>`. + +SEOmatic renders all of these for you, using settings you’ll see in each one. + +Script tags, for example, may need to appear at different positions in a page depending on what they do. `ScriptContainer.php` includes [`position`](https://github.com/nystudio107/craft-seomatic/blob/develop/src/seomatic-config/globalmeta/ScriptContainer.php#L46) and https://github.com/nystudio107/craft-seomatic/blob/develop/src/seomatic-config/globalmeta/ScriptContainer.php#L47 properties used to clarify exactly where individual scripts need to appear—and they’re already configured to ensure everything ends up in the right place. + +You can [override any of these containers](https://nystudio107.com/blog/tips-for-using-seomatic-effectively#customized-setup) if you’d like. + +You can disable automatic rendering globally in the [General Plugin Settings](./configuring/plugin-settings.md), and instead render whichever containers you’d like manually: + +```twig +{# Render the title container #} +{{ seomatic.title.container().render() }} +``` + +## Customizing with Twig and PHP + +If you choose to customize SEO details programmatically, it’s more likely that you’ll want to adjust the content itself rather than the containers that describe how it will be rendered. + +The [SEOmatic Variables](./using/index.md#seomatic-variables) section walks through common usage and examples, and anything you can do with Twig is also available via PHP. You may even want to use PHP if your adjustments should be reflected in a control panel SEO preview. + +You might set your own SEO description—used in several places—in Twig: + +```twig +{% do seomatic.meta.seoDescription( + "This is my description. There are many like it, but this one is mine." +) %} +``` + +You could do the exact same thing with PHP: + +```php +Seomatic::$seomaticVariable->meta->seoDescription = "This is my description. There are many like it, but this one is mine."; +``` + +::: tip +It’s important to consider _when_ you do this with PHP. The [AddDynamicMetaEvent](advanced.md#adddynamicmetaevent) is ideal for customizing meta items in this way. +::: + +## Tooling + +SEOmatic also includes tools like its [debug panel](advanced.md#debug-toolbar) and [self-validating objects](using/index.md#meta-object-validation) to make it easier to inspect and double-check output. diff --git a/docs/package-lock.json b/docs/package-lock.json index 565f4f188..b6ed35d41 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -225,9 +225,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", - "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", + "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -285,9 +285,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz", - "integrity": "sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", "cpu": [ "ppc64" ], @@ -301,9 +301,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.11.tgz", - "integrity": "sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", "cpu": [ "arm" ], @@ -317,9 +317,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz", - "integrity": "sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", "cpu": [ "arm64" ], @@ -333,9 +333,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.11.tgz", - "integrity": "sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", "cpu": [ "x64" ], @@ -349,9 +349,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz", - "integrity": "sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", "cpu": [ "arm64" ], @@ -365,9 +365,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz", - "integrity": "sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", "cpu": [ "x64" ], @@ -381,9 +381,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz", - "integrity": "sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", "cpu": [ "arm64" ], @@ -397,9 +397,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz", - "integrity": "sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", "cpu": [ "x64" ], @@ -413,9 +413,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz", - "integrity": "sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", "cpu": [ "arm" ], @@ -429,9 +429,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz", - "integrity": "sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", "cpu": [ "arm64" ], @@ -445,9 +445,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz", - "integrity": "sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", "cpu": [ "ia32" ], @@ -461,9 +461,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz", - "integrity": "sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", "cpu": [ "loong64" ], @@ -477,9 +477,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz", - "integrity": "sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", "cpu": [ "mips64el" ], @@ -493,9 +493,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz", - "integrity": "sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", "cpu": [ "ppc64" ], @@ -509,9 +509,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz", - "integrity": "sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", "cpu": [ "riscv64" ], @@ -525,9 +525,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz", - "integrity": "sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", "cpu": [ "s390x" ], @@ -541,9 +541,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz", - "integrity": "sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", "cpu": [ "x64" ], @@ -557,9 +557,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz", - "integrity": "sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", "cpu": [ "x64" ], @@ -573,9 +573,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz", - "integrity": "sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", "cpu": [ "x64" ], @@ -589,9 +589,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz", - "integrity": "sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", "cpu": [ "x64" ], @@ -605,9 +605,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz", - "integrity": "sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", "cpu": [ "arm64" ], @@ -621,9 +621,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz", - "integrity": "sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", "cpu": [ "ia32" ], @@ -637,9 +637,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz", - "integrity": "sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", "cpu": [ "x64" ], @@ -659,9 +659,9 @@ "dev": true }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.5.tgz", - "integrity": "sha512-idWaG8xeSRCfRq9KpRysDHJ/rEHBEXcHuJ82XY0yYFIWnLMjZv9vF/7DOq8djQ2n3Lk6+3qfSH8AqlmHlmi1MA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz", + "integrity": "sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==", "cpu": [ "arm" ], @@ -672,9 +672,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.5.tgz", - "integrity": "sha512-f14d7uhAMtsCGjAYwZGv6TwuS3IFaM4ZnGMUn3aCBgkcHAYErhV1Ad97WzBvS2o0aaDv4mVz+syiN0ElMyfBPg==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz", + "integrity": "sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==", "cpu": [ "arm64" ], @@ -685,9 +685,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.5.tgz", - "integrity": "sha512-ndoXeLx455FffL68OIUrVr89Xu1WLzAG4n65R8roDlCoYiQcGGg6MALvs2Ap9zs7AHg8mpHtMpwC8jBBjZrT/w==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz", + "integrity": "sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==", "cpu": [ "arm64" ], @@ -698,9 +698,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.5.tgz", - "integrity": "sha512-UmElV1OY2m/1KEEqTlIjieKfVwRg0Zwg4PLgNf0s3glAHXBN99KLpw5A5lrSYCa1Kp63czTpVll2MAqbZYIHoA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz", + "integrity": "sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==", "cpu": [ "x64" ], @@ -711,9 +711,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.5.tgz", - "integrity": "sha512-Q0LcU61v92tQB6ae+udZvOyZ0wfpGojtAKrrpAaIqmJ7+psq4cMIhT/9lfV6UQIpeItnq/2QDROhNLo00lOD1g==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz", + "integrity": "sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==", "cpu": [ "arm" ], @@ -724,9 +724,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.5.tgz", - "integrity": "sha512-dkRscpM+RrR2Ee3eOQmRWFjmV/payHEOrjyq1VZegRUa5OrZJ2MAxBNs05bZuY0YCtpqETDy1Ix4i/hRqX98cA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz", + "integrity": "sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==", "cpu": [ "arm64" ], @@ -737,9 +737,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.5.tgz", - "integrity": "sha512-QaKFVOzzST2xzY4MAmiDmURagWLFh+zZtttuEnuNn19AiZ0T3fhPyjPPGwLNdiDT82ZE91hnfJsUiDwF9DClIQ==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz", + "integrity": "sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==", "cpu": [ "arm64" ], @@ -750,9 +750,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.5.tgz", - "integrity": "sha512-HeGqmRJuyVg6/X6MpE2ur7GbymBPS8Np0S/vQFHDmocfORT+Zt76qu+69NUoxXzGqVP1pzaY6QIi0FJWLC3OPA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz", + "integrity": "sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==", "cpu": [ "riscv64" ], @@ -763,9 +763,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.5.tgz", - "integrity": "sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz", + "integrity": "sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==", "cpu": [ "x64" ], @@ -776,9 +776,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.5.tgz", - "integrity": "sha512-ezyFUOwldYpj7AbkwyW9AJ203peub81CaAIVvckdkyH8EvhEIoKzaMFJj0G4qYJ5sw3BpqhFrsCc30t54HV8vg==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz", + "integrity": "sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==", "cpu": [ "x64" ], @@ -789,9 +789,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.5.tgz", - "integrity": "sha512-aHSsMnUw+0UETB0Hlv7B/ZHOGY5bQdwMKJSzGfDfvyhnpmVxLMGnQPGNE9wgqkLUs3+gbG1Qx02S2LLfJ5GaRQ==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz", + "integrity": "sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==", "cpu": [ "arm64" ], @@ -802,9 +802,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.5.tgz", - "integrity": "sha512-AiqiLkb9KSf7Lj/o1U3SEP9Zn+5NuVKgFdRIZkvd4N0+bYrTOovVd0+LmYCPQGbocT4kvFyK+LXCDiXPBF3fyA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz", + "integrity": "sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==", "cpu": [ "ia32" ], @@ -815,9 +815,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.5.tgz", - "integrity": "sha512-1q+mykKE3Vot1kaFJIDoUFv5TuW+QQVaf2FmTT9krg86pQrGStOSJJ0Zil7CFagyxDuouTepzt5Y5TVzyajOdQ==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz", + "integrity": "sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==", "cpu": [ "x64" ], @@ -827,6 +827,21 @@ "win32" ] }, + "node_modules/@shikijs/core": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.1.5.tgz", + "integrity": "sha512-cKc5vGQ4p/4sjx48BHIO7CvLaN32vqpz5Wh7v2n+U1EezGdfX4Wms7khBctKz3iCg9yYq4sfGUc2t+JWj6EUsw==", + "dev": true + }, + "node_modules/@shikijs/transformers": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.1.5.tgz", + "integrity": "sha512-ot6KWPmLuSN9nA9FAhttOXZIjKIy7cnwpNtI9aWmYN72RUaDz8eojRfMGUXsXXUxW/buvcvdZQAQldk7/pFpdw==", + "dev": true, + "dependencies": { + "shiki": "1.1.5" + } + }, "node_modules/@textlint-rule/textlint-rule-no-unmatched-pair": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@textlint-rule/textlint-rule-no-unmatched-pair/-/textlint-rule-no-unmatched-pair-1.0.9.tgz", @@ -1105,9 +1120,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.0.tgz", - "integrity": "sha512-o9bjXmDNcF7GbM4CNQpmi+TutCgap/K3w1JyKgxAjqx41zp9qlIAVFi0IhCNsJcXolEqLWhbFbEeL0PvYm4pcQ==", + "version": "20.11.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.19.tgz", + "integrity": "sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -1126,9 +1141,9 @@ "dev": true }, "node_modules/@vitejs/plugin-vue": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.3.tgz", - "integrity": "sha512-b8S5dVS40rgHdDrw+DQi/xOM9ed+kSRZzfm1T74bMmBDCd8XO87NKlFYInzCtwvtWwXZvo1QxE2OSspTATWrbA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz", + "integrity": "sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==", "dev": true, "engines": { "node": "^18.0.0 || >=20.0.0" @@ -1139,119 +1154,147 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.4.11", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.11.tgz", - "integrity": "sha512-xFD+p14L4J0DkzHMdgLiQBU5g861fuOTzag30GsfPXBpghLZOvmd22lKiBMTRRpQRpp7qxPnBlFMoeiGMM4MBg==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.19.tgz", + "integrity": "sha512-gj81785z0JNzRcU0Mq98E56e4ltO1yf8k5PQ+tV/7YHnbZkrM0fyFyuttnN8ngJZjbpofWE/m4qjKBiLl8Ju4w==", "dev": true, "dependencies": { - "@babel/parser": "^7.23.6", - "@vue/shared": "3.4.11", + "@babel/parser": "^7.23.9", + "@vue/shared": "3.4.19", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.0.2" } }, "node_modules/@vue/compiler-dom": { - "version": "3.4.11", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.11.tgz", - "integrity": "sha512-cRVLROlY7D72WK2xS91L126Dd6xHNTWDWPUBRh1Syk7+TahCk8Eown1/fSi+VX9c76sMMqEZROQSbwV0HSJnhg==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.19.tgz", + "integrity": "sha512-vm6+cogWrshjqEHTzIDCp72DKtea8Ry/QVpQRYoyTIg9k7QZDX6D8+HGURjtmatfgM8xgCFtJJaOlCaRYRK3QA==", "dev": true, "dependencies": { - "@vue/compiler-core": "3.4.11", - "@vue/shared": "3.4.11" + "@vue/compiler-core": "3.4.19", + "@vue/shared": "3.4.19" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.4.11", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.11.tgz", - "integrity": "sha512-1y5xHAD4a/AhK5+dgsZwFg145J6/rl1c8ILC7Gokca+ql51tTpduz/njCHeNmU15XiE7O62LjJFNOtSZ9vxKOQ==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.19.tgz", + "integrity": "sha512-LQ3U4SN0DlvV0xhr1lUsgLCYlwQfUfetyPxkKYu7dkfvx7g3ojrGAkw0AERLOKYXuAGnqFsEuytkdcComei3Yg==", "dev": true, "dependencies": { - "@babel/parser": "^7.23.6", - "@vue/compiler-core": "3.4.11", - "@vue/compiler-dom": "3.4.11", - "@vue/compiler-ssr": "3.4.11", - "@vue/shared": "3.4.11", + "@babel/parser": "^7.23.9", + "@vue/compiler-core": "3.4.19", + "@vue/compiler-dom": "3.4.19", + "@vue/compiler-ssr": "3.4.19", + "@vue/shared": "3.4.19", "estree-walker": "^2.0.2", - "magic-string": "^0.30.5", - "postcss": "^8.4.32", + "magic-string": "^0.30.6", + "postcss": "^8.4.33", "source-map-js": "^1.0.2" } }, "node_modules/@vue/compiler-ssr": { - "version": "3.4.11", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.11.tgz", - "integrity": "sha512-cP9Z2ArRgciYmNraqE0gQkuYInfdn66+LE4pR+16uyBiQeswcU4kEzGA+mF1MdhqYXuENpyGQsTkZapq4cy9YA==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.19.tgz", + "integrity": "sha512-P0PLKC4+u4OMJ8sinba/5Z/iDT84uMRRlrWzadgLA69opCpI1gG4N55qDSC+dedwq2fJtzmGald05LWR5TFfLw==", "dev": true, "dependencies": { - "@vue/compiler-dom": "3.4.11", - "@vue/shared": "3.4.11" + "@vue/compiler-dom": "3.4.19", + "@vue/shared": "3.4.19" } }, "node_modules/@vue/devtools-api": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.1.tgz", - "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==", - "dev": true + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.0.15.tgz", + "integrity": "sha512-kgEYWosDyWpS1vFSuJNNWUnHkP+VkL3Y+9mw+rf7ex41SwbYL/WdC3KXqAtjiSrEs7r/FrHmUTh0BkINJPFkbA==", + "dev": true, + "dependencies": { + "@vue/devtools-kit": "^7.0.15" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.0.15.tgz", + "integrity": "sha512-dT7OeCe1LUCIhHIb/yRR6Hn+XHh73r1o78onqCrxEKHdoZwBItiIeVnmJZPEUDFstIxfs+tJL231mySk3laTow==", + "dev": true, + "dependencies": { + "@vue/devtools-shared": "^7.0.15", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.0.15.tgz", + "integrity": "sha512-fpfvMVvS7aDgO7x2JPFiTQ1MHcCc63/bE7yTgs278gMBybuO9b3hdiZ/k0Pw1rN+RefaU9yQiFA+5CCFc1D+6w==", + "dev": true, + "dependencies": { + "rfdc": "^1.3.1" + } }, "node_modules/@vue/reactivity": { - "version": "3.4.11", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.11.tgz", - "integrity": "sha512-KscADwKpSynT3S2iJEX8EfPqc9kPFR261sHIQnDh1xhOBf8qd4ait9tEgLt1/uVxyrAgFj/TNGmjDkcsytyA8w==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.19.tgz", + "integrity": "sha512-+VcwrQvLZgEclGZRHx4O2XhyEEcKaBi50WbxdVItEezUf4fqRh838Ix6amWTdX0CNb/b6t3Gkz3eOebfcSt+UA==", "dev": true, "dependencies": { - "@vue/shared": "3.4.11" + "@vue/shared": "3.4.19" } }, "node_modules/@vue/runtime-core": { - "version": "3.4.11", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.11.tgz", - "integrity": "sha512-wduRf9w1OtSORFs5KVpKEQ1bRwW5D9/E8mB0I4m0f5Wrd53OZridzWWVZaowSKNMXXIF5Y/lYFP9GOM/IL5i2g==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.19.tgz", + "integrity": "sha512-/Z3tFwOrerJB/oyutmJGoYbuoadphDcJAd5jOuJE86THNZji9pYjZroQ2NFsZkTxOq0GJbb+s2kxTYToDiyZzw==", "dev": true, "dependencies": { - "@vue/reactivity": "3.4.11", - "@vue/shared": "3.4.11" + "@vue/reactivity": "3.4.19", + "@vue/shared": "3.4.19" } }, "node_modules/@vue/runtime-dom": { - "version": "3.4.11", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.11.tgz", - "integrity": "sha512-pWlCTzo6Ad3pSBjzgcZ9maPaz+N/SngLOMfkSKIx7rIWJgcHBoFp4GAbhnkR3jxT4BqIvti6EH3aNSC02VtgOg==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.19.tgz", + "integrity": "sha512-IyZzIDqfNCF0OyZOauL+F4yzjMPN2rPd8nhqPP2N1lBn3kYqJpPHHru+83Rkvo2lHz5mW+rEeIMEF9qY3PB94g==", "dev": true, "dependencies": { - "@vue/runtime-core": "3.4.11", - "@vue/shared": "3.4.11", + "@vue/runtime-core": "3.4.19", + "@vue/shared": "3.4.19", "csstype": "^3.1.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.4.11", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.11.tgz", - "integrity": "sha512-19rLK9N0yNNzQ83ieyoO9ZT/iBt0S8IkxQ4eVmnqPLCbZgSRMm7GRXnjTFvo0n5vTVVeyaYosBzZ2559L/rP+w==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.19.tgz", + "integrity": "sha512-eAj2p0c429RZyyhtMRnttjcSToch+kTWxFPHlzGMkR28ZbF1PDlTcmGmlDxccBuqNd9iOQ7xPRPAGgPVj+YpQw==", "dev": true, "dependencies": { - "@vue/compiler-ssr": "3.4.11", - "@vue/shared": "3.4.11" + "@vue/compiler-ssr": "3.4.19", + "@vue/shared": "3.4.19" }, "peerDependencies": { - "vue": "3.4.11" + "vue": "3.4.19" } }, "node_modules/@vue/shared": { - "version": "3.4.11", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.11.tgz", - "integrity": "sha512-BtC+vE8kHf/jZoyJnTFd0PmY8NejyUeUkshXm8LriHs8KmQUmcZXIbrifjA3WDmvzg7C8D6gBSvdl49pOfU2lQ==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.19.tgz", + "integrity": "sha512-/KliRRHMF6LoiThEy+4c1Z4KB/gbPrGjWwJR+crg2otgrf/egKzRaCPvJ51S5oetgsgXLfc4Rm5ZgrKHZrtMSw==", "dev": true }, "node_modules/@vueuse/core": { - "version": "10.7.1", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.7.1.tgz", - "integrity": "sha512-74mWHlaesJSWGp1ihg76vAnfVq9NTv1YT0SYhAQ6zwFNdBkkP+CKKJmVOEHcdSnLXCXYiL5e7MaewblfiYLP7g==", + "version": "10.7.2", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.7.2.tgz", + "integrity": "sha512-AOyAL2rK0By62Hm+iqQn6Rbu8bfmbgaIMXcE3TSr7BdQ42wnSFlwIdPjInO62onYsEMK/yDMU8C6oGfDAtZ2qQ==", "dev": true, "dependencies": { "@types/web-bluetooth": "^0.0.20", - "@vueuse/metadata": "10.7.1", - "@vueuse/shared": "10.7.1", + "@vueuse/metadata": "10.7.2", + "@vueuse/shared": "10.7.2", "vue-demi": ">=0.14.6" }, "funding": { @@ -1259,9 +1302,9 @@ } }, "node_modules/@vueuse/core/node_modules/vue-demi": { - "version": "0.14.6", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", - "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", + "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", "dev": true, "hasInstallScript": true, "bin": { @@ -1285,13 +1328,13 @@ } }, "node_modules/@vueuse/integrations": { - "version": "10.7.1", - "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-10.7.1.tgz", - "integrity": "sha512-cKo5LEeKVHdBRBtMTOrDPdR0YNtrmN9IBfdcnY2P3m5LHVrsD0xiHUtAH1WKjHQRIErZG6rJUa6GA4tWZt89Og==", + "version": "10.7.2", + "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-10.7.2.tgz", + "integrity": "sha512-+u3RLPFedjASs5EKPc69Ge49WNgqeMfSxFn+qrQTzblPXZg6+EFzhjarS5edj2qAf6xQ93f95TUxRwKStXj/sQ==", "dev": true, "dependencies": { - "@vueuse/core": "10.7.1", - "@vueuse/shared": "10.7.1", + "@vueuse/core": "10.7.2", + "@vueuse/shared": "10.7.2", "vue-demi": ">=0.14.6" }, "funding": { @@ -1351,9 +1394,9 @@ } }, "node_modules/@vueuse/integrations/node_modules/vue-demi": { - "version": "0.14.6", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", - "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", + "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", "dev": true, "hasInstallScript": true, "bin": { @@ -1377,18 +1420,18 @@ } }, "node_modules/@vueuse/metadata": { - "version": "10.7.1", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.7.1.tgz", - "integrity": "sha512-jX8MbX5UX067DYVsbtrmKn6eG6KMcXxLRLlurGkZku5ZYT3vxgBjui2zajvUZ18QLIjrgBkFRsu7CqTAg18QFw==", + "version": "10.7.2", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.7.2.tgz", + "integrity": "sha512-kCWPb4J2KGrwLtn1eJwaJD742u1k5h6v/St5wFe8Quih90+k2a0JP8BS4Zp34XUuJqS2AxFYMb1wjUL8HfhWsQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/antfu" } }, "node_modules/@vueuse/shared": { - "version": "10.7.1", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.7.1.tgz", - "integrity": "sha512-v0jbRR31LSgRY/C5i5X279A/WQjD6/JsMzGa+eqt658oJ75IvQXAeONmwvEMrvJQKnRElq/frzBR7fhmWY5uLw==", + "version": "10.7.2", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.7.2.tgz", + "integrity": "sha512-qFbXoxS44pi2FkgFjPvF4h7c9oMDutpyBdcJdMYIMg9XyXli2meFMuaKn+UMgsClo//Th6+beeCgqweT/79BVA==", "dev": true, "dependencies": { "vue-demi": ">=0.14.6" @@ -1398,9 +1441,9 @@ } }, "node_modules/@vueuse/shared/node_modules/vue-demi": { - "version": "0.14.6", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", - "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", + "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", "dev": true, "hasInstallScript": true, "bin": { @@ -1548,14 +1591,19 @@ "dev": true }, "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1710,17 +1758,20 @@ "dev": true }, "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-properties": { @@ -1818,10 +1869,31 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/esbuild": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz", - "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", "dev": true, "hasInstallScript": true, "bin": { @@ -1831,29 +1903,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.11", - "@esbuild/android-arm": "0.19.11", - "@esbuild/android-arm64": "0.19.11", - "@esbuild/android-x64": "0.19.11", - "@esbuild/darwin-arm64": "0.19.11", - "@esbuild/darwin-x64": "0.19.11", - "@esbuild/freebsd-arm64": "0.19.11", - "@esbuild/freebsd-x64": "0.19.11", - "@esbuild/linux-arm": "0.19.11", - "@esbuild/linux-arm64": "0.19.11", - "@esbuild/linux-ia32": "0.19.11", - "@esbuild/linux-loong64": "0.19.11", - "@esbuild/linux-mips64el": "0.19.11", - "@esbuild/linux-ppc64": "0.19.11", - "@esbuild/linux-riscv64": "0.19.11", - "@esbuild/linux-s390x": "0.19.11", - "@esbuild/linux-x64": "0.19.11", - "@esbuild/netbsd-x64": "0.19.11", - "@esbuild/openbsd-x64": "0.19.11", - "@esbuild/sunos-x64": "0.19.11", - "@esbuild/win32-arm64": "0.19.11", - "@esbuild/win32-ia32": "0.19.11", - "@esbuild/win32-x64": "0.19.11" + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" } }, "node_modules/escape-string-regexp": { @@ -2016,16 +2088,20 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "dependencies": { + "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2087,12 +2163,12 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2123,9 +2199,9 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", "dev": true, "dependencies": { "function-bind": "^1.1.2" @@ -2134,6 +2210,12 @@ "node": ">= 0.4" } }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "dev": true + }, "node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", @@ -2362,9 +2444,9 @@ } }, "node_modules/magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "version": "0.30.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", + "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" @@ -2731,6 +2813,12 @@ "integrity": "sha512-4QT2u/8X7PccbiHUcsZeEZrt3jGIVEpfcQ1RU01wDHKHVNtNhaP+0Xmsg7YPxD7OCc8bO802BTEWeGPvAXBwuw==", "dev": true }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true + }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -2957,6 +3045,12 @@ "node": ">=0.10.0" } }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "dev": true + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -3000,9 +3094,9 @@ "dev": true }, "node_modules/postcss": { - "version": "8.4.33", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", - "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", "dev": true, "funding": [ { @@ -3028,9 +3122,9 @@ } }, "node_modules/preact": { - "version": "10.19.3", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.19.3.tgz", - "integrity": "sha512-nHHTeFVBTHRGxJXKkKu5hT8C/YWBkPso4/Gad6xuj5dbptt9iF9NZr9pHbPhBrnT2klheu7mHTxTZ/LjwJiEiQ==", + "version": "10.19.5", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.19.5.tgz", + "integrity": "sha512-OPELkDmSVbKjbFqF9tgvOowiiQ9TmsJljIzXRyNE8nGiis94pwv1siF78rQkAP1Q1738Ce6pellRg/Ns/CtHqQ==", "dev": true, "funding": { "type": "opencollective", @@ -3288,6 +3382,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/rfdc": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "dev": true + }, "node_modules/rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -3301,9 +3401,9 @@ } }, "node_modules/rollup": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.5.tgz", - "integrity": "sha512-E4vQW0H/mbNMw2yLSqJyjtkHY9dslf/p0zuT1xehNRqUTBOFMqEjguDvqhXr7N7r/4ttb2jr4T41d3dncmIgbQ==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.0.tgz", + "integrity": "sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -3316,19 +3416,19 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.9.5", - "@rollup/rollup-android-arm64": "4.9.5", - "@rollup/rollup-darwin-arm64": "4.9.5", - "@rollup/rollup-darwin-x64": "4.9.5", - "@rollup/rollup-linux-arm-gnueabihf": "4.9.5", - "@rollup/rollup-linux-arm64-gnu": "4.9.5", - "@rollup/rollup-linux-arm64-musl": "4.9.5", - "@rollup/rollup-linux-riscv64-gnu": "4.9.5", - "@rollup/rollup-linux-x64-gnu": "4.9.5", - "@rollup/rollup-linux-x64-musl": "4.9.5", - "@rollup/rollup-win32-arm64-msvc": "4.9.5", - "@rollup/rollup-win32-ia32-msvc": "4.9.5", - "@rollup/rollup-win32-x64-msvc": "4.9.5", + "@rollup/rollup-android-arm-eabi": "4.12.0", + "@rollup/rollup-android-arm64": "4.12.0", + "@rollup/rollup-darwin-arm64": "4.12.0", + "@rollup/rollup-darwin-x64": "4.12.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.12.0", + "@rollup/rollup-linux-arm64-gnu": "4.12.0", + "@rollup/rollup-linux-arm64-musl": "4.12.0", + "@rollup/rollup-linux-riscv64-gnu": "4.12.0", + "@rollup/rollup-linux-x64-gnu": "4.12.0", + "@rollup/rollup-linux-x64-musl": "4.12.0", + "@rollup/rollup-win32-arm64-msvc": "4.12.0", + "@rollup/rollup-win32-ia32-msvc": "4.12.0", + "@rollup/rollup-win32-x64-msvc": "4.12.0", "fsevents": "~2.3.2" } }, @@ -3384,42 +3484,29 @@ } }, "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", "dev": true, "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.1" }, "engines": { "node": ">= 0.4" } }, - "node_modules/shikiji": { - "version": "0.9.19", - "resolved": "https://registry.npmjs.org/shikiji/-/shikiji-0.9.19.tgz", - "integrity": "sha512-Kw2NHWktdcdypCj1GkKpXH4o6Vxz8B8TykPlPuLHOGSV8VkhoCLcFOH4k19K4LXAQYRQmxg+0X/eM+m2sLhAkg==", - "dev": true, - "dependencies": { - "shikiji-core": "0.9.19" - } - }, - "node_modules/shikiji-core": { - "version": "0.9.19", - "resolved": "https://registry.npmjs.org/shikiji-core/-/shikiji-core-0.9.19.tgz", - "integrity": "sha512-AFJu/vcNT21t0e6YrfadZ+9q86gvPum6iywRyt1OtIPjPFe25RQnYJyxHQPMLKCCWA992TPxmEmbNcOZCAJclw==", - "dev": true - }, - "node_modules/shikiji-transformers": { - "version": "0.9.19", - "resolved": "https://registry.npmjs.org/shikiji-transformers/-/shikiji-transformers-0.9.19.tgz", - "integrity": "sha512-lGLI7Z8frQrIBbhZ74/eiJtxMoCQRbpaHEB+gcfvdIy+ZFaAtXncJGnc52932/UET+Y4GyKtwwC/vjWUCp+c/Q==", + "node_modules/shiki": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.1.5.tgz", + "integrity": "sha512-754GuKIwkUdT810Xm8btuyNQPL+q3PqOkwGW/VlmAWyMYp+HbvvDt69sWXO1sm5aeczBJQjmQTTMR4GkKQNQPw==", "dev": true, "dependencies": { - "shikiji": "0.9.19" + "@shikijs/core": "1.1.5" } }, "node_modules/slice-ansi": { @@ -3459,9 +3546,9 @@ } }, "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true }, "node_modules/spdx-expression-parse": { @@ -3475,11 +3562,20 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", "dev": true }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/split-lines": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/split-lines/-/split-lines-2.1.0.tgz", @@ -4180,13 +4276,13 @@ } }, "node_modules/vite": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.11.tgz", - "integrity": "sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.3.tgz", + "integrity": "sha512-UfmUD36DKkqhi/F75RrxvPpry+9+tTkrXfMNZD+SboZqBCMsxKtO52XeGzzuh7ioz+Eo/SYDBbdb0Z7vgcDJew==", "dev": true, "dependencies": { "esbuild": "^0.19.3", - "postcss": "^8.4.32", + "postcss": "^8.4.35", "rollup": "^4.2.0" }, "bin": { @@ -4235,33 +4331,33 @@ } }, "node_modules/vitepress": { - "version": "1.0.0-rc.36", - "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.0.0-rc.36.tgz", - "integrity": "sha512-2z4dpM9PplN/yvTifhavOIAazlCR6OJ5PvLoRbc+7LdcFeIlCsuDGENLX4HjMW18jQZF5/j7++PNqdBfeazxUA==", + "version": "1.0.0-rc.43", + "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.0.0-rc.43.tgz", + "integrity": "sha512-XZ9xaN76/LxCBqvk6U+3ne3T60JOavdOlk+FMQBlXYK/9pyyKGfjnEra4yKYvOdZdStoTg8VXTAj4wcsCTlJaQ==", "dev": true, "dependencies": { "@docsearch/css": "^3.5.2", "@docsearch/js": "^3.5.2", + "@shikijs/core": "^1.1.3", + "@shikijs/transformers": "^1.1.3", "@types/markdown-it": "^13.0.7", - "@vitejs/plugin-vue": "^5.0.2", - "@vue/devtools-api": "^6.5.1", - "@vueuse/core": "^10.7.1", - "@vueuse/integrations": "^10.7.1", + "@vitejs/plugin-vue": "^5.0.4", + "@vue/devtools-api": "^7.0.14", + "@vueuse/core": "^10.7.2", + "@vueuse/integrations": "^10.7.2", "focus-trap": "^7.5.4", "mark.js": "8.11.1", "minisearch": "^6.3.0", - "shikiji": "^0.9.17", - "shikiji-core": "^0.9.17", - "shikiji-transformers": "^0.9.17", - "vite": "^5.0.11", - "vue": "^3.4.5" + "shiki": "^1.1.3", + "vite": "^5.1.3", + "vue": "^3.4.19" }, "bin": { "vitepress": "bin/vitepress.js" }, "peerDependencies": { "markdown-it-mathjax3": "^4.3.2", - "postcss": "^8.4.33" + "postcss": "^8.4.35" }, "peerDependenciesMeta": { "markdown-it-mathjax3": { @@ -4273,16 +4369,16 @@ } }, "node_modules/vue": { - "version": "3.4.11", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.11.tgz", - "integrity": "sha512-iaA98z14ZrrVJlclpHX/HCNeacbMOLdX5foYN7/vt4cHFhDkBRzojjbLQZ2UDRAeNV1v4V5I21+QpdCXWlpG5Q==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.19.tgz", + "integrity": "sha512-W/7Fc9KUkajFU8dBeDluM4sRGc/aa4YJnOYck8dkjgZoXtVsn3OeTGni66FV1l3+nvPA7VBFYtPioaGKUmEADw==", "dev": true, "dependencies": { - "@vue/compiler-dom": "3.4.11", - "@vue/compiler-sfc": "3.4.11", - "@vue/runtime-dom": "3.4.11", - "@vue/server-renderer": "3.4.11", - "@vue/shared": "3.4.11" + "@vue/compiler-dom": "3.4.19", + "@vue/compiler-sfc": "3.4.19", + "@vue/runtime-dom": "3.4.19", + "@vue/server-renderer": "3.4.19", + "@vue/shared": "3.4.19" }, "peerDependencies": { "typescript": "*"