Jump to content

MarkupSEO - The all-in-one SEO solution for ProcessWire.


Nico Knoll

Recommended Posts

2 hours ago, Guy Incognito said:

I’ll have a think if there’s anything else that can be done to improve it further.

Sounds good - I might actually be tempted to go back to this module - I do prefer the inheritance flexibility of it.

  • Like 1
Link to comment
Share on other sites

On 1/23/2022 at 12:01 AM, Guy Incognito said:

Thanks ?.

I will check out RockSEO. The thing that has kept us on MarkupSEO to date is the simplicity for implementation and also for clients. Combined with the changes you’ve made previously it’s pretty effective at doing what it needs to.

I’ll have a think if there’s anything else that can be done to improve it further.

Is RockSEO an upcoming Module by the community or a paid Pro Module?

Link to comment
Share on other sites

18 minutes ago, Peter Knight said:

Is RockSEO an upcoming Module by the community or a paid Pro Module?

https://www.google.com/search?q=site%3Aprocesswire.com%2Ftalk+RockSEO doesn't show much, but Rock(XYZ) indicates that it is a module from @bernhard (Bernhard Baumrock) ?

 

EDIT: Oh, @Guy Incognito has beaten me!  ?

Edited by horst
Link to comment
Share on other sites

On 1/23/2022 at 2:56 AM, adrian said:

Sounds good - I might actually be tempted to go back to this module - I do prefer the inheritance flexibility of it.

I still use it. I do have one workflow thing I do where I add a "keyword list" textarea field below the keywords as the SEO tool we use to generate lists of keywords for subjects spits them out one per line, so we copy and paste that into that textarea and on save I turn it into a CSV string and put it in the proper keywords field. Sounds a bit lazy but one site had hundreds of articles.

I may also need to build a Y0ast-like page score module at some point soon too, though I think those things can be misleading as much as they can be helpful.

  • Like 2
Link to comment
Share on other sites

On 1/25/2022 at 3:17 PM, Pete said:

I still use it. I do have one workflow thing I do where I add a "keyword list" textarea field below the keywords as the SEO tool we use to generate lists of keywords for subjects spits them out one per line, so we copy and paste that into that textarea and on save I turn it into a CSV string and put it in the proper keywords field. Sounds a bit lazy but one site had hundreds of articles.

I may also need to build a Y0ast-like page score module at some point soon too, though I think those things can be misleading as much as they can be helpful.

We also use the Keyword field more as a reminder of keywords we're targeting a particular page at - especially as most search engines ignore this data anyway.

  • Like 2
Link to comment
Share on other sites

  • 3 weeks later...

Hello everyone. I would like to add yandex services to tracking. Can you tell me how to add a couple of fields correctly?

1. <!-- Yandex.Metrika counter -->

<script type="text/javascript" > (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); ym(XXXXXXXX, "init", { clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true }); </script> <noscript><div><img src="https://mc.yandex.ru/watch/XXXXXXXXX" style="position:absolute; left:-9999px;" alt="" /></div></noscript>

<!-- /Yandex.Metrika counter -->

and

<meta name="yandex-verification" content="xxxxxxxxxxxxxxxxxxx" />

Link to comment
Share on other sites

  • 3 weeks later...

I'm trying to add hook before the page is saved. Then it should check if the SEO fields are empty and if so, use page's field's values that make sense.

let me illustrate:

$wire->addHookBefore('Pages::saveReady', function($event) {

    $page = $event->arguments[0];

	if (!$page->id) return;
    if ($page->isChanged('seo')) return; 

    if ($page->seo->title == '') {
        if ($page->template == 'speaker') {
            $page->seo->title = $page->academicrank.' '.$page->givenname.' '.$page->lastname;
            $page->message(':D'); // just to make sure the conditions are set right :D
        } else {
            $page->seo->title = $page->title;
        }    
    }

    $event->arguments(0, $page);
        
});

Something like this. I do get the message : D, so the issue is not there. However, the seo title field stays empty. Any ideas why this is not working?

Link to comment
Share on other sites

  • 4 months later...
On 1/22/2022 at 11:42 PM, adrian said:

Thanks @Guy Incognito I have merged your PR.

I have switched to using SeoMaestro, but to be honest I am not particularly happy with either of these modules - both have their issues for my way of working / thinking. It will be interesting to see what RockSEO brings to the table.

Hey Adrian, can you tell why are you unhappy with SeoMaestro? I just installed it yesterday in a new site and really like it. Are you missing some features?

Link to comment
Share on other sites

On 3/8/2022 at 7:46 PM, fruid said:

I'm trying to add hook before the page is saved. Then it should check if the SEO fields are empty and if so, use page's field's values that make sense.

let me illustrate:

$wire->addHookBefore('Pages::saveReady', function($event) {

    $page = $event->arguments[0];

	if (!$page->id) return;
    if ($page->isChanged('seo')) return; 

    if ($page->seo->title == '') {
        if ($page->template == 'speaker') {
            $page->seo->title = $page->academicrank.' '.$page->givenname.' '.$page->lastname;
            $page->message(':D'); // just to make sure the conditions are set right :D
        } else {
            $page->seo->title = $page->title;
        }    
    }

    $event->arguments(0, $page);
        
});

Something like this. I do get the message : D, so the issue is not there. However, the seo title field stays empty. Any ideas why this is not working?

Late response I know, the recent message triggered the notification for this thread!...

But I don't think you need a hook for this. The new version of this MarkupSEO allows you to set up automatic field inheritance for empty fields. E.g. so meta title is auto populated by page title.

 

  • Like 1
Link to comment
Share on other sites

6 hours ago, dotnetic said:

Hey Adrian, can you tell why are you unhappy with SeoMaestro? I just installed it yesterday in a new site and really like it. Are you missing some features?

Nothing serious - I use it on several sites without any real problems. I guess I just don't really like the inheritance / defaults setup. It's also a shame that Wanze isn't really around here much anymore.

  • Like 1
Link to comment
Share on other sites

  • 7 months later...

Under PHP 8.1 i got this error message:

Warning: Undefined array key "canonical" in .../site/assets/cache/FileCompiler/site/modules/MarkupSEO/MarkupSEO.module on line 357

Warning: Undefined array key "custom" in .../site/assets/cache/FileCompiler/site/modules/MarkupSEO/MarkupSEO.module on line 401

Deprecated: trim(): Passing null to parameter #1 ($string) of type string is deprecated in .../site/assets/cache/FileCompiler/site/modules/MarkupSEO/MarkupSEO.module on line 580

Warning: Undefined array key "canonical" in .../site/assets/cache/FileCompiler/site/modules/MarkupSEO/MarkupSEO.module on line 357

Is there an updated version?

Link to comment
Share on other sites

6 hours ago, Guy Incognito said:

Hi @tires

We're actually doing a little bit of work on this module to fix some issues we noticed with the upgrade path from sites running the old/original version to the more recent branch @adrian started. We'll test latest PHP at the same time and see if we can fix.

Thanks for the info!

Is there a quick workarcoud to fix it on my own.
Or do i need to downgrade to an older php?

 

----------------------------------------------------

For now i just hide the error / warnings with this code in my site/config.php

/** OWN ERROR HANDLER FOR DEPRECATION NOTES **********************************************/

    function myLocalDevDeprecationErrorHandler($errno, $errstr, $errfile, $errline) {
        if(!isset($GLOBALS['DEPRECATION_WARNINGS_BAG'])) {
            $GLOBALS['DEPRECATION_WARNINGS_BAG'] = [];
        }
        if(!is_array($GLOBALS['DEPRECATION_WARNINGS_BAG'])) {
            $GLOBALS['DEPRECATION_WARNINGS_BAG'] = [];
        }
        $GLOBALS['DEPRECATION_WARNINGS_BAG'][] = [$errfile, $errline, $errstr];
        return true; // true | false  = suppress further processing
    }

/** OWN ERROR HANDLER FOR DEPRECATION NOTES **********************************************/

See here:


 

Link to comment
Share on other sites

20 hours ago, tires said:

Thanks for the info!

Is there a quick workarcoud to fix it on my own.
Or do i need to downgrade to an older php?

 

----------------------------------------------------

For now i just hide the error / warnings with this code in my site/config.php

/** OWN ERROR HANDLER FOR DEPRECATION NOTES **********************************************/

    function myLocalDevDeprecationErrorHandler($errno, $errstr, $errfile, $errline) {
        if(!isset($GLOBALS['DEPRECATION_WARNINGS_BAG'])) {
            $GLOBALS['DEPRECATION_WARNINGS_BAG'] = [];
        }
        if(!is_array($GLOBALS['DEPRECATION_WARNINGS_BAG'])) {
            $GLOBALS['DEPRECATION_WARNINGS_BAG'] = [];
        }
        $GLOBALS['DEPRECATION_WARNINGS_BAG'][] = [$errfile, $errline, $errstr];
        return true; // true | false  = suppress further processing
    }

/** OWN ERROR HANDLER FOR DEPRECATION NOTES **********************************************/

See here:


 

I've not actually checked the errors myself yet but I guess if you can supress them without issue for the time being that's going to get you out of jail until there's a fix. ? 

Link to comment
Share on other sites

  • 1 year later...

@adrian I get the following error with your fork version: 

385:                $pageData['og:image'] = $pageData['image'] ? $pageData['image']->httpUrl() : '';

The error only occurs on the "home" page and on direct children to home, not sure if that's important to mention, nor sure if the problem occurs because it cannot find an image to inherit? 

Link to comment
Share on other sites

On 4/7/2024 at 8:13 PM, fruid said:

@adrian I get the following error with your fork version: 

385:                $pageData['og:image'] = $pageData['image'] ? $pageData['image']->httpUrl() : '';

The error only occurs on the "home" page and on direct children to home, not sure if that's important to mention, nor sure if the problem occurs because it cannot find an image to inherit? 

We use various versions of this module on a lot of sites and I also haven't come across this. Do you have the actual error message?

  • Like 1
Link to comment
Share on other sites

  • 3 months later...

Hi

is there a way to override a Meta Tag with this Module?

My implementation has:

<meta name="robots" content="index, follow"> 

315486029_CleanShotGoogleChromeModuleSEOinjury-solicitors.ie2024-07-25at15_11.04@2x.thumb.png.1df1e34c7712ebdc10530da63ac714e1.png

But on one particular template, I want to NOINDEX and have added to the Custom field

<meta name="robots" content="noindex">

Unfortunately and as expected, my page now has both NOINDEX and then INDEX robots instructions.

Thanks

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...