Joomla 2.5 добавляет дублированный метатег канонический из другого представления в текущий вид при включенном кеше - PullRequest
0 голосов
/ 13 апреля 2019

Я использую 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>

У меня заканчиваются идеи, почему он так себя ведет. Я не знаю, откуда взялся второй каноник. Это не установлено в представлении, отображаемом в данный момент. Такое каноническое задается только другим представлением в том же компоненте. Но как это попадает в другой код представления? И только с кешем = вкл?

У вас есть какие-нибудь подсказки, по которым я мог бы найти, в чем здесь проблема?

...