Peter Knight Posted April 17, 2019 Share Posted April 17, 2019 Quote It is also possible to combine strings and placeholders.The following example appends the company name after a page's title: {title} | acme.com. What would you suggest if we want to add ' | mysite.com' to the end of every page title but only set it in a single source field. In the example above, a user would need to add acme.com to every page. MarkupSEO had a field called Title Format where you could specify the structure of the Meta Title whether it was inherited or custom and it was very useful. The Sitename placeholder above was essentially an extra field in the config. Could you consider something like this? I can't seem to add a custom field to the SEO module but would be happy to add one to my custom Settings page (a simple private PW page). Link to comment Share on other sites More sharing options...
Peter Knight Posted April 19, 2019 Share Posted April 19, 2019 Hi @Wanze If we want to output just the opengraph tags, the instructions provided work `echo $page->seo->opengraph->render();` But what is the syntax to just echo the robots tag ? `echo $page->seo->robots;` Outputs 'RobotsSeoData' `echo $page->seo->robots->render();` Outputs nothing Link to comment Share on other sites More sharing options...
Juergen Posted April 19, 2019 Share Posted April 19, 2019 Hello @Peter Knight I think that there is no render tag method for the robot tags, but you can use the following: $page->seo->robots->data['noIndex'] $page->seo->robots->data['noFollow'] This returns true if 'no index' was choosen and true if 'no follow' was choosen. Create the meta tags by yourself and use PHP to fill in these values into the meta tags. Best regards Jürgen 1 Link to comment Share on other sites More sharing options...
Peter Knight Posted April 19, 2019 Share Posted April 19, 2019 6 hours ago, Juergen said: Hello @Peter Knight I think that there is no render tag method for the robot tags, but you can use the following: $page->seo->robots->data['noIndex'] $page->seo->robots->data['noFollow'] This returns true if 'no index' was choosen and true if 'no follow' was choosen. Create the meta tags by yourself and use PHP to fill in these values into the meta tags. Best regards Jürgen Thanks Juergen. I’ll try that. What are the data and square brackets in terms of PHP and the API? Link to comment Share on other sites More sharing options...
Wanze Posted April 19, 2019 Author Share Posted April 19, 2019 On 4/17/2019 at 6:01 PM, Peter Knight said: What would you suggest if we want to add ' | mysite.com' to the end of every page title but only set it in a single source field. @Peter Knight This is currently only possible with a hook, check out the following test case: https://github.com/wanze/SeoMaestro/blob/master/tests/src/SeoMaestroTest.php#L119-L129 But this would make a nice feature, either in the module config or configurable per field. Could you open a feature request on GitHub? Thanks ? Cheers Link to comment Share on other sites More sharing options...
Wanze Posted April 19, 2019 Author Share Posted April 19, 2019 9 hours ago, Peter Knight said: Hi @Wanze If we want to output just the opengraph tags, the instructions provided work `echo $page->seo->opengraph->render();` But what is the syntax to just echo the robots tag ? `echo $page->seo->robots;` Outputs 'RobotsSeoData' `echo $page->seo->robots->render();` Outputs nothing Hi @Peter Knight, $page->seo->robots->render() should work fine, but it only outputs the tags if you have checked any of the noIndex or noFollow options. Cheers 1 Link to comment Share on other sites More sharing options...
Wanze Posted April 19, 2019 Author Share Posted April 19, 2019 On 4/17/2019 at 7:16 AM, Juergen said: I have not installed this module and I have the same problem. On my current installation I have only installed a few modules. So I guess it has nothing to do with other modules. @Juergen What version of ProcessWire and which AdminTheme are you using? Link to comment Share on other sites More sharing options...
Wanze Posted April 19, 2019 Author Share Posted April 19, 2019 6 hours ago, Juergen said: Hello @Peter Knight I think that there is no render tag method for the robot tags, but you can use the following: $page->seo->robots->data['noIndex'] $page->seo->robots->data['noFollow'] This returns true if 'no index' was choosen and true if 'no follow' was choosen. Create the meta tags by yourself and use PHP to fill in these values into the meta tags. Best regards Jürgen @Juergen @Peter Knight There is a render() method for any "group", but in case of the robots it will only return something if at least one option (noIndex, noFollow) is checked. Your example to access the individual data is correct, you can also use the following syntax, which looks slightly nicer: $page->seo->robots->noIndex Cheers 3 Link to comment Share on other sites More sharing options...
Wanze Posted April 19, 2019 Author Share Posted April 19, 2019 On 4/16/2019 at 9:20 PM, Juergen said: Thank you @Wanze for this great module. Only one thing to mention: From the point of security it is not recommended to add the generator metatag (or any other information to help hackers to know something about the system). So it would be great to add a setting checkbox to disable the rendering of this metatag. I know I can render each metatag separately but using your render method ($page->seo->render()) would be much more comfortable ?. Best regards Jürgen @Juergen I think that a hacker will easily find other ways to determine the underlying CMS by inspecting the markup or headers (or https://builtwith.com/). But I see your point ? For now, you can use a hook to disable the generator tag: $wire->addHookAfter('SeoMaestro::renderMetatags', function (HookEvent $event) { $tags = $event->arguments(0); $group = $event->arguments(1); if ($group === null) { unset($tags['meta_generator']); $event->return = $tags; } }); Feel free to open a feature request on GitHub. Cheers 3 Link to comment Share on other sites More sharing options...
Peter Knight Posted April 20, 2019 Share Posted April 20, 2019 (edited) 17 hours ago, Wanze said: Hi @Peter Knight, $page->seo->robots->render() should work fine, but it only outputs the tags if you have checked any of the noIndex or noFollow options. Cheers Something must not be setup properly at my end. Using the following <?php echo $page->seo->robots->render(); ?> I can get a page to produce this <meta name="robots" content="noindex, nofollow"> Regardless of what I try, I cannot get SEOMaestro to produce the opposite <meta name="robots" content="index, follow"> @Wanze UPDATED: After a little more research, I have discovered that index, follow are the default for search engines and don't need to be specified so it appears as if your module is functioning as it should. In the Admin itself, I have the following set Fields > seo > Robots = both unchecked Page 01 > seo > Robots > NoIndex = Inherit = unchecked. Prevent... = checked Page 01 > seo > Robots > NoFollow = Inherit = unchecked. Prevent... = checked Result on Page 1 output <meta name="robots" content="noindex, nofollow"> On the other hand, if I do this Fields > seo > Robots = both unchecked Page 01 > seo > Robots > NoIndex = Inherit = unchecked. Page 01 > seo > Robots > NoFollow = Inherit = unchecked. Output is blank. I'll bypass it for the moment and make a custom field but it'd be good to know what I might be doing incorrectly if you get a chance. Edited April 20, 2019 by Peter Knight Found solution to my issue Link to comment Share on other sites More sharing options...
Wanze Posted April 20, 2019 Author Share Posted April 20, 2019 18 minutes ago, Peter Knight said: Regardless of what I try, I cannot get SEOMaestro to produce the opposite @Peter Knight That's because the opposite (index,follow) is assumed by default and you do not need the meta tags at all in this case. The module does only render them if you have checked at least one (noindex or nofollow). 1 Link to comment Share on other sites More sharing options...
Peter Knight Posted April 20, 2019 Share Posted April 20, 2019 33 minutes ago, Wanze said: @Peter Knight That's because the opposite (index,follow) is assumed by default and you do not need the meta tags at all in this case. The module does only render them if you have checked at least one (noindex or nofollow). Thanks. I updated my post just before I saw this. Never realised that! 1 Link to comment Share on other sites More sharing options...
nfil Posted April 23, 2019 Share Posted April 23, 2019 I added this module to my site to test it. I see this error: Parse Error: syntax error, unexpected '?' (line 49 of /home/desert1/public_html/mytest/site/modules/SeoMaestro-master/InputfieldSeoMaestro.module.php) PW lastest DEV release. Thanks Link to comment Share on other sites More sharing options...
dragan Posted April 23, 2019 Share Posted April 23, 2019 @nfil are you running a PHP version older than 7.0? It seems this shorthand syntax ("syntactical sugar") has only been added with PHP 7. line 49 is: $isTranslatable = $info['translatable'] ?? false; https://php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op https://lornajane.net/posts/2015/new-in-php-7-null-coalesce-operator 3 Link to comment Share on other sites More sharing options...
nfil Posted April 23, 2019 Share Posted April 23, 2019 thanks dragan! The server was running an older PHP version. Link to comment Share on other sites More sharing options...
Juergen Posted April 24, 2019 Share Posted April 24, 2019 I wanted to create a HTML Sitemap with the same pages as the XML sitemap. Unfortunately the $pages->find() method doesn´t support the order of the page tree, so I could not use the provided function to get all pages from the XML-Sitemap in the same order as the page tree. $pages->find('seo.sitemap_include=1'); So I wrote a little recursive function to render all the pages except the ones which were not included in the XML sitemap. The pages have the same order as in the page tree. function renderSitemap($items, $depth = 0) { $separator = ''; for ($x = 0; $x <= $depth; $x++) { $separator .= '-'; } foreach ($items as $item) { if ($item->seo->sitemap->include == 1) { $subitems = $item->children(); if (count($subitems)>0) { echo '<b>'.$separator.$item->title . '</b><br />'; } else { echo $separator.$item->title . '<br />'; } $subitems = $item->children(); renderSitemap($subitems, $depth+1); } } } //OUTPUT INSIDE TEMPLATE FILE $items = $pages->get("/")->children(); echo '-'.$pages->get("/")->title.'<br />';//this is only for the homepage renderSitemap($items); This little function is not intended as a complete HTML sitemap markup generation solution. It only outputs the title of the pages (without links). It should only be a starting point for others to show you how to use SEOMaestro settings in combination with a frontend sitemap. Maybe if someone has a better solution it would be great if you post it here. Best regards This is what it looks like: 2 Link to comment Share on other sites More sharing options...
Michkael Posted April 26, 2019 Share Posted April 26, 2019 I am encountering a weird problem. My HTML code looks like this: <!doctype html> <html class="no-js" lang="" xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://ogp.me/ns#"> <head> <!-- Site Title --> <title><?=$page->title;?></title> <!-- Site Meta Info --> <meta charset="utf-8"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <?php echo $page->SeoMenu;?> . . Obviously the title tag appears twice and I want to avoid it. By removing the title tag, the website becomes very slow and i am unable to acces the admin panel (stuck at loading). The page I am working on is the homepage of the website. Thank you. Link to comment Share on other sites More sharing options...
wbmnfktr Posted April 26, 2019 Share Posted April 26, 2019 Are there any errors or entries in the logs? Any more details? Link to comment Share on other sites More sharing options...
msncom Posted April 30, 2019 Share Posted April 30, 2019 On 4/17/2019 at 8:16 AM, Juergen said: I have not installed this module and I have the same problem. On my current installation I have only installed a few modules. So I guess it has nothing to do with other modules. +1 Version: DEV (3.0.130) AdminTheme: Uikit - defaults 3 Link to comment Share on other sites More sharing options...
wbmnfktr Posted April 30, 2019 Share Posted April 30, 2019 Is it a multi-language installation? I guess I've seen something similar a few days ago but didn't care much about it. Link to comment Share on other sites More sharing options...
szabesz Posted April 30, 2019 Share Posted April 30, 2019 11 minutes ago, msncom said: +1 Version: DEV (3.0.130) AdminTheme: Uikit - defaults +1 over here 2 Link to comment Share on other sites More sharing options...
3fingers Posted May 28, 2019 Share Posted May 28, 2019 Hi @Wanze, is it possibile to query a ProField Matrix field (an image in this particular case) as a placeholder for the og:image setting? Something like {matrixfield.imagefield} ? Right now the only images I have inside my templates come from a field of type Matrix. Any solution available? ? Link to comment Share on other sites More sharing options...
Mikie Posted May 29, 2019 Share Posted May 29, 2019 Hi @3fingers, you could hook page save to copy first image found in the matrix to a hidden image field, then reference that. I literally just installed this module for the first time so I am not exactly sure of the correct way to do it, but you could also probably hook page save to copy the image url directly to the og:image setting. I came to ask a similar question, as mentioned I haven’t even tested this yet so sorry if I missed something ... if you reference a field for the description with large amounts of text does it automatically truncate the text? If not, is there a way to do this in the {field} placeholder, like {field|truncate:200} ? Would be handy. Link to comment Share on other sites More sharing options...
3fingers Posted May 29, 2019 Share Posted May 29, 2019 26 minutes ago, Mikie said: Hi @3fingers, you could hook page save to copy first image found in the matrix to a hidden image field, then reference that. I literally just installed this module for the first time so I am not exactly sure of the correct way to do it, but you could also probably hook page save to copy the image url directly to the og:image setting. I came to ask a similar question, as mentioned I haven’t even tested this yet so sorry if I missed something ... if you reference a field for the description with large amounts of text does it automatically truncate the text? If not, is there a way to do this in the {field} placeholder, like {field|truncate:200} ? Would be handy. Thanks for the suggestions, I'm going to work on those and see if I can come up with something useful. +1 for more options for the placeholders, would be even more flexible. Link to comment Share on other sites More sharing options...
Mikie Posted May 29, 2019 Share Posted May 29, 2019 @3fingers I feel like the RuntimeMarkup module might be good for this also, although again I’ve never used it don’t know much about it. Im thinking you could create a hidden field to search your matrix and return the image url. This is what I will initially try to use to truncate my too long descriptions. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now