SEOmatic Changelog.

Link 3.2.28 · 2019.10.08

changed - 2019.10.08

  • The sitemaps and sitemap indexes that SEOmatic generates are now automatically minified
  • Added native GraphQL support

Link 3.2.27 · 2019.09.30

changed - 2019.09.30

  • Fixed an issue with breadcrumbs beyond the first one

Link 3.2.26 · 2019.09.26

changed - 2019.09.26

  • Fixed an issue where SEOmatic would put multiple sitemap entries for recurring Solspace Calendar events
  • Removed errant logging in the Content SEO controller
  • Fixed an issue where the script tag caches could be outputting something other than a string
  • Updated the Breadcrumbs format to match Google's new format requirements
  • More specifically list what happens in local dev & staging environments

Link 3.2.25 · 2019.09.18

changed - 2019.09.18

  • Fixed an issue where mainEntityOfPage overrides via an SEO Settings field could be the wrong model type

Link 3.2.24 · 2019.09.09

changed - 2019.09.09

  • Fixed a potential XSS issue if you used {% do seomatic.helper.paginate() %} and there was a malformed query string
  • Replaced frontend api route with an actionUrl()

Link 3.2.23 · 2019.09.06

changed - 2019.09.06

  • Fixed a typo in the environment info popup
  • If the SEO image is not on a local volume, avoid a potentially long round-trip by being paranoid, and defaulting to not generating the image transform immediately

Link 3.2.22 · 2019.09.03

changed - 2019.09.03

  • Cleaned up the title parsing to allow for siteName only titles more cleanly
  • If the source asset file is missing, set generateNow to false rather than null, overriding generateTransformsBeforePageLoad
  • Maintain the currently selected site between global nav items in the CP sidebar

Link 3.2.21 · 2019.08.26

changed - 2019.08.26

  • Fixed an issue where SEOmatic would errantly say the environment was disabled
  • Parse the SEOmatic environment variable in the environment check
  • Preflight to ensure that the source asset actually exists to avoid Craft hanging
  • Fix incorrect event type for RegisterSitemapUrlsEvent

Link 3.2.20 · 2019.08.16

changed - 2019.08.16

  • Added a Environment label on the Dashboard, with explanations for why the environment setting is overridden (if it is)

Link 3.2.19 · 2019.08.06

changed - 2019.08.06

  • Strip the query string at render time for the canonical link, to ensure any Craft 3.2 token params are stripped

Link 3.2.18 · 2019.07.31

added - 2019.07.31

  • Added searching, sorting, and pagination to the Content SEO pages

changed - 2019.07.31

  • Typecast the sourceName and sourceTemplate to a string before validation
  • Moved over to a more modern tokenfield library for SEO Keywords

Link 3.2.17 · 2019.07.25

changed - 2019.07.25

  • Typecast the sourceName and sourceTemplate to a string everywhere, to handle numeric section/template names
  • No longer use error and warning log levels for MetaItem debug messages
  • No longer use error log levels for MetaTag debug messages

Link 3.2.16 · 2019.07.18

added - 2019.07.18

  • Added Social Media Preview Target plugin setting
  • Added X-Robots-Tag: noindex header to the sitemaps to prevent the sitemaps themselves from appearing in the SERP

changed - 2019.07.18

  • Fixed an issue with the sitemap generation not respecting an already running queue

Link 3.2.15 · 2019.07.15

changed - 2019.07.15

  • Fixed an issue where assigning a Rich Text field to a JSON-LD property didn't work
  • Added typecast behavior to the MetaBundle model
  • Typecast the MetaBundle sourceName to a string

Link 3.2.14 · 2019.07.12

added - 2019.07.12

  • Added to the cache tag dependencies for the Field's preview data
  • Added sourceType to the InvalidateContainerCachesEvent event
  • Added siteId and sourceType to the source cache tag dependencies

changed - 2019.07.12

  • Prevented public accessing of the Social Media Preview
  • Added a 📣 in front of the Social Media Preview

Link 3.2.13 · 2019.07.11

added - 2019.07.11

  • Added Social Media Preview as a Live Preview target on Craft 3.2 or later

Link 3.2.12 · 2019.07.10

changed - 2019.07.10

  • Do not invalidate meta bundle for drafts and revisions in Craft 3.2 or later

Link 3.2.11 · 2019.07.09

changed - 2019.07.09

  • If an entry has its robots set to none or noindex, don't add it to the sitemap
  • Only append mtime to an SEO image if there are no query params already

Link 3.2.10 · 2019.06.27

added - 2019.06.27

  • The generated JSON-LD now uses a single root JSON-LD object with the JSON-LD types included in the @graph array

changed - 2019.06.27

  • Fixed an issue where headers were sent when the corresponding tags were not present
  • Fixed an issue that caused SEOmatic to throw an error after you deleted a Solspace Calender calendar
  • If we're not in local dev, tell it to generate the transform immediately so that urls like actions/assets/generate-transform don't get cached
  • Add an mtime cache busting URL param to all social media images
  • The Facebook and Twitter Transform and Transform Mode settings are now visible even if "Same As SEO Image" is selected

Link 3.2.9 · 2019.06.13

changed - 2019.06.13

  • Fixed an issue where the built JS bundles would error inside of webpack

Link 3.2.8 · 2019.06.13

changed - 2019.06.13

  • Switched over to startDateLocalized & endDateLocalized for Solspace Calendar defaults
  • Fixed an issue with the Breadcrumbs JSON-LD not being generated properly for sites that has a path as part of their URL (e.g.
  • Handle an edge-case where a migration didn't work properly to add ADS_TXT_HANDLE
  • Fixed an issue where an error would be thrown if a new Section was created, and you had a site group that had no sites in it
  • Fixed an issue where the SEOmatic CSS was affecting the CP CSS
  • Fixed the Look up Latitude/Longitude button; it now opens because Google requires an API key now

Link 3.2.7 · 2019.06.03

changed - 2019.06.03

  • Added the ability to pass in asArray as a parameter for CraftQL queries to a JSON-encoded array of data back
  • Updated build system

Link 3.2.6 · 2019.05.29

changed - 2019.05.29

  • Updated to 3.6 with over 900 JSON-LD Structured Data schemas!

Link 3.2.5 · 2019.05.29

changed - 2019.05.29

  • Added FAQPage schema type from
  • Ensure that URLs with spaces or other non-RFC1738 compliant characters are encoded
  • Replace "steps" by "step" in HowTo JSON-LD
  • Changed copyrightYear to output just the year
  • Fixed an issue with the JavaScript bundle not instantiating for SEO Settings fields
  • Updated to latest npm deps

Link 3.2.4 · 2019.05.24

changed - 2019.05.24

  • Fixed a typecasting issue that caused link rel="alternate" to render for entries that were disabled for a particular site
  • Remove pagination via query string for link rel="alternate"
  • Remove the pointless Twig_Node_Expression_EmptyCoalesce class

Link 3.2.3 · 2019.05.22

changed - 2019.05.22

  • Fixed an issue where the new SEO Settings Field implementation could cause images to be duplicated
  • Fixed an issue where JSON-LD schema could not be properly overridden via an SEO Settings field
  • Fixed an issue where the dynamically populated schema menu would have improper padding in the values

Link 3.2.2 · 2019.05.21

changed - 2019.05.21

  • Fixed an issue where a Section with no elements in it could cause the Sitemaps queue job to stall
  • Fixed Slack & Discord “summary card” CSS

Link 3.2.1 · 2019.05.21

changed - 2019.05.21

  • Fixed an issue where the Site Setup checklist wasn't accurately reflecting the site settings
  • Fixed an issue where trying to create a new section would throw a Type Error, preventing you from doing so

Link 3.2.0 · 2019.05.20

added - 2019.05.20

  • Added SEO Previews for LinkedIn, Pinterest, Slack, and Discord
  • Added the ability to control what SEO Previews appear in the sidebar
  • Added CraftQL support for fetching SEOmatic container meta data
  • Added support for Solspace Calendar events for custom metadata, JSON-LD, etc.
  • SEO Settings fields now default to whatever the parent element's Content SEO settings are when instantiating it
  • The Dashboard setup checklists now display checkboxes for items have have been set up properly
  • Added a SeoElementInterface to abstract out the support for custom elements

changed - 2019.05.20

  • Changed paginated rel="alternate" URLs to always point to the first page in other languages, not the paginated page (that may or may not exist)
  • Fixed an issue in getLocalizedUrls() so that it handles getElementUriForSite() returning both null and false
  • If a meta value with the key of target (used for SearchActions) doesn't have a { as the first character, it is not parsed as Twig
  • Fixed an issue where environment variables in tracking scripts were not parsed

Link 3.1.50 · 2019.04.30

added - 2019.04.30

  • Added the ??? Empty Coalesce operator to allow for the easy cascading of default text/image SEO values

changed - 2019.04.30

  • Fix the addXDefaultHrefLang so it doesn’t throw an error if enabled

Link 3.1.49 · 2019.04.22

changed - 2019.04.22

  • Don't create rel=alternate links for sections that aren't enabled for a site
  • Added a new addXDefaultHrefLang setting (which defaults to true) to control whether the x-default hreflang tag is included
  • Updated Twig namespacing to be compliant with deprecated class aliases in 2.7.x
  • Changed the default Google Tag Manager data layer variable back to the default dataLayer (which it should have been all along)
  • Fixed SoftwareApplication JSON-LD object model

Link 3.1.48 · 2019.04.16

changed - 2019.04.16

  • Added /cache/ to the default paths excluded in robots.txt to auto-exclude the default Blitz /cache/blitz/ path
  • SEOmatic now throws a AddDynamicMetaEvent event to give modules/plugins a chance to add any dynamic meta items to SEOmatic's containers
  • SEOmatic now throws a InvalidateContainerCachesEvent event whenever it clears its meta container caches, so other plugins/modules can listen in for it
  • No longer regenerate sitemaps when a Section is edited and 'regenerateSitemapsAutomatically' => false
  • Update the display name of sections, category groups, and products in Content SEO when they are edited

Link 3.1.47 · 2019.04.02

changed - 2019.04.02

  • Added Environment::determineEnvironment() so SEOmatic is can be smarter about automatically mapping environments
  • Allow the SEOmatic Environment plugin setting to be an Environment Variable in Craft 3.1 or higher
  • Allow for Section handles that are longer than 64 characters
  • Fixed an issue where the mainEntityOfPage could reset to the default WebPage if you saved the settings on panes other than General
  • Fixed an issue with paginated rel="alternate" links on a multi-site setup where the slugs differed from site to site

Link 3.1.46 · 2019.03.15

changed - 2019.03.15

  • Use dash instead of underscore for sitemap urls
  • Don't allow editing of the plugin settings if allowAdminChanges is false
  • Sort Content SEO listings by name to make things easier to find
  • Add missing properties to the Question JSON-LD schema

Link 3.1.45 · 2019.03.04

changed - 2019.03.04

  • Fixed an issue where container.clearCache wasn't using the correct cache key to invalidate the cache
  • Fixed an issue where Google Tag Manager would render in Live Preview
  • Added try/catch around alias/parseEnv to try to catch errors that shouldn't happen

Link 3.1.44 · 2019.02.18

changed - 2019.02.18

  • Fixed an issue with the URL in the sitemap index to the custom sitemap was invalid
  • Fixed an issue when using the meta containers controller with tracking scripts and asArray=true

Link 3.1.43 · 2019.02.15

changed - 2019.02.15

  • Fixed an issue in Content SEO if no field layouts are yet defined
  • Fixed a regression where pagination info is stripped from hreflang
  • Add JSON_HEX_TAG flag for encoding JSON-LD to ensure that < & > are escaped
  • Addressed an issue where you couldn't set the Main Entity of Page to nothing in Content SEO settings

Link 3.1.42 · 2019.02.07

changed - 2019.02.07

  • Fixed an issue where .env vars were not actually parsed for the Tracking settings

Link 3.1.41 · 2019.02.07

changed - 2019.02.07

Link 3.1.40 · 2019.01.30

changed - 2019.01.30

  • Fixed an issue with sitemap generation if your Section had a Neo field in it
  • Fixed an issue if you passed in no parameters to seomatic.helper.getLocalizedUrls() could cause the incorrect localized URLs to be returned
  • Removed errant error logging

Link 3.1.39 · 2019.01.24

added - 2019.01.24

  • Added a SEO Setup checklist to the Dashboard
  • Added support for pulling content from Neo fields

changed - 2019.01.24

  • Fixed an issue where the generated hreflang URLs were wrong if you had localized slugs
  • Sitemaps now return a 503 Service Unavailable an a Retry-After so bots will try back later if for some reason they can't be rendered for the current request (Async Queue generation, etc.)
  • Fixed a namespacing issue with UrlHelper
  • Handle the case where no sections have been set up yet more gracefully

Link 3.1.38 · 2019.01.03

changed - 2019.01.03

  • Register cache options for every type of request
  • Refactored the sitemaps and sitemap indexes to always be in the server root, as per the sitemaps spec

Link 3.1.37 · 2018.12.19

changed - 2018.12.19

  • Ensure that title truncation handles edge cases gracefully
  • Breadcrumbs in the CP now maintain the selected site
  • Parse sitemaps and sitemap URLs for aliases and as Twig templates
  • Don't try to add assets with null URLs to sitemaps

Link 3.1.36 · 2018.12.10

added - 2018.12.10

  • Added the ability to add additional sitemaps that exist out of the CMS into the sitemap.xml via Site Settings -> Sitemap as well as via plugin

changed - 2018.12.10

  • Fixed an issue where LocalBusiness JSON-LD type didn't inherit all of the properties from Place that it should
  • Fixed an issue with seomatic.helper.getLocalizedUrls not working as expected for routes other than the current request
  • Fixed an issue where plugin-generated custom sitemap URLs didn't have their lastmod respected for the sitemap index
  • Fixed an issue accessing metaBundleSettings in the Field when it doesn't exist

Link 3.1.35 · 2018.12.03

changed - 2018.12.03

  • Fixed an issue where the potentialAction JSON-LD for the Site Links Search was rendered even if it was left empty
  • Fixed an issue where the SEO Settings field did not properly override the mainEntityOfPage

Link 3.1.34 · 2018.11.28

added - 2018.11.28

  • Added a level 2 cache on the controller-based API requests for meta containers to improve "headless" performance
  • Added support for LinkedIn Insight analytics in Tracking Scripts
  • Added support for HubSpot analytics in Tracking Scripts
  • Display the status of tracking scripts in the listing section
  • Allow editing of the tracking scripts body scripts

changed - 2018.11.28

  • Added the Open Graph tag og:site_name
  • Removed craftcms/vue-asset composer dependency
  • Call App::maxPowerCaptain() whenever a queue is manually run (both via web and console request)

Link 3.1.33 · 2018.11.22

changed - 2018.11.22

  • Fixed an issue with socialTransform() throwing a Twig exception

Link 3.1.32 · 2018.11.19

added - 2018.11.19

  • Added <title> prefixes for the Control Panel and devMode Control Panel
  • Allow social media images to be either .jpg or .png formats

Link 3.1.31 · 2018.11.18

added - 2018.11.18

  • Added a console command ./craft seomatic/sitemap/generate to generate sitemaps via the CLI
  • Added the SEOmatic->Plugin setting Regenerate Sitemaps Automatically to control the automatic regenerate of sitemaps

changed - 2018.11.18

  • Fix division by zero error if no sections exist
  • Dynamically base the Twitter transform type from the current evaluated type, rather than hardcoding it

Link 3.1.30 · 2018.11.13

added - 2018.11.13

  • Added support for the ads.txt Authorized Digital Sellers standard

changed - 2018.11.13

  • Clear FastCGI Caches upon sitemap generation
  • If runQueueAutomatically is true return the generated sitemap immediately via http request
  • Adjusted Control Panel dashboard charts
  • Fixed an issue where the Content SEO settings would display sections that are not enabled for a given site

Link 3.1.29 · 2018.11.11

changed - 2018.11.11

  • Added the ability to show SEO Settings fields in the Element Index's Table Columns
  • Redid the Dashboard graphs to be more useful and modern looking
  • Modernized package.json and webpack build
  • Confetti on install (yay!)

Link 3.1.28 · 2018.11.07

changed - 2018.11.07

  • Remove __home__ from preview URIs
  • Fixed a regression that caused the SEO Settings field to not override things like Facebook/Twitter images properly
  • Fixed an issue that caused the SEO Settings field to not display tabs properly if the General tab was hidden

Link 3.1.27 · 2018.11.07

changed - 2018.11.07

  • Fixed an issue where sitemaps generated in the Control Panel did not have the proper cache duration set, so they were always invalidated
  • Disabled tracking scripts from sending Page View data during Live Preview
  • Ensure background image values are quoted for the SEO previews
  • If runQueueAutomatically is set, start running the queue job to generate the sitemap immediately

Link 3.1.26 · 2018.11.05

changed - 2018.11.05

  • Don't regenerate the sitemaps when elements are being re-saved enmasse via Section resaving
  • Fixed JavaScript console error due to outdated assets build

Link 3.1.25 · 2018.11.05

added - 2018.11.05

  • Moved sitemap generation to a queue job, to allow for very large sitemaps to be generated without timing out

changed - 2018.11.05

  • Normalize the incoming URI to account for __home__

Link 3.1.24 · 2018.11.02

added - 2018.11.02

  • Added the ability to control the depth that sitemaps should be generated for Categories (just like already existed for Structures)
  • Added EVENT_INCLUDE_CONTAINER event to manipulate containers
  • Always create sitemap URLs from the given site, since they have to have the same origin
  • Added labels to the Google, Twitter, and Facebook previews

changed - 2018.11.02

  • Fix rendering for MetaLink and MetaTag with multiple tags when requesting them via Controller
  • Fixed an issue where SEO Settings fields would override the Sitemap settings even if that was disabled
  • Fixed an issue with the SEO Settings field when switching between Entry Types
  • Pass down the $uri and $siteId to addDynamicMetaToContainers() to addMetaLinkHrefLang()
  • Fix rendering of canonical and home links from Controllers
  • Fixed an issue with there Dashboard charts could be out of sync if sections were deleted/renamed
  • Use the default transform mechanism for SEO images
  • Only include the fields the user is allowed to edit in the SEO Settings overrides
  • Fixed an issue where Twitter images could be resized improperly based on the card type

Link 3.1.23 · 2018.10.15

changed - 2018.10.15

  • Returns the correct sitemap.xml for multi-site "sister site" groups
  • Cache frontend templates on a per-site basis
  • Make sure that humans.txt links are full URLs
  • Handle the case where all Same As URLs are deleted
  • Fixed an issue where hreflang tags were still added even with the setting was disabled, but only for paginated entries
  • Changed the default title length to 70 and the default description length to 155
  • Fixed an issue where nested JSON-LD objects would contain erroneous key and include properties

Link 3.1.22 · 2018.09.25

changed - 2018.09.25

  • Fixed an issue where choosing All for sitemap Structure Depth resulted in it displaying nothing
  • Fixed an issue with the SiteLinks Search Box not having the correct format in query-input
  • Fixed an issue where Craft could sometimes hang if we asked for an image transform with generateNow = true

Link 3.1.21 · 2018.09.18

added - 2018.09.18

  • Added the .clearCache property to all meta containers, allowing them to be manually cleared via Twig
  • Don't include any dynamic metadata for response codes >= 400

changed - 2018.09.18

  • SEOmatic will now automatically take the dataLayer property into account for the script container's cache key
  • Better document titles for SEOmatic Control Panel pages
  • Remove vestigial Redirects classes
  • Don't check the response statusCode for console requests

Link 3.1.20 · 2018.09.12

added - 2018.09.12

  • Added memoization cache to the FieldHelper class to help improve inner loop performance
  • Add the ability to control structure depth for sitemaps

changed - 2018.09.12

  • For requests with a status code of >= 400, use one cache key

Link 3.1.19 · 2018.09.04

changed - 2018.09.04

  • Changed the Composer dependency for davechild/textstatistics to lock it down to 1.0.2 Semver?

Link · 2018.08.30

changed - 2018.08.30

  • Fixed an undefined index error

Link 3.1.18 · 2018.08.30

added - 2018.08.30

  • Added the Site Groups define logically separate sites Plugin Setting to allow for different Site Group use-cases

changed - 2018.08.30

  • Removed potential duplicates from og:locale:alternate
  • Don't include alternate or og:locale:alternate tags for Content SEO sections that have Sitemaps disabled
  • Handle disabled sections for sites in Content SEO better

Link 3.1.17 · 2018.08.29

changed - 2018.08.29

  • Fixed an error trying to access a property of a non-object in MetaContainers.php
  • Prevent classname conflict with older versions of PHP
  • Fix an issue where transform modes didn't work with Custom Image sources
  • Scale the logo to fit to 600x60 as per Google specs

Link 3.1.16 · 2018.08.23

changed - 2018.08.23

  • Handle elements that don't exist on other sites better
  • Don't include hreflang in sitemaps for sites where it has been disabled, whether through Content SEO or SEO Settings field settings
  • Hide Transform Image and Transform Type in the SEO Settings field if they aren't enabled
  • Fixed a conflicting use \craft\helpers\Json import

Link 3.1.15 · 2018.08.16

changed - 2018.08.16

  • Fixed an issue where sitemap caches were not getting properly cleared
  • Fixed an issue where elements disabled in a site were showing up in the hreflang
  • Fixed namespaces and custom sitemap event triggering

Link 3.1.14 · 2018.08.14

added - 2018.08.14

  • Added in the ability to override sitemap settings on a per-Entry/Category Group/Product basis
  • Implement Json::decode() to avoid large integers being converted to floats
  • If the SEO Settings field for an entry has Robots set to none or has sitemaps disabled, it isn't included in the hreflang
  • Added a setting to control whether hreflang tags are automatically added

changed - 2018.08.14

  • Ensure that the sitemap index cache gets invalidated when entries are modified
  • Specify rel="noopener" for external links.
  • Fix the order that the field migration happens to let the mapping magic happen
  • SEOmatic now requires Craft CMS 3.0.20 or later
  • Fixed an issue with paginated pages that have no results on them

Link · 2018.08.07

changed - 2018.08.07

  • Fixed a potential undefined index error with pull fields, resulting from the new cropping modes

Link 3.1.13 · 2018.08.07

added - 2018.08.07

  • Added the ability to choose between Crop (the default), Fit, or Stretch for the SEO, Twitter, and Facebook image transforms

changed - 2018.08.07

  • Brought back the missing ** Transform Facebook OpenGraph Image** field
  • Don't do anything with pagination on console requests

Link 3.1.12 · 2018.08.06

changed - 2018.08.06

  • Make the base Container class extend FluentModel so that containers can be accessed via templates just like MetaTags are
  • Ensure that we check to see if a container's include property is set before rendering it
  • Use a unique cache key for everything for the request, including the pagination and URI
  • Prep script containers for inclusion in includeScriptBodyHtml()

Link 3.1.11 · 2018.08.05

changed - 2018.08.05

  • Fixed a regression that caused an error loading entries

Link 3.1.10 · 2018.08.05

changed - 2018.08.05

  • Cleaned up how the pagination cache key works
  • Add the current request path into the mix for the meta container cache key
  • Force social media values to be displayed as strings

Link 3.1.9 · 2018.08.04

changed - 2018.08.04

  • Fixed an issue where SEOmatic wouldn't find Entry metadata if the entry was first saved as a Draft, then published
  • Include the pagination page in the cache key to ensure paginated pages are uniquely cached

Link 3.1.8 · 2018.08.03

changed - 2018.08.03

  • Fixed a regression that caused you to be unable to save Custom URL for an image source in the Control Panel

Link 3.1.7 · 2018.08.02

changed - 2018.08.02

  • Fixed an issue where Content SEO permissions were not respected properly in the Control Panel
  • Display the Tracking Scripts status in the Control Panel regardless of devMode setting

added - 2018.08.02

  • Don't render a canonical url for http status codes >= 400
  • Set meta robots tag to none for http status codes >= 400

secu­ri­ty - 2018.08.02

  • Decode HTML entities, then strip tags in safeCanonicalUrl()

Link 3.1.6 · 2018.07.25

changed - 2018.07.25

  • Really ensure that paginated pages are cached separately in the second-level cache

Link 3.1.5 · 2018.07.24

changed - 2018.07.24

  • No longer include any matched element in the Content SEO previews (which can be confusing if there are SEO Settings field overrides)
  • Ensure that paginated pages are cached separately in the second-level cache
  • Fixed an issue where changes to the SEO Image would not propagate to the Facebook/Twitter image when changed if "Same as SEO Image" was set

Link 3.1.4 · 2018.07.23 [CRITICAL]

secu­ri­ty - 2018.07.23 [CRITICAL]

  • Changed the way requests that don't match any elements generate the canonicalUrl, to avoid potentially executing injected Twig code

Link 3.1.3 · 2018.07.20

added - 2018.07.20

  • Added Additional Sitemap URLs to Site Settings -> Miscellaneous for custom sitemap URLs
  • Added EVENT_REGISTER_SITEMAP_URLS event so plugins can register custom sitemap URLs
  • Added the Referrer-Policy header based on the value of the referrer tag
  • Added the ability to control whether any http response headers are added by SEOmatic
  • Added the Facebook OpenGraph tags og:image:width & og:image:height
  • Added the Twitter card tags twitter:image:width & twitter:image:height

changed - 2018.07.20

  • Clear SEOmatic caches after saving the plugin settings
  • Fixed an issue where boolean settings in meta containers that were set to false would not override as expected

Link 3.1.2 · 2018.07.17

changed - 2018.07.17

  • Fixed an issue with the language being set to en_US instead of en-US in getLocalizedUrls()

Link 3.1.1 · 2018.07.14

changed - 2018.07.14

  • Fix parsing logic error in MetaValue
  • Fixed an issue where the SiteLinks Search Box wouldn't work because it errantly parsed the setting as Twig
  • Better title for pull field dropdown menus
  • Fix potential preview issues in Content SEO for certain multi-site setups

Link 3.1.0 · 2018.07.11

added - 2018.07.11

  • Added full support for Craft Commerce 2
  • Added a caching layer to includeMetaContainers() for improved performance
  • Added more fine-grained profiling data
  • Re-organized how event handlers are loaded to allow for compatibility with Fallback Site plugin

changed - 2018.07.11

  • Canonical URLs are now always lower-cased, and made absolute
  • Fixed an issue where the SiteLinks Search Box wouldn't work because it errantly parsed the setting as Twig
  • Allow for default empty settings for the SEO Settings field for things like the Twitter Card type, etc.
  • Added a warning to let people know tracking scripts are disabled when devMode is on
  • Fixed an issue with JSON-LD dropping certain properties if non-default types were selected

Link 3.0.25 · 2018.07.03

changed - 2018.07.03

  • Strip tags from the incoming for the canonicalUrl
  • Fixed the breadcrumbs link on the Plugin Settings page
  • Fixed an issue where users without admin privileges could not save the SEOmatic Plugin Settings
  • Fixed an issue where category groups would be lumped together in the sitemap
  • Fixed an issue with og:locale and og:locale:alternate being improperly formatted

Link 3.0.24 · 2018.06.25

added - 2018.06.25

  • Allow the use of Emoji in the plugin settings, such as for the devMode title prefix

changed - 2018.06.25

  • Set the default devMode title prefix to 🚧
  • Sync section / category group handles that are renamed
  • Don't log meta item error messages unless devMode is on
  • Don’t encode preview URLs
  • Fixed an issue where disabling a section’s URLs was not sync properly with the Content SEO settings

Link 3.0.23 · 2018.06.18

added - 2018.06.18

  • Added support for emojis in any of the SEOmatic fields

changed - 2018.06.18

  • Fixed an issue introduced in Craft CMS 3.0.10 that would cause JSON-LD to be not fully rendered
  • Allow nothing (--) to be selected as a Source Field in the Image/Video Sitemap fields
  • Added cache busting to the SEO preview images so that they will always display the latest image
  • Fixed an issue where removing an SEO Image from an SEO Settings field would cause it to persist

Link 3.0.22 · 2018.06.12

changed - 2018.06.12

  • Remove default value for devMode Prefix that prevented it from saving an empty value
  • Fix default values for Title position, Twitter Title position, and OG Title position
  • Allow for the setting of the dataLayer via Twig for Google Tag Manager
  • Added pagination support via seomatic.helper.paginate() to properly set the paginated canonicalUrl as well as the <link rel='prev'> and <link rel='next'> tags
  • Preserve the pagination trigger query string for the <link rel='hreflang'> tags

Link 3.0.21 · 2018.06.01

changed - 2018.06.01

  • Fixed ContactPoint rendering
  • Fixed an issue where an array of one JSON-LD would not render
  • Make JSON-LD URLs fully qualified

Link 3.0.20 · 2018.05.31

changed - 2018.05.31

  • Make sure twitter:creator and twitter:site are not resolve as aliases
  • Fixed an issue where syncBundleWithConfig could return null
  • Preserve the FrontendTemplate settings during meta bundle updates

Link 3.0.19 · 2018.05.21

changed - 2018.05.21

  • Ensure that the previews are not double-encoded
  • Remove vestigial meta bundles from the sitemap index

Link 3.0.18 · 2018.05.20

changed - 2018.05.20

  • Fixed an issue where the JSON-LD types weren’t correct
  • Sync bundle when Global SEO, Content SEO, and Site Settings are changed
  • Ensure that the first character of each meta item key is lower-cased
  • Render JSON-LD properties that have an @id set

Link 3.0.17 · 2018.05.19

changed - 2018.05.19

  • Make the various seomatic.helper functions more tolerant about having null passed in as a parameter

Link 3.0.16 · 2018.05.18

changed - 2018.05.18

  • Fixed a regression that the rel="alternate" link tags to not render properly
  • Fixed a regression where the Site Settings would throw an exception

Link 3.0.15 · 2018.05.17

changed - 2018.05.17

  • Fixed a regression that caused per-environment settings to be applied in the Control Panel
  • Fixed an issue that caused to not return null if no matching item was found

Link 3.0.14 · 2018.05.17

changed - 2018.05.17

  • Ensure that any image or video URLs in the sitemap are full absolute URLs
  • Fixed multiple issues with the gtag.js script that prevented it from working properly
  • HTML-encode all URLs and user-enterable data in the sitemaps and sitemap indexes
  • Fixed an issue where the meta items are not indexed properly, causing you to be unable to get them from the Twig API
  • Fixed an issue where meta items that should have been excluded by environment were not

Link 3.0.13 · 2018.05.15

changed - 2018.05.15

  • Fixed an issue where the gtag body script did not properly render
  • Fixed an issue where empty results for pull fields would not fall back on the parent (usually global) settings
  • Fixed an issue where seomatic.helper.loadMetadataForUri() might not replace the container metadata properly

Link 3.0.12 · 2018.05.10

changed - 2018.05.10

  • Switch from .one() syntax to [0] to account for eager loading of transformed social media images
  • Fixed an issue where SEOmatic incorrectly showed how many categories were in a category group on the Content SEO page
  • Fixed an issue where Content SEO social images wouldn't fall back on the global images if they were set to "Same as SEO Image" and the SEO Image was empty
  • Fixed a typo in the SEO Settings field settings
  • SEOmatic no longer renders the rel="author" tag if you have humans.txt disabled

added - 2018.05.10

  • Added translations for the SEO Settings Field options

Link 3.0.11 · 2018.05.03

changed - 2018.05.03

  • Removed 'interlace' => 'line' from the social media transforms, which inexplicably caused Focal Points to not be used
  • Fixed an issue where the JSON-LD would not fully render due to a regression

Link 3.0.10 · 2018.05.02

changed - 2018.05.02

  • Fixed incorrect social media permissions that prevented access to that settings page
  • Fixed an issue where section meta bundles would be improperly marked as field due to a regression in the migration importing code
  • Fixed an issue where categoryGroup meta bundles would be improperly marked as field due to a regression in the migration importing code
  • Removed OpenGraph tag dependency on facebookProfileId or facebookAppId being present
  • Fixed Pinterest verification tag dependency
  • Bumped the schemaVersion

added - 2018.05.02

  • Added a migration to remove any errant seomatic_metabundles rows that have sourceBundleType set to field

Link 3.0.9 · 2018.05.01

changed - 2018.05.01

  • Fixed an issue when migrating data from Craft 2.x Seomatic_Meta fields and an Asset was set to "Custom"

Link 3.0.8 · 2018.04.30

changed - 2018.04.30

  • Removed excessive validation that was causing SEOmatic Fields to not save properly

Link 3.0.7 · 2018.04.30

changed - 2018.04.30

  • Fixed a regression that caused SEOmatic to not import data from old Craft 2.x Seomatic_Meta fields properly

Link 3.0.6 · 2018.04.30

changed - 2018.04.30

  • Fixed a regression that caused the Section meta bundles to be the wrong type

Link 3.0.5 · 2018.04.27

changed - 2018.04.27

  • Better instructions for the Canonical URL
  • Updated translations
  • Use correct sourceBundleType for Field meta bundles
  • Fixed a regression that caused Content SEO sections to not save properly

Link 3.0.4 · 2018.04.26

changed - 2018.04.26

  • Don't display Sections / Category Groups in Content SEO that no longer have public URLs
  • Fixed an issue with console requests
  • Fixed an issue where Sections and Category groups with the same handle didn't work right in Content SEO
  • More validation on the data passed into the SEO Settings field as a config array

Link 3.0.3 · 2018.04.25

changed - 2018.04.25

  • Fixed an issue where re-using the same Field handle from other Field types would cause an exception to be thrown in the Control Panel
  • Improved the way SEOmatic matches the current element
  • Bypass the data cache entirely in the Control Panel, to avoid refresh issues
  • Fixed an issue where sometimes the correct data is not what is previewed in the Control Panel
  • Fixed an issue where the canonicalUrl seemed immutable on the Global SEO pages

Link 3.0.2 · 2018.04.24

added - 2018.04.24

  • og:image tags are now validated to ensure they are fully qualified URLs
  • og:image tags now are converted to absolute URLs (to handle protocol-less URLs)
  • twitter:image tags are now validated to ensure they are fully qualified URLs
  • twitter:image tags now are converted to absolute URLs (to handle protocol-less URLs)
  • Added missing translations

changed - 2018.04.24

  • Fixed an issue where Tracking Scripts permissions weren't all propertly presented

Link 3.0.1 · 2018.04.20

changed - 2018.04.20

  • Fixed an issue with sitemap indexes for elements that have null URLs
  • Fixed an issue with permissions and the Tracking Scripts page

Link 3.0.0 · 2018.04.17

added - 2018.04.17

  • Official GA release

Link 3.0.0-beta.24 · 2018.04.17

changed - 2018.04.17

  • Fixed a regression that caused the Site switcher to no longer work in the SEOmatic settings
  • Fixed a regression that could cause the sitemap index to include the appropriate sections

Link 3.0.0-beta.23 · 2018.04.16

changed - 2018.04.16

  • Fixed an issue where the social transforms sometimes might not render properly
  • SEOmatic now requires Craft CMS 3.0.2 or later (so we can listen to TemplateCaches::EVENT_AFTER_DELETE_CACHES)
  • Handle Section or Category Groups that may have had their handles renamed

added - 2018.04.16

  • SEOmatic now clears its caches any time TemplateCaches::EVENT_AFTER_DELETE_CACHES is triggered
  • If the FastcgiCacheBust plugins is installed, clear its caches when SEOmatic clears its own caches

Link 3.0.0-beta.22 · 2018.04.12

added - 2018.04.12

  • Added performance profiling to major bottlenecks
  • Lots of code cleanup courtesy of the PHP Inspections plugin

changed - 2018.04.12

    Link 3.0.0-beta.21 · 2018.04.06

    added - 2018.04.06

    • Don't display the Facebook/Twitter not set in the sidebar preview, only on the Settings pages
    • Added an Seomatic_Meta Field to more gracefully handle sites upgraded from Craft 2.x that used the old FieldType
    • If you add an SEO Settings field to a Section that has an old Craft 2.x Seomatic Meta field in it, it will automatically migrate the data and settings to the new field for you
    • SEOmatic will automatically map your old Craft 2.x Field settings to corresponding Content SEO settings

    changed - 2018.04.06

    • Better Dashboard display of SEO setup graphs
    • Fixed an issue with an improperly named Site / Social Media permission
    • Fixed an issue with the helper functions not gracefully handling null being passed in
    • Fixed validation errors that could cause you to be unable to save changes to various SEOmatic settings

    Link 3.0.0-beta.20 · 2018.04.02

    changed - 2018.04.02

    • Added additional fields for the mainEntityOfPage JSON-LD
    • Clicking on Settings on from the Control Panel now redirects to the appropriate SEOmatic sub-nav

    added - 2018.04.02

    • Added an SEO Settings Field that allows you to override SEO settings on a per-entry basis
    • Added a link for the Main Entity of Page type you have specified
    • Added seomatic.helper.truncate and seomatic.helper.truncateOnWord helper functions for truncating text

    Link 3.0.0-beta.19 · 2018.03.28

    changed - 2018.03.28

    • Fixed an issue where you could not disable humans.txt or robots.txt
    • Fixed an issue where the computedType wasn't saved properly for Global and Content SEO
    • Fixed an issue with JSON-LD generated for content containers not cascading as intended

    added - 2018.03.28

    • Added the ability to globally disable sitemap rendering

    Link 3.0.0-beta.18 · 2018.03.26

    changed - 2018.03.26

    • Preserve Site Identity and Site Creator settings across bundle updates

    Link 3.0.0-beta.17 · 2018.03.26

    changed - 2018.03.26

    • Check against siteType, siteSubType and siteSpecificType being null on the Site Settings pages
    • Updated humans.txt template to display information from the Creator settings
    • Separate Identity and Creator Entity Brand fields
    • Remove JSON-LD properties that have just one entry in them (just the @type)
    • Fixed an issue where hreflangs could be incorrect

    added - 2018.03.26

    • Documented the Identity and Creator Site Settings variables
    • Added menu and acceptsReservations to the FoodEstablishment JSON-LD
    • Added link rel=“home” to the default tag container
    • Added seomatic.helper.getLocalizedUrls() function that will return a list of localized URLs
    • Added sameAs social media URLs to the Identity JSON-LD
    • Added og:locale:alternate Facebook OpenGraph tags

    Link 3.0.0-beta.16 · 2018.03.25

    changed - 2018.03.25

    • Fixed an issue where fresh installations were not taken to the Welcome screen
    • Replaced old SEOmatic icon in the Asset Bundle
    • Fixed an issue where Identity and Creator settings were not properly defaulted from the config files on fresh installations
    • Better parsing of the JSON-LD config files

    added - 2018.03.25

    • Added Miscellaneous settings with Google Site Links search settings
    • Preserve user settings in the Tracking Scripts when bundles are updated
    • Fleshed out the JSON-LD for mainEntityOfPage, identity, and creator

    Link 3.0.0-beta.15 · 2018.03.24

    changed - 2018.03.24

    • Separated the mainEntityOfPage templates off into a partial
    • Cleaned up the Identity Settings & Creator Settings pages

    added - 2018.03.24

    • Added a description of JSON-LD Structured Data to the Identity & Creator pages
    • Added Main Entity of Page settings on the Global SEO and Content SEO General pages

    Link 3.0.0-beta.14 · 2018.03.23

    changed - 2018.03.23

    • Fixed an issue with console requests raising an exception in addDynamicMetaToContainers()
    • Add errors display to all settings templates

    added - 2018.03.23

    • Implemented dynamic Identity Settings & Creator Settings pages

    Link 3.0.0-beta.13 · 2018.03.22

    changed - 2018.03.22

    • Don't look for getPathInfo() during a console request
    • Fixed an issue switching between sites on the Tracking scripts settings
    • Revise how seoFileLink() works
    • Handle eager loaded elements in TextHelper

    Link 3.0.0-beta.12 · 2018.03.20

    added - 2018.03.20

    • Added colored status indicators on the Content SEO index page that match the colors in the donut chart on the Dashboard
    • Added seomatic.helper.seoFileLink() to allow setting the X-Robots-Tag and Link headers on static files as per Advanced rel="canonical" HTTP Headers
    • Added a Link header for the canonical URL

    changed - 2018.03.20

    • Don't display SEO previews if the Section has no URLs

    Link 3.0.0-beta.11 · 2018.03.19

    changed - 2018.03.19

    • Refactored the meta bundle update process to preserve user configured meta bundle settings
    • Throw a 404 if a sitemap is hit but sitemaps have been disabled for that section
    • Exclude section sitemaps from the sitemap index if sitemaps have been disabled for that section

    Link 3.0.0-beta.10 · 2018.03.18

    changed - 2018.03.18

    • Reverted incorrect bundle merging

    Link 3.0.0-beta.9 · 2018.03.18

    added - 2018.03.18

    • Added Schema helper class & controller in preparation for dynamic schema types displayed in the Control Panel

    changed - 2018.03.18

    • Fixed incorrect moz-transform vendor prefix that caused the sidebar SEO preview to look weird in FireFox
    • Fixed a nasty bug that could cause improper merging of config arrays, resulting in an ever-growing column size in the db

    Link 3.0.0-beta.8 · 2018.03.16

    changed - 2018.03.16

    • Fixed per-environment rendering of attributes
    • Made meta bundle updating non-destructive to existing data

    Link 3.0.0-beta.7 · 2018.03.16

    added - 2018.03.16

    • Added a "Same as Global Site Name Position" setting as the default for the Site Name Position Content SEO settings

    changed - 2018.03.16

    • Fixed an issue where the last breadcrumb on the Content SEO edit-content page was a 404
    • Fixed a caching issue that could result in stale data if you used seomatic.helper.loadMetadataForUri()
    • Don't automatically generate thumbnails for videos in the sitemap
    • Changed the Dashboard charts over to gauge charts

    Link 3.0.0-beta.6 · 2018.03.15

    added - 2018.03.15

    • Check whether the seomatic_metabundles table exists before installing any even listeners

    Link 3.0.0-beta.5 · 2018.03.15

    changed - 2018.03.15

    • Fixed an issue where the caching didn't work properly for multi-sites

    Link 3.0.0-beta.4 · 2018.03.14

    added - 2018.03.14

    • Added a validation rule for genericAddressCountry so it saves
    • Added a validation rules for renderEnabled, separatorChar, displayAnalysisSidebar and displayPreviewSidebar so you can save the plugin settings.
    • Added initial Dashboard

    changed - 2018.03.14

    • Don't install event listeners until after all plugins have loaded, to ensure db migrations have been run

    Link 3.0.0-beta.3 · 2018.03.14

    added - 2018.03.14

    • Added a migration for older Craft 2.x sites that had SEOmatic installed already, so that SEOmatic for Craft 3 can install its base tables

    changed - 2018.03.14

    • Fixed an issue with an incorrect redirect destination after saving a Tracking Scripts setting in the Control Panel
    • Optimized the images used in the documentation

    Link 3.0.0-beta.2 · 2018.03.13

    changed - 2018.03.13

    • Fixed issues with : void on PHP 7.0.x

    Link 3.0.0-beta.1 · 2018.03.13

    added - 2018.03.13

    • Initial beta release