Я использую Joomla! 2.5.17 Стабильная версия Joomla. Я создал компонент, который использует код для добавления канонического URL:
$document = JFactory::getDocument();
$document->addCustomTag("some custom code");
$document->addCustomTag("<link rel=\"canonical\" href=\"$theCorrectCanonical\" />");
находится в компонентах / my-component / views / my-view / tmpl / default.php
Поскольку у меня много представлений, в каждом представлении определено my-view, my-view2 и т. Д.
Работало нормально. Каноническая ссылка была добавлена правильно. Событие, если у меня был кэш.
И в последнее время у меня отключены модули, которые мне больше не нужны. Поэтому я отключил их, и сайт работал нормально после этого.
Внезапно я обнаружил, что Google помечает мои страницы как неканонические.
Посмотрев код веб-сайта, я заметил, что HTML-заголовок выглядит так:
some custom code
<link rel="canonical" href="correct-url" />
<link rel="canonical" href="url-of-a-page-i-visited-second-ago" />
Похоже, что по какой-то безумной причине Joomla рекламирует не только правильный канонический, но и канонический тег другой подстраницы, которую я посетил секунду назад. Заставить Google поверить, что она не является канонической для другой страницы.
Я пытался найти решение, но не нашел. Также я заметил, что когда я отключаю кеш в конфиге с помощью:
public $caching = '0';
А в Addons -> Системный кеш (я отключаю его). Это возвращается к нормальной жизни. Он не добавляет второй метатег канонического.
Index.php моего шаблона выглядит так:
<?php
/**
* @version $Id: index.php 21518 2011-06-10 21:38:12Z chdemko $
* @package Joomla.Site
* @subpackage Templates.beez_20
* @copyright Copyright (C) 2005 - 2011 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
$resourcesVersion = "1.1";
$this->setGenerator('');
// No direct access.
defined('_JEXEC') or die;
// check modules
$showRightColumn = ($this->countModules('position-3') or $this->countModules('position-6') or $this->countModules('position-8'));
$showbottom = ($this->countModules('position-9') or $this->countModules('position-10') or $this->countModules('position-11'));
$showleft = ($this->countModules('position-4') or $this->countModules('position-7') or $this->countModules('position-5'));
if ($showRightColumn==0 and $showleft==0) {
$showno = 0;
}
JHtml::_('behavior.framework', true);
// get params
$color = $this->params->get('templatecolor');
$logo = $this->params->get('logo');
$navposition = $this->params->get('navposition');
$app = JFactory::getApplication();
$doc = JFactory::getDocument();
$templateparams = $app->getTemplate(true)->params;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->language; ?>" lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>" >
<head>
<jdoc:include type="head" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
some stylesheets embedded directly
some scripts embedded directly
a meta tag embedded directly
</head>
У меня заканчиваются идеи, почему он так себя ведет. Я не знаю, откуда взялся второй каноник. Это не установлено в представлении, отображаемом в данный момент. Такое каноническое задается только другим представлением в том же компоненте. Но как это попадает в другой код представления? И только с кешем = вкл?
У вас есть какие-нибудь подсказки, по которым я мог бы найти, в чем здесь проблема?