Product support

Visit this product's website for support.


Key Features

  • Automatically generates titles and other meta tags on the page
  • Manages custom meta tags from the backend
  • Manages the robots meta tag in an easy way
  • Sets a favicon from October's Mediafinder
  • Manages Open Graph parameters
  • Edits .htaccess without leaving the backend
  • Partially migrates from Arcane.SEO with a single click
  • Generates a sitemap.xml file automatically with parameters in URLs
  • Supports RainLab.Pages,
  • Provides an easy way to extend custom models for SEO parameters in the backend
  • Uses Twig parameters to fill meta tags
  • Plus numerous smaller features you will love :)
Global SEO settings in the OctoberCMS backend

Using SEO Storm

Install the plugin and then add the SEO component in site's head section, whether it's a page or layout.

Go to Settings -> SEO Storm -> General settings and configure to suit your needs.

Common use-cases

Global prefix/suffix in the page's title

  1. Go to Settings -> SEO Storm -> General settings and set Enable title and description meta tags to on.
  2. Fill the Site name and Site name separator fields.
  3. Select if you want to have the Site name added to the beginning or to the end (prefix or suffix).

Global prefix/suffix in the page's title

Automatically set the title of the page based on a model (such as a blog post)

The following instructions will work for any other field that is accessible from the page. The only thing you have to decide is the variable title you would like to set it by. In this example we'll use the Question model which is featured on our page here.

Go to Editor -> Pages -> Select the page -> and click the SEO Storm button. Complete the field using Twig syntax as shown in the screenshot below:

Automatically set the meta attribute based on model values

The same approach will work for most of the other parameters. See the Dynamic meta tags section for more information.

Generating your sitemap.xml

Go to Settings -> SEO Storm -> General settings and set Enable sitemap.xml to On.

That's basically everything you need. Just make sure that all the pages you want to be included in the sitemap.xml have the Enable in sitemap.xml option checked

Enable in sitemap.xml checkbox

If you want to handle more advanced customizations, see the Advanced sitemap.xml section.

Dynamic meta tags

In many situations you'll want to have the meta attributes set dynamically based on the variables on the page. A typical example would be a blog post which uses the {{ post }} variable. Using Dynamic meta tags we can set the attributes based on such variables.

Tags that are currently using Twig syntax:

  • meta title
  • meta description
  • canonical URL
  • advanced robots
  • OG type
  • OG title
  • OG description
  • OG image
  • OG video
  • Twitter card
  • Twitter title
  • Twitter description
  • Twitter image

Fallback values

Keep in mind that you can basically fill those fields with anything that is accepted by Twig. This includes conditionals in the case of empty values. For example let's say you have a model that has two fields: name and meta_title. You want to set the title using the meta_title field but if it's not present, you want SEO Storm to use name instead. You can build the logic like this:

    {{ model.seo_options.meta_title ?: model.name }}

Advanced sitemap.xml

You may want to fill parameters in you URLs based on the models in the page (e.g. a blog post's slug). To achieve that, you can set the following parameters in your page's settings:

  1. Model class
  2. Model params
  3. Model scope

In the following example we have the model Question, but you may easily use Post or any other value that this page is displaying.

Advanced sitemap.xml configuration

Take a closer look at those two parameters:

  1. the class (e.g. Author\Plugin\Models\ModelClass) to the model_class field, and
  2. model parameters that match the parameters in the URL (e.g. slug:slug).

The first one will say SEO Storm, which model it should use for this page to generate URLs in the sitemap. The second one is pairing between the URL parameter and model attribute (which match which).

Model params

As described above, the first parameter of the definition is the URL parameter while the second one is the corresponding model attribute.

For example: post:slug means we have a post parameter in the URL and slug attribute in the model.

If you want to add more attributes, split them by pipe character (|). For example: date:date|slug:slug.

You may want to create a URL such as /blog/:category/:postslug. To achieve this we use the dot syntax to fetch the attribute from the related object, as this example demonstrates:


This method will work for all relation types but if it's a "one to many" relationship, remember that only the first one will be used.

Model scopes

Sometimes you may want to filter the records listed in the sitemap.xml. To do this define a scope in your model and provide its name in the third parameter. It will then be used by SEO Storm to filter the records. More about scopes here.

For Posts generated by the RainLab.Blog you can use isPublished to fetch the published ones only. Otherwise, all of the posts will be listed in the sitemap.xml.

Open Graph & Twitter cards

You can set Open Graph and Twitter cards attributes using SEO Storm, as well. Keep in mind, that both are filled using OG fields. (SEO Storm doesn't support using different content for each).

If you want to learn more about OG and Twitter cards take a look at the guide for Open Graph from Facebook and the guide for Twitter cards from Twitter.

Open Graph and Twitter attributes

Currently supported tags are:

  • og:title defaults to page's meta_title or title,
  • og:description defaults to page's meta_description, or site_description from the Settings,
  • og:image defaults to site_image from the Settings,
  • og:type defaults to website,
  • twitter:title got from og:title,
  • twitter:description got from og:description,
  • twitter:image got from og:image.

Note: Please read the guidelines from Facebook and Twitter linked above for recommended values on these tags. Take a look at the Dynamic meta tags section to see which of those support the Twig syntax.

Custom models with SEO parameters

SEO Storm lets you easily define the models to which you'd like to have SEO parameters dynamically attached.

You don't have to make any other customizations - SEO Storm takes care of extending the models and storing the attributes in the DB. We call such models Stormed. To register a model as Stormed implement a registerStormedModels method in your plugin's registration file (Plugin.php).

Add the registerStormedModels() method in your Plugin.php file, for example:

    public function registerStormedModels()
        return [
            '\Author\Plugin\Models\ExampleModel' => [
                'placement' => 'tabs',

Using this definition SEO Storm will take care of extending the model and form widgets in backend controllers. The above example will add SEO fields to the ExampleModel as shown in the following example (the example uses our Question model):

Example stormed model registration

If you wish to customize the fields displayed in the backend you can use the excludeFields attribute in the registration method. You may also use inverted syntax, so that all the fields are removed except the ones listed. See the example below:

    public function registerStormedModels()
        return [
            '\Author\Plugin\Models\ExampleModel' => [
                'placement' => 'tabs',
                'excludeFields' => [
            '\Author\Plugin\Models\ExampleModel2' => [
                'placement' => 'secondaryTabs',
                'excludeFields' => [

The following parameters are supported in the registerStormedModels method:

  • placement defines where the fields are going to be rendered. It's either: fields, tabs and secondaryTabs,
  • prefix defines the relation prefix to automatically add to the fields definition, by default it's seo_options (you have to know what you're doing before changing it, so please be careful)
  • excludeFields will exclude the fields from the form as described above

Note: By default, SEO Storm takes care of CMS pages and Static pages so you don't have to define them yourself.


Problem: Cards looking bad when pasting a link on social media

Reason: Open Graph is not enabled or it's configured improperly. See the guide for Open Graph from Facebook and the guide for Twitter cards from Twitter to get better understanding on the parameters.

Future plans/features

  1. Order sitemap.xml urls using models' priorities,
  2. Take all SEO attributes of the models into consideration while generating sitemap.xml
  • Found the plugin not useful on 14 May, 2024

    Not working

  • author

    Replied on 14 May, 2024

    Thanks for the review.

    Could you specify what exactly doesn't work in your case?

  • Found the plugin useful on 18 Nov, 2021

    Excellent SEO plugin. Before now, we made our SEO manually cause october have some metas tags in core, and it's not a big deal to make them dynamic depending on model with small piece of code in the PHP tab. The only missing feature was the sitemap.xml generation because the rainlab module is a pain to use.

    Now, with SEO Storm, we can manage all aspects of the website SEO, with a single module, in an intuitive and elegant interface. Congratulation to the inIT team !

  • author

    Replied on 19 Nov, 2021

    Thanks for your kind words :)

    We encourage you to take a look at the rest of our products and service.

  • Found the plugin useful on 15 Nov, 2021

    Excellent plugin, easily integrated into any model. Conveniently controlled. I am already preparing a translation into Russian.

  • author

    Replied on 19 Nov, 2021

    Thanks for the review and the translation :)


Fix tests in October 3.6

Jun 04, 2024


Add robot_index and robot_follow as translatable fields

May 17, 2024


Add Schema component

Mar 07, 2023


Fix overwritten sitemap and the canonical tag is always added with the url of the current page

Feb 02, 2023


Added compatibility with october 3.1

Oct 07, 2022


Fix purgeable with default array

Jul 16, 2022


Fix problem with loading extensions after they already were initialized

Jun 11, 2022


Add twig october extensions to templateFromString(can now be used in seo storm) and small fix canonical url

Jun 01, 2022


Fix run 404 page

May 30, 2022


Fix for old MYSQL

May 30, 2022


Fix duplicate relation model in seo option table

May 28, 2022


Add twitter:site, twitter:creator and fix OG:card

Apr 09, 2022


Extend arcaneseo migrator by cms page and add method setSeoAttribute in seo component

Mar 19, 2022


Update to October 2.2

Mar 03, 2022


Fix optional parameters #44

Mar 02, 2022


Add support for scope parameters and fix translatable fields in models

Mar 02, 2022


Remove optional parameters from sitemap #41

Feb 17, 2022


Add translatable fields for CMS pages

Feb 17, 2022


Fix excluding fields and deprecation message

Feb 11, 2022


Canonical URL for static pages

Feb 10, 2022


Fix colons

Feb 10, 2022


Fix canonical URL default value

Feb 10, 2022


Added Russian localization

Nov 16, 2021


Fix sitemap after changing to camelCase

Oct 26, 2021


Fix seo storm attribute

Oct 25, 2021


Remove unneeded handler

Oct 25, 2021


!!! Seo attributes changed to camelCase issue initbiz/seostorm-plugin!23

Oct 25, 2021


Fix bug with setting seo attributes

Oct 17, 2021


!!! Dropped Schema and minify support. Provided full compatibility with October 2.0

Oct 08, 2021


!!! Deleted automatic RainLab.Blog handler

Oct 08, 2021


First version of the plugin

Oct 08, 2021