GithubHelp home page GithubHelp logo

seostorm-plugin's Introduction

SEO Storm - ultimate SEO tool for OctoberCMS!

SEO Storm - ultimate SEO tool for OctoberCMS

Originally forked from the abandoned Arcane.SEO plugin we have made numerous improvements and added many new features.



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 :)

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:

postslug:slug|category:categories.slug

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. Additionally, you can pass a parameter to scope after the : character, example isPublished:yesterday

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' => [
                    'model_class',
                    'model_scope',
                    'model_params',
                ],
            ],
            '\Author\Plugin\Models\ExampleModel2' => [
                'placement' => 'secondaryTabs',
                'excludeFields' => [
                    '*',
                    'meta_title',
                    'meta_description',
                    'og_image',
                    'og_ref_image',
                    'og_title',
                    'og_description',
                ],
            ],
        ];
    }

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.

Troubleshooting

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

seostorm-plugin's People

Contributors

dblackcat avatar drumbeldore avatar dzapek avatar guus-frenken avatar jumperrz avatar ladylain avatar phaberest avatar publialex avatar tomaszstrojny avatar xinix avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

seostorm-plugin's Issues

Problem with OG image, Blog meta title translation and sitemap

Hello,
When try to add an OG image that I select from Media it's retrieve in source this

<meta property="og:image" content="/OG_images/inBG_head.png" /> , but it doesn't work . How can I change to full url ? (in other page set og image that previously uploaded with this twig {{ 'assets/images/about/rabotodateli.png'|theme }} and works like charm.

Storm SEO Settings no reflecting on the website

Hello, thank you for continuing the project.

I'm having trouble making the Storm SEO plugin work, I removed the Arcane SEO plugin and installed the Storm SEO.

When I configure the page title and description in the Storm SEO Settings it doesn't reflect on the website, I don't see it in the source code and neither in google analytics.
The website has a default layout html file and some other website pages.

this is our SEO Storm Settings configuration

image
image (1)
image (2)
image (3)

and this is an example of one of our pages, when we fill the input fields with page title, note that in this pages we do not have the

image (4)

this is our default html page where we have the but we don't have the SEO Storm button, should we type some code here?

image (5)

Can you please give me some tips on how to resolve this issue?
thank you for your support

Critical error with latest october cms 3.1

Hello,

Just installed octobercms 3.1, I get a critical error due to seostorm when I go to the editor tab :

Class "RainLab\Translate\Models\Locale" not found

Best regards,

Alex

Unable to edit meta tags on CMS pages

When I create a new CMS page, I am able to configure the SEO Storm attributes 1 or 2 times. After that, the attributes no longer get saved.

I change some attributes and click "save", but the attributes do not get saved, and after refreshing the page, the attributes are back to their old values.

I am using October CMS v2.1.15 and Initbiz.SeoStorm v3.0.0 from the Marketplace.

Support for multilingual sites sitemap.xml

Hello!
Can you tell me if I can enable sitemap.xml support for multilingual sites? And can they be made separate for each language?
I tried but the map is only built for one default language!

October 3.0.27 Error log

Hello!
In the Octobercms 3.0.27 logs, there is such an error
Error: Call to a member function run() on null in /var/www/imperial.local/public_html/plugins/initbiz/seostorm/routes.php:32

Plugin missing in the System Updates

Hello,

I installed the plugin, I see it in the backend and it works OK. But it is missing in the plugin list in System Updates section and therefore in the Deploy plugin. Can you help?

Thank you

plugin_missing

twig_template_from_string(): Argument #1 ($env) must be of type Twig\Environment, string given

After installing the SEO Storm plugin, I am getting this error when I load a front end page. I notice it is conflicting with the Twig Extensions plugin from Vojta Svoboda. Is there a way to resolve this?

twig_template_from_string(): Argument #1 ($env) must be of type Twig\Environment, string given, called in /modules/system/classes/MarkupExtensionItem.php on line 166

function twig_template_from_string(Environment $env, $template, string $name = null): TemplateWrapper

Thanks.

public array $seoAttributes error

October CMS version: v2.2.35

Hello. The plugin installs nicely but has bust my Editor section. I get the following error:

Screenshot 2023-01-27 at 22 38 27

I also have no admin settings which seems strange.

`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.`

Because the Editor is broken I can't add the SEO component which I think would solve the issue.

Any help appriciated.

Call to a member function getFileName() on null in /home/ploi/domain.com/modules/cms/classes/Controller.php:696

After update the component is causing this error

Error: Call to a member function getFileName() on null in /home/ploi/domain.com/modules/cms/classes/Controller.php:696

when i remove this in the file initbiz\seostorm\components\seo\default.htm the site is working

{% set canonical = include(template_from_string(SELF.getSeoAttribute('canonical_url'))) %}
link rel="canonical" href="{{ SELF.getCanonicalUrl(canonical) }}">

Upload favicon instead of using media manager

Hello (again),

Would it be possible to upload the favicon using fileupload plugin instead of using media manager ?

The problem we have by using media manager is that the client have access to it too, and we don't want to "polluate" his directory with technical images like favicon, so it would be better to upload it using fileupload widget.

Thank you

Best regards,

Robots.txt not available in multisite

Hello,

Lighthouse return me an error about invalid robots.txt file in a multisite installation.

I have website in 2 languages, using multisite feature of october cms 3.x

https://www.mywebsite.com/fr
https://www.mywebsite.com/en

The robots.txt is accessible in this url :
https://www.mywebsite.com/robots.txt

But I get a 404 error when I consult these urls :
https://www.mywebsite.com/fr/robots.txt
https://www.mywebsite.com/en/robots.txt

I think, in order to make lighthouse happy, that the robots.txt file should be accessible even when using language prefix.

Best regards,

Custom seo_options fields

Hello!
Thanks for great plugin.
Is there some built-in way to create custom seoOptions fields, e.g. h1, h2, etc.?

Call to undefined method October\Rain\Halcyon\Builder::addFillable()

After installed plugin I cannot acess Page section. I had following error. My octobercms build is 473

Call to undefined method October\Rain\Halcyon\Builder::addFillable()
/vendor/october/rain/src/Halcyon/Builder.php line 789

| CALLED CODE | DOCUMENT | LINE

-- | -- | -- | --
71 | October\Rain\Halcyon\Builder->__call(…) |   |  
70 | call_user_func_array(…) | ~/vendor/october/rain/src/Halcyon/Model.php | 1697
69 | October\Rain\Halcyon\Model->__call(…) | ~/modules/cms/Classes/CmsCompoundObject.php | 485
68 | Cms\Classes\CmsCompoundObject->__call(…) | ~/plugins/initbiz/seostorm/eventhandlers/BackendHandler.php | 91
67 | Initbiz\SeoStorm\EventHandlers\BackendHandler->Initbiz\SeoStorm\EventHandlers{closure}(…) |   |  
66 | call_user_func(…) | ~/vendor/october/rain/src/Extension/ExtendableTrait.php | 60
65 | October\Rain\Extension\Extendable->extendableConstruct() | ~/vendor/october/rain/src/Extension/Extendable.php | 31
64 | October\Rain\Extension\Extendable->__construct() | ~/vendor/october/rain/src/Halcyon/Model.php | 158
63 | October\Rain\Halcyon\Model->__construct(…) | ~/modules/cms/Classes/Page.php | 56
62 | Cms\Classes\Page->__construct() | ~/vendor/october/rain/src/Halcyon/Model.php | 550
61 | October\Rain\Halcyon\Model::on(…) | ~/modules/cms/Classes/CmsObject.php | 191
60 | Cms\Classes\CmsObject::inTheme(…) | ~/modules/cms/Classes/CmsObject.php | 131
59 | Cms\Classes\CmsObject::listInTheme(…) | ~/modules/cms/controllers/index.php | 92
58 | Cms\Controllers\Index->Cms\Controllers{closure}() |   |  
57 | call_user_func(…) | ~/modules/cms/Widgets/TemplateList.php | 161
56 | Cms\Widgets\TemplateList->getData() | ~/modules/cms/Widgets/TemplateList.php | 119
55 | Cms\Widgets\TemplateList->render() | ~/modules/cms/controllers/index/_sidepanel.htm | 16
54 | include(…) | ~/modules/system/Traits/ViewMaker.php | 247
53 | Backend\Classes\Controller->makeFileContents(…) | ~/modules/system/Traits/ViewMaker.php | 97
52 | Backend\Classes\Controller->makePartial(…) | ~/modules/cms/controllers/index/index.htm | 3
51 | include(…) | ~/modules/system/Traits/ViewMaker.php | 247
50 | Backend\Classes\Controller->makeFileContents(…) | ~/modules/system/Traits/ViewMaker.php | 109
49 | Backend\Classes\Controller->makeView(…) | ~/modules/backend/Classes/Controller.php | 419
48 | Backend\Classes\Controller->execPageAction(…) | ~/modules/backend/Classes/Controller.php | 296
47 | Backend\Classes\Controller->run(…) | ~/modules/backend/Classes/BackendController.php | 165
46 | Backend\Classes\BackendController->run(…) |   |  
45 | call_user_func_array(…) | ~/vendor/laravel/framework/src/Illuminate/Routing/Controller.php | 54
44 | Illuminate\Routing\Controller->callAction(…) | ~/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php | 45
43 | Illuminate\Routing\ControllerDispatcher->dispatch(…) | ~/vendor/laravel/framework/src/Illuminate/Routing/Route.php | 212
42 | Illuminate\Routing\Route->runController() | ~/vendor/laravel/framework/src/Illuminate/Routing/Route.php | 169
41 | Illuminate\Routing\Route->run() | ~/vendor/laravel/framework/src/Illuminate/Routing/Router.php | 658
40 | Illuminate\Routing\Router->Illuminate\Routing{closure}(…) | ~/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php | 30
39 | Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(…) | ~/modules/backend/Classes/BackendController.php | 68
38 | Backend\Classes\BackendController->Backend\Classes{closure}(…) | ~/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php | 131
37 | Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(…) | ~/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php | 53
36 | Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(…) | ~/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php | 41
35 | Illuminate\Routing\Middleware\SubstituteBindings->handle(…) | ~/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php | 149
34 | Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(…) | ~/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php | 53
33 | Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(…) | ~/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php | 49
32 | Illuminate\View\Middleware\ShareErrorsFromSession->handle(…) | ~/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php | 149
31 | Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(…) | ~/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php | 53
30 | Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(…) | ~/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php | 63
29 | Illuminate\Session\Middleware\StartSession->handle(…) | ~/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php | 149
28 | Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(…) | ~/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php | 53
27 | Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(…) | ~/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php | 37
26 | Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(…) | ~/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php | 149
25 | Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(…) | ~/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php | 53
24 | Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(…) | ~/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php | 68
23 | Illuminate\Cookie\Middleware\EncryptCookies->handle(…) | ~/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php | 149
22 | Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(…) | ~/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php | 53
21 | Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(…) | ~/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php | 102
20 | Illuminate\Pipeline\Pipeline->then(…) | ~/vendor/laravel/framework/src/Illuminate/Routing/Router.php | 660
19 | Illuminate\Routing\Router->runRouteWithinStack(…) | ~/vendor/laravel/framework/src/Illuminate/Routing/Router.php | 635
18 | Illuminate\Routing\Router->runRoute(…) | ~/vendor/laravel/framework/src/Illuminate/Routing/Router.php | 601
17 | Illuminate\Routing\Router->dispatchToRoute(…) | ~/vendor/october/rain/src/Router/CoreRouter.php | 20
16 | October\Rain\Router\CoreRouter->dispatch(…) | ~/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php | 176
15 | Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http{closure}(…) | ~/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php | 30
14 | Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(…) | ~/plugins/bedard/debugbar/vendor/barryvdh/laravel-debugbar/src/Middleware/Debugbar.php | 51
13 | Barryvdh\Debugbar\Middleware\Debugbar->handle(…) | ~/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php | 149
12 | Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(…) | ~/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php | 53
11 | Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(…) | ~/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php | 46
10 | Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(…) | ~/vendor/october/rain/src/Foundation/Http/Middleware/CheckForMaintenanceMode.php | 25
9 | October\Rain\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(…) | ~/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php | 149
8 | Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(…) | ~/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php | 53
7 | Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(…) | ~/vendor/october/rain/src/Http/Middleware/TrustHosts.php | 46
6 | October\Rain\Http\Middleware\TrustHosts->handle(…) | ~/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php | 149
5 | Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(…) | ~/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php | 53
4 | Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(…) | ~/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php | 102
3 | Illuminate\Pipeline\Pipeline->then(…) | ~/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php | 151
2 | Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(…) | ~/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php | 116
1 | Illuminate\Foundation\Http\Kernel->handle(…) | ~/index.php

Sitemap entries for Static Pages shows current timestamp instead of updated_at value

When I check the 'Use "updated_at" from the model as "Last time modified"' option under the Sitemap tab in a RainLab.Pages page, the sitemap entry shows the current timestamp instead of the updated_at value.

Every time I refresh the page, the <lastmod> value changes to the current timestamp.

I am using October CMS v2.1.15 and Initbiz.SeoStorm v3.0.0 from the Marketplace.

Textarea instead of textfields for SEO storm page options

Hello,

As SEO storm embrace the power of twig in page options and so, we can create conditions etc.... Would it be possible to have textarea instead of textfields for better readability ? (the best would be code editor but don't know if it's possible)

image

Thank you

Remove core meta title and description on CMS page

Hello,

First, thank you for your plugin. All necessary features are integrated in an elegant way, congratulation.

I have a very small suggestion, coming from our SEO manager. October CMS already have a meta title and meta description field for CMS page, it would be great to remove (or hide ?) them when SEO Storm is enabled as they have the same purpose and can bring confusions.

It's a small detail, but you now : the devil is in the details 👿

Best regards,

Seo translations in cms pages

Hi, I am creating a multilingual website, using this great module SEO Storm.
But i'm having trouble to understand how/where to translate the SEO variables for CMS Pages.
There are no language variables in corners as in regular models fields to switch language. I don't know how to process and didn't found some clue in the documentation.
Can you help ? Thanks

Support for Rainlab-translate 2.06?

Hello.
Thanks for your plugin!
Is there support for Rainlab-translate 2.06?
Or you can suggest what changes to make so that your plugin supports Rainlab-translate 2.06.
Thank you!

How to use twig templates?

Hello,

I've add a custom model to one of plugins that we use on our site.

public function registerStormedModels() { return [ 'Fytinnovations\Careers\Models\Job' => [ 'placement' => 'tabs', ], ]; }

Everything is ok on backend, but cant figure out how to extract (show) the thing that I wrote inside meta TAB (page title and description) like Dynamic meta tags ... Tryed with {{this.page.meta_title}} and {{seoModel.meta_title}}, {{job.seo_options.meta_title}} but nothing show....

|Eddit:
When I put {{job.seo_options.meta_title}} directly in page

{% set job = jobDetails.job %}

<section class="single-page-header" style="background-image: url('{{ 'assets/images/about/rabotodateli.png'|theme }}') !important;">
    <div class="container">
        <div class="row">
            <div class="col-md-12">
                <h1>{{ this.page.title }}</h1>
               
            </div>
        </div>
    </div>
</section>

<section class="services" id="services">
    <div class="container">
        {{job.seo_options.meta_title}}
        <p>{% component 'jobDetails' %}</p>
        
    </div> <!-- End container -->
</section> <!-- End section -->

it's show exactly what I type inside META TAB
But when put in Seo Storm it's blank

image

Could you help me?

Can't exclude fields in registerStormedModels()

Hello,

I implemented the SEO fields using registerStormedModels() in my plugin with custom models, works well.

However, the excludeFields feature doesn't seems to work at all, I tried all possible syntax, including the ones you put in your documentation. I always see all the fields.

Can you make it work in the latest version of october and seo storm ? (I'm up to date)

Best regards,

Alex

Add token to call page title prefix / suffix where you want

Hello,

The default page title and description in settings is a nice option. However, sometimes, it's not flexible enought.

Sometimes, there are some pages where you want to display the title as prefix or suffix and sometimes not.

You can say (you have the "nowhere" option to handle that manually). It's right, but it could be even better if we could use a token to call the page title or separator defined in settings when you setup the metas for a specific page.

Something like :

Welcome to my new site {{ separator }} {{ title }}

In another page it would be :
{{ title }} {{ separator }} Welcome to my new page

etc... you get it.

Best regards,

Unable to cache routes

Description

Running the php artisan route:cache command causes an error, because closures are used for the robots.txt, sitemap.xml and favicon.ico routes.

Screenshot 2022-04-16 at 11 07 29

multisite sitemap

Hello,

we have a multisite/language cms and when we tick the "enable sitemap" only the "main" page is in the sitemap (without language suffix), not the translated pages with translated urls.

Thank you!

Values not showing for model

Hi. I'm using your plugin in portfolio model.
I've included the fields

public function registerStormedModels()
    {
        return [
            '\Depcore\Portfolio\Models\PortfolioItem' => [
                'placement' => 'tabs',
            ],
        ];
    }

The problem is that on the portfolio item page the page description and title is always the one from the main page, I've tried adding the dynamic properties as {{ model.seo_options.meta_description }} {{ PortfolioItem.seo_options.meta_description }} {{ portfolio_item.seo_options.meta_description }} and so on but still get an empty title and description

seo

Example for a different model Service with the same problem.

Accept svg files as favicon

Hi,
would it be possible to accept svg files as favicons in the config ? I can upload the file and save it in teh settings, but it is still showing the browser default item instead of my file.
Is it because of a resizing process that dies in the process with that filetype ?
Thanks

Blog Post

Hi,
i add the seo component to my layout and i have edit the seo fields Title, description and the other fields on the post (meta tab). But I don't see that in the rendered HTML, only the values from post page. If I leave the fields blank on the post page, the meta tag isn't show. It look likes, that the values from the post tab not there. But they are saved correctly in DB. Any Idea?

Issue with optional parameters in sitemap not working in 4.1.1

Hy sorry but the issue is still not working in version 4.1.1, this is my page configuration:

url = "/sell/:uniqid?"
layout = "steps"
title = "Demo Title"
is_hidden = 0
seoOptionsMetaTitle = "Demo Title"
seoOptionsMetaDescription = "Demo Description"
seoOptionsEnabledInSitemap = 1
seoOptionsUseUpdatedAt = 1
seoOptionsRobotIndex = "index"
seoOptionsRobotFollow = "follow"
seoOptionsOgCard = "summary-large-image"
seoOptionsPriority = 0.5

Sitemap result:

<url>
<loc>http://domain.test:8080/sell/:uniqid?</loc>
<lastmod>2022-02-21T09:43:26+00:00</lastmod>
<priority>0.5</priority>
</url>

I do not have models for this page, i use it to submit only a form.

Thanks you

Update to 4.1.1 not working

Hy, i am having this issue while updating:

Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Root composer.json requires initbiz/seostorm-plugin 4.1.1, it is satisfiable by initbiz/seostorm-plugin[4.1.1] from composer repo (https://repo.packagist.org) but initbiz/seostorm-plugin[dev-october-v1, dev-favicon, dev-dev-561-behavior, 2.0.0, 2.0.1, 3.0.0, 3.0.1, 4.0.0, ..., 4.1.0] from composer repo (https://gateway.octobercms.com) has higher repository priority. The packages with higher priority do not match your constraint and are therefore not installable. See https://getcomposer.org/repoprio for details and assistance.

Use the option --with-all-dependencies (-W) to allow upgrades, downgrades and removals for packages currently locked to specific versions.

Can you help me with this problem?

Thnaks

Rainlab blog

Hello I've a problem with rainlab.blog

An exception has been thrown during the rendering of a template ("Unable to register extension "Twig\Extension\StringLoaderExtension" >as extensions have already been initialized.").
I've solved by commenting out
// $twig->addExtension($stringLoader);
inside public function templateFromString($template)

Localization

Hey. I did not find in the documentation how to translate the fields for site localization into other languages. Please let me know if this is possible in this plugin. Thanks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.