headerbanner

Joomla 3 - SEO killer aneb jak rozčílit Google

Autor: Petr Liška

Joomla 3 obsahuje chybu, která spolehlivě rozčílí Google. A nedivil bych se, kdyby chybné uvádění linku "canonical" považoval za duplicitní obsah.

U nového webu s Joomla 3 pro čistírny odpadních vod se najednou ve výsledcích vyhledávání objevily dva odkazy na totožnou stranu:

  • www.aquacontact.cz/domovni-cov
  • www.aquacontact.cz/domovni-cov?utm_source=Sez&utm_medium=adw&utm_campaign=covv
První je logický, druhý ale obsahuje značkovací parametry pro Google Adwords, které v adrese nemají co dělat. Už i proto, že je uvádím pouze u PPC inzerátů a Google tedy na webu takovou adresu vůbec nemůže nalézt.

Nejdřív mě napadlo, jestli jsem omylem nezkopíroval parametrizovanou adresu třeba někam do menu. Po hodině pachtění v administraci jsem toho měl dost. Vy si můžete námahu ušetřit.

URL s parametry přidává do stránek plugin SEF, vyrábějící "hezké" adresy. Jakmile se adresa, přes kterou přicházíte na web, liší od "správné", přebere ji plugin celou a vloží do hlavičky HTML kódu v tagu LINK. Když někdo přijde na web přes PPC reklamu, Joomla přidá link a vše uloží do cache. No a když pak na správnou adresu bez parametrů dojde Google a dostane obsah z cache, najde na stránce v hlavičce:

<link href="http://www.aquacontact.cz/domovni-cov?utm_source=Sez&utm_medium=adw&utm_campaign=covv" rel="canonical" />

Google tedy podle kanonického linku usoudil, že "ta podstatná", kanonická adresa, je ona s parametry a přidal ji do indexu.

Správně link označuje stránku, která je pro daný odsah směrodatná. Pokud třeba stejnou stránku poskytuje systém i v pdf, měl by link označovat HTML verzi za kanonickou. Podobně je to v případě, že na tentýž obsah může směřovat více URL, typicky třeba URL s parametry, které obsah nemodifikují.

Když si člověk není jistý, co je a co není kanonické, je lepší kanonický link vůbec nepoužívat. To platí obecně a je zjevné, že Google tomuto tagu opravdu přikládá váhu. Joomla 3 ho ovšem zcela systémově mate, navíc přidává tag i do stránek se strukturou blogu, což nevím, jestli je úplně OK - logicky vzato je kanonickým obsahem jen každý článek zvlášť.

Řešením je použít nějaký plugin přepisující adresy, nebo se kanonického linku úplně zbavit. Bez nového pluginu přichází v úvahu hack SEF pluginu na adrese plugins/system/sef/sef.php. Zakomentujte řádek 53:

 
if ($uri !== $link)
{
  //$doc->addHeadLink(htmlspecialchars($link), 'canonical');
}

Jenže hack není zrovna OK, zvlášť když se dnes dá Joomla krásně jedním klikem updatovat a není jistota, že jádrový plugin nebude přepsaný. Pak přichází v úvahu vložit do šablony následující kód:

 
$doc = JFactory::getDocument();
foreach ( $doc->_links as $k => $array ) {
  if ( $array['relation'] == 'canonical' ) {
    unset($doc->_links[$k]);
  }
}

Kód je nutné vložit před:

 
<jdoc:include type="head" />