Joomla не работает 404 ошибка

Время на прочтение
2 мин

Количество просмотров 14K

image

Известно, что для того, чтобы удержать посетителя на сайте, нужно правильно обрабатывать HTTP/1.0 404 и другие подобные коды. На просторах интернета можно найти массу занимательных примеров страниц 404, а также руководств – что и как сделать, чтобы ошибка 404 правильно обрабатывалась сайтом как для посетителя, так и для поисковых систем.

Хочу с вами обсудить проблему 404 для сайтов Joomla.

Общие рекомендации по настройке Joomla для обработки HTTP/1.0 404

Не буду повторять здесь все причины тех или иных шагов и настроек, буду перечислять кратко то, что можно найти в Интернете.

  1. Создаем в нашей Joomla «красивую страничку 404». Можно несколько — при реализации вашей особенной логики и способа их выбора для
    посетителя;
  2. В свой шаблон, который используется на сайте в качестве основного шаблона frontend, из системного шаблона system переписываем файл error.php;
  3. Далее редактируем этот файл для того, чтобы следовать следующей логике – если мы отловили ошибку 404 – то сначала выдать заголовок HTTP/1.0 404, а затем выдать страницу, которую мы ранее подготовили. Предположим, номер (ID) нашей «красивой страницы 404» равен 1001. Файл error.php в вашем шаблоне может выглядеть так:

defined('_JEXEC') or die;

if (!isset($this->error))
{
	$this->error = JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR'));
	$this->debug = false;
}

// Get language and direction
$doc             = JFactory::getDocument();
$app             = JFactory::getApplication();
$this->language  = $doc->language;
$this->direction = $doc->direction;

if($this->error->getCode()=='404') {
	header("HTTP/1.0 404 Not Found");
	header('Location: index.php?option=com_content&view=article&id=1001');
}

Теперь проверяем. Вводим адрес сайта. Далее – абракадабра после символа /. Работает? Работает, чего и следовало ожидать.

В чем подвох?

Открываем отладку страниц в вашем любимом браузере (мой любимый браузер – Fitefox с Firebug-ом), вкладка «Сеть», и смотрим заголовки, которыми общается браузер с сайтом.

Вводим адрес сайта – заголовок HTTP/1.0 200 OK

Теперь абракадабра… Ожидаем HTTP/1.0 400 Not Found — смотрим заголовки:

  1. Сначала HTTP/1.0 302 Found
  2. Затем наша красивая страница отдается браузеру с кодом HTTP/1.0 200 OK

image

Чем это плохо?

— Но, ведь, работает? — Скажете вы. Да, работает. А как на это смотрит поисковая система?

Был у меня переезд страниц сайта с одного раздела (папки) сайта на другой. Но переехать должны были не все страницы. Страницы старого раздела сайта были в индексе. Те, что переехали – выдавались с кодом HTTP/1.0 301 Moved Permanently (классика жанра) и поисковики их правильно «переехали» на новое место. А те, что должны были «кануть в лету» – так и мелькали в индексе, хотя физически отсутствовали на сайте, а при обращении к ним выдавалась «красивая страничка 404», но не код HTTP/1.0 404 (смотрим выше).

Выход из этой ситуации

Для страниц с ошибкой 404 я решил выдавать заголовок HTTP/1.0 404 Not Found и делать не редирект через заголовок Location, а читать поток «красивой страницы 404» и перенаправлять его браузеру. Вот реализация:

if($this->error->getCode()=='404') {
	header("HTTP/1.0 404 Not Found");
	$url=JURI::root()."index.php?option=com_content&view=article&id=1001";
	$data = file_get_contents($url) or die("Cannot open URL");
    echo $data; 
}

Теперь, и нужная страница посетителю отдается при ошибке 404, и поисковая машина видет действительно код 404 и считает введенный адрес таковым — Not Found.

0 Пользователей и 1 Гость просматривают эту тему.

  • 24 Ответов
  • 6066 Просмотров

После смены тематики сайта остались страницы, которые в новой версии отсутствуют (т.е. отсутствуют их адреса). В вебмастере Google (ошибки сканирования) они помечены как ошибка-404, однако эти страницы возвращают 200, вместо 404 кода : Страница с указанным адресом отсутствует, а сервер не возвращает код ошибки 404 (файл не найден).

В Joomla страница 404 присутствует, но я не могу вставить в нее header() с соответствующим кодом ошибки, ибо файл error.php, перенаправляет на id моей 404-страницы. Вообщем, как мне поступить с этими страницами? Либо как-то впихнуть туда код ошибки, либо удалить URL?

создайте в индексе PHP и вызов и  тема не продолжиться
error PHP в  темплейте

Записан

Миграция, установка, обновление версий Joomla  |  Создание сайтов «под ключ»  |  Эксклюзивные заглушки «offline»  |  Работа с «напильником» над шаблонами и расширениями

header(404) не вставить в темплейте error.пхп потому что он перенаправляет на другуб страницу, я пробовал толку 0

мне что PHP ваше сломать? я сразу error сломаю.

Записан

Миграция, установка, обновление версий Joomla  |  Создание сайтов «под ключ»  |  Эксклюзивные заглушки «offline»  |  Работа с «напильником» над шаблонами и расширениями

что ап? вы в хсесе создайте перенаправление на error, и будет вам страница любая.
2-ерор Joomla переопределите.
3-у вас вопрос, ручками исправить даже не думая, а вы апаете.

Записан

Миграция, установка, обновление версий Joomla  |  Создание сайтов «под ключ»  |  Эксклюзивные заглушки «offline»  |  Работа с «напильником» над шаблонами и расширениями

я не понимаю что вы пишите.
У меня шаблоне файл error.пхп он перенаправляет на страницу 404 компонента. Установка заголовка в нем ни к чему не приводит.С файлом error.пхп в систем я не знаю что делать

Вставил данный код в error.php,  при неверном параметре возвращает страницу 404, также возвращает ее при переходе с гугл-вебмастера на странице с ошибкой 404. Однако при проверке гугботом ссылки-404, возвращает статус не найдено-так должно быть или он должен просканировать страницу и в информации указать код заголовка 404?

Вставил данный код в error.php…

Вы в мастере Google укажите, что проблемы исправлены, больше они отображаться не будут и все не найденные материалы со временем получат 404.

Сервер отдаёт заголовок 404? Отдаёт. Почитайте подробнее в теме, на которую дал ссылку (перейдите по Основная идея отсюда первый ответ пользователя AHP-net)

« Последнее редактирование: 13.06.2015, 20:29:50 от Пастор Шлаг »

Записан

а у меня сайт включен, материал со страницей 404 создан и открывается по адресу /404.html, но при открытии несуществующей страницы редиректит на главную. я уже не знаю, что делать….есть мыли?

вот мой .htaccess, который я не трогала

##
# @package    Joomla
# @copyright  Copyright (C) 2005 - 2015 Open Source Matters. All rights reserved.
# @license    GNU General Public License version 2 or later; see LICENSE.txt
##

##
# READ THIS COMPLETELY IF YOU CHOOSE TO USE THIS FILE!
#
# The line just below this section: 'Options +FollowSymLinks' may cause problems
# with some server configurations.  It is required for use of mod_rewrite, but may already
# be set by your server administrator in a way that disallows changing it in
# your .htaccess file.  If using it causes your server to error out, comment it out (add # to
# beginning of line), reload your site in your browser and test your SEF url's.  If they work,
# it has been set by your server administrator and you do not need it set here.
##

## No directory listings
IndexIgnore *

## Can be commented out if causes errors, see notes above.
#Options +FollowSymlinks
#Options -Indexes

## Mod_rewrite in use.

RewriteEngine On

## Begin - Rewrite rules to block out some common exploits.
# If you experience problems on your site block out the operations listed below
# This attempts to block the most common type of exploit `attempts` to Joomla!
#
# Block out any script trying to base64_encode data within the URL.
RewriteCond %{QUERY_STRING} base64_encode[^(]*([^)]*) [OR]
# Block out any script that includes a <script> tag in URL.
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL.
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL.
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})
# Return 403 Forbidden header and show the content of the root homepage
RewriteRule .* index.php [F]
#
## End - Rewrite rules to block out some common exploits.

## Begin - Custom redirects
#
# If you need to redirect some pages, or set a canonical non-www to
# www redirect (or vice versa), place that code here. Ensure those
# redirects use the correct RewriteRule syntax and the [R=301,L] flags.
#
## End - Custom redirects

##
# Uncomment following line if your webserver's URL
# is not directly related to physical file paths.
# Update Your Joomla! Directory (just / for root).
##

RewriteBase /

## Begin - Joomla! core SEF Section.
#
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
#
# If the requested path and file is not /index.php and the request
# has not already been internally rewritten to the index.php script
RewriteCond %{REQUEST_URI} !^/index.php
# and the requested path and file doesn't directly match a physical file
RewriteCond %{REQUEST_FILENAME} !-f
# and the requested path and file doesn't directly match a physical folder
RewriteCond %{REQUEST_FILENAME} !-d
# internally rewrite the request to the index.php script
RewriteRule .* index.php [L]
#
## End - Joomla! core SEF Section.

====
ну, в общем-то как обычно, стоило после 3 часов мучений написать вопрос сюда, как нашлось самостоятельное решение))

на сайте установлен VM3, в настройках убрала чек с «Включить в VirtueMart обработку 404 ошибки» и все заработало…хотя совсем нелогично. при этом и не найденные товары тоже переправляет на мою 404 страницу  :dry:

« Последнее редактирование: 01.09.2015, 12:13:45 от Иоланта »

Записан

Так же не возвращает 404-й ответ а отдает 200.
Вот сама страница https://lik-astana.kz/404.html.
Вот error.php в шаблоне

в htaccess прописана так

ErrorDocument 404 https://lik-astana.kz/404.html
ErrorDocument 500 https://lik-astana.kz/500.html

Тоже такая же проблема.
В error.php такой код:

<?php
defined(‘_JEXEC’) or die;
if (($this->_error->get(‘code’)) == «404») {
   header(«HTTP/1.1 404 Not Found»);
   echo «Error»;
}?>

Если же удалить строку echo «Error»;, то все норм, приходит 404 Not Found. С echo (или если вставить HTML ниже на странице) получаем 200 ОК при наборе ссылки несуществующей страницы. Нужно, чтобы и юзеру было понятно, что нет такой страницы, и сервер отдавал правильный код.

Мне хостер ответил иакое:

У вас в .htaccess есть правила mod_rewrite
RewriteRule .* index.php [F]

и условия к нему. Они перехватывают все запросы и направляют их в обработку в Index.php, поэтому 404 и не работает.
Если закоментировать эти правила, то 404 настройка срабатывает.

В вашем случае 404 ошибку должен выдавать сам скрипт Joomla.

но развет так правильно комментирвоать, а что в Joomla менять так и не понял? страница erro 404 не работает  :(

Да не нужно вам менять робот и хтсес.
https://docs.joomla.org/Creating_a_Custom_404_Error_Page/ru
простым путём делаете 404
робот максимально меняете для дублей, если до этого плагины не используете, скрывающие это и не лезли в хтсес.
Joomla вам не создаст таких ошибок, если выше перечисленные условия соблюдены.
Ну и ЧПУ в админке правильно должно быть и в корне переименовать хтсес.

// Сами ядро понапичкаете «прелестями» и «советами», а потом избавляетесь от этого в обратном порядке.

« Последнее редактирование: 27.05.2016, 10:21:33 от vipiusss »

Записан

Миграция, установка, обновление версий Joomla  |  Создание сайтов «под ключ»  |  Эксклюзивные заглушки «offline»  |  Работа с «напильником» над шаблонами и расширениями

всё делала как по этой инструкции, не работает на Joomla 2.5 файлик error 404

а вы уверены, что файл error оригинал?
что именно не работает и  в  каком виде?
у вас нет переопределений никаких в шаблоне?

Записан

Миграция, установка, обновление версий Joomla  |  Создание сайтов «под ключ»  |  Эксклюзивные заглушки «offline»  |  Работа с «напильником» над шаблонами и расширениями

в шалоне перенаправлений нет, на ошибку просто перенаправляет на главную и всё, а код 404 не отдаёт сервер, тольок 200

ну тут надо смотреть админку и ftp.я так не могу предугадать
если хотите-делайте бекап, в личку ссылки и доступ, посмотрю.
раз уже тут пишу-для вас бесплатно, если там будет требовать временных затрат и что-то большее, тогда лично обговорим.
Но думаю у вас просто ошибка в настройке и неправильном ЧПУ+робот+хтсес+создании прав.

Записан

Миграция, установка, обновление версий Joomla  |  Создание сайтов «под ключ»  |  Эксклюзивные заглушки «offline»  |  Работа с «напильником» над шаблонами и расширениями

ну тут надо смотреть админку и ftp.я так не могу предугадать
если хотите-делайте бекап, в личку ссылки и доступ, посмотрю.
раз уже тут пишу-для вас бесплатно, если там будет требовать временных затрат и что-то большее, тогда лично обговорим.
Но думаю у вас просто ошибка в настройке и неправильном ЧПУ+робот+хтсес+создании прав.

да как-то стрёмно давать первому встречному права на сайт, тем более, там у меня много других не моих сайтов

Ну извините, я, да и многие тут, не телепаты.
Тогда в комм.раздел.

Записан

Миграция, установка, обновление версий Joomla  |  Создание сайтов «под ключ»  |  Эксклюзивные заглушки «offline»  |  Работа с «напильником» над шаблонами и расширениями

Ну извините, я, да и многие тут, не телепаты.
Тогда в комм.раздел.

ок

Всем добра!
Предложу свой вариант кода error.php.
Для сайта был выбран шаблон OrdaSoft Blank template разумеется в последствии допилен и приукрашен.
Только 404 оставалась унылым серым пятном на сайте. Нужно было сделать 404-ю максимально похожей на остальной сайт = шапка + меню + другие модули.
Но как только я добавлял СТАНДАРТНУЮ ПОЗИЦИЮ МОДУЛЯ(<jdoc:include type=»modules» name=»pocition» style=»xhtml» />) страница начинала отдавать код 200.

После экспериментов я получил такой код  error.php

<?php
//get language and direction
$doc = JFactory::getDocument();
$this->language = $doc->language;
$this->direction = $doc->direction;
?>

<!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>
<title><?php echo $this->error->getCode(); ?> - <?php echo $this->title; ?></title>
    <?php if ($this->error->getCode() == '404') { ?>
    <meta name="robots" content="noindex, nofollow">
    <meta name="robots" content="noarchive" />
    <?php } ?>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i&subset=cyrillic" rel="stylesheet">   
    <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="<?php echo $this->baseurl; ?>/templates/<?php echo $this->template; ?>/css/style.css" />
    <link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/<?php echo $this->template; ?>/css/combineStyle.css" type="text/css">
    <link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/<?php echo $this->template; ?>/css/combineShop.css" type="text/css">

    <script type="text/javascript" src="<?php echo $this->baseurl ?>/templates/<?php echo $this->template; ?>/javascript/jquery-1.12.4.min.js"></script>
<script type="text/javascript">jQuery.noConflict();</script>
<script type="text/javascript" src="<?php echo $this->baseurl ?>/templates/<?php echo $this->template; ?>/javascript/jquery-migrate.min.js"></script>
<script type="text/javascript" src="<?php echo $this->baseurl ?>/templates/<?php echo $this->template; ?>/bootstrap/js/bootstrap.js"></script>

<script type="text/javascript" src="<?php echo $this->baseurl ?>/templates/<?php echo $this->template; ?>/javascript/jquery.sticky.js"></script>
<script type="text/javascript" src="<?php echo $this->baseurl ?>/templates/<?php echo $this->template; ?>/javascript/custom.js"></script>
</head>
<body class="error">
<div class="header">
<div id="header" class="container header__container">
<div  class="row user__row">
<div id="Search" class="col-lg-3 col-md-3 col-sm-3 col-xs-12">
<?/*<jdoc:include type="modules" name="Search" style="xhtml" />*/?>
<?php  $modules = JModuleHelper::getModules('Search');
                        if ($modules && is_array($modules)) {
                           foreach ($modules as $module) {
                              echo JModuleHelper::renderModule($module);
                           };
                        } ?>
</div>
</div>
<div class="row top3row">
<div class="col-lg-2 col-md-2 col-sm-2 col-xs-12">
    <div id="logo">
            <a href="/">
    <img src="/images/templates/os-basetemplate/logo.png" alt="Logo" />
</a>
    </div>
</div>
<div class="main__excellence col-lg-8 col-md-8 col-sm-8 col-xs-12">
<?/*<jdoc:include type="modules" name="Excellence" style="xhtml" />*/?>
<?php  $modules = JModuleHelper::getModules('Excellence');
                        if ($modules && is_array($modules)) {
                           foreach ($modules as $module) {
                              echo JModuleHelper::renderModule($module);
                           };
                        } ?>
</div>
<div class="main__cotactHead col-lg-2 col-md-2 col-sm-2 col-xs-12">
    <?/*<jdoc:include type="modules" name="CotactHead" style="xhtml" />*/?>
    <?php  $modules = JModuleHelper::getModules('CotactHead');
                        if ($modules && is_array($modules)) {
                           foreach ($modules as $module) {
                              echo JModuleHelper::renderModule($module);
                           };
                        } ?>
</div>
</div>
</div>
</div>
    <div id="all__nav" class="nav__stickys">
        <div class="container">
            <div class="row top4row">               
                <div class="shopCatalog col-lg-3 col-md-3 col-sm-3 col-xs-9">
                    <?/*<jdoc:include type="modules" name="ShopCatalog" style="xhtml" />*/?>
                    <?php  $modules = JModuleHelper::getModules('ShopCatalog');
                        if ($modules && is_array($modules)) {
                            foreach ($modules as $module) { ?>
                                <div class="navbar navbar-default wraper__menu_navbar">
                                    <div class="container-fluid">
                                        <div class="navbar-header menu__nav_shopCatalog">
                                            <button type="button" id="shopCatalogAll" class="navbar-toggle offcanvas-toggle pull-right js-offcanvas-has-events" data-toggle="offcanvas" data-target="#js-bootstrap-offcanvas" style="float:left;">
                                                <span class="sr-only">Toggle navigation</span>
                                                <span class="icon-bar"></span>
                                                <span class="icon-bar"></span>
                                                <span class="icon-bar"></span>
                                            </button>
                                            <span class="navbar-brand"><?php echo $module->title;?></span>
                                        </div>
                                        <div class="navbar-offcanvas navbar-offcanvas-touch" id="js-bootstrap-offcanvas">
                                            <?php echo JModuleHelper::renderModule($module);?>
                                        </div>
                                    </div>
                                </div>
                            <?php };
                        } ?>
                </div>    
                <div class="main_menu col-lg-7 col-md-7 col-sm-7 col-xs-12">
                    <nav class="site-navigation-main navbar" role="navigation">
                        <div class="navbar-header">
                          <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#main-navbar-collapse">
                            <i class="fa fa-bars"></i>
                          </button>
                        </div>
                        <div id="main-navbar-collapse" class="collapse navbar-collapse">
                            <?/*<jdoc:include type="modules" name="Mainmenu" style="xhtml" />*/?>
                            <?php  $modules = JModuleHelper::getModules('Mainmenu');
                                if ($modules && is_array($modules)) {
                                    foreach ($modules as $module) {
                                        echo JModuleHelper::renderModule($module);
                                    };
                                } ?>
                        </div>
                    </nav>
                </div>
                <div class="main__cart col-lg-1 col-md-1 col-sm-1 col-xs-6">
<?php  $modules = JModuleHelper::getModules('Cart');
                        if ($modules && is_array($modules)) {
                           foreach ($modules as $module) {
                              echo JModuleHelper::renderModule($module);
                           };
                        } ?>
</div>
<div class="main__wishlist col-lg-1 col-md-1 col-sm-1 col-xs-6">
<?php  $modules = JModuleHelper::getModules('Wishlist');
                        if ($modules && is_array($modules)) {
                           foreach ($modules as $module) {
                              echo JModuleHelper::renderModule($module);
                           };
                        } ?>
</div>
            </div>
        </div>
    </div>
    <div id="wrapper">
        <div class="container wrapper__box">
            <center>
                <div class="errorbox">

                            <div class="block">
                   <?/* <h1>404</h1>
            <h3>Page not found</h3>
                </div>
            <p>
                Sorry! The page you are looking for cannot be found. Please use
                the provided search box to find what you are looking for,
                click on our top navigational menu, or    
            </p>*/?>

<?php  $modules = JModuleHelper::getModules('Text-404');
                        if ($modules && is_array($modules)) {
                            foreach ($modules as $module) { ?>                   
                                <div class="container-fluid">                           
                                    <span class="mod__brand">
                                        <h1><?php echo $module->title;?></h1>
                                    </span>                           
                                    <div class="mod__content">
                                        <?php echo JModuleHelper::renderModule($module);?>
                                    </div>
                                </div>                   
                            <?php };
                        };
                    ?>

                <p><a class="btn btn-primary btn-lg" href="<?php echo $this->baseurl; ?>/" title="<?php echo JText::_('HOME'); ?>"><i class="fa fa-chevron-left"></i> <?php echo JText::_('HOME'); ?></a> </p>

                </div>
            </center>
        </div>
    </div>
</body>
</html>

Нужный мне текст вывожу в HTML-модуле c заголовком 404 в позиции Text-404

« Последнее редактирование: 25.01.2019, 09:52:30 от Konstanin_by »

Записан

Спасибо, добрый человек. Помогло.

The most common problem with websites which are struggling in search engine rankings is the number of ‘not found’ errors – commonly referred to as 404 errors because that is the status code returned if the page cannot be found.

First, there are legitimate reasons to have 404 errors – if you have a page for an event which has passed, or a service which you no longer provide. In these cases, eventually the page will be removed from the index of search engines and won’t be associated with your site any more.

The problem occurs if you have a lot of 404 errors – for example if you unpublish a category which contained hundreds of articles. From the search engine’s perspective, this is not a great experience for their visitors, because they land on your site and the information that the search engine told them was there, isn’t. This is why it is not a great idea to have too many 404 errors on your site.

The first step is to find out how many you have – which can be done using Google’s Search Central. This is a free set of tools which allows you to analyse your website and pick up on problems, errors and issues quickly. It is recommended that you have every site you manage registered at Search Central to ensure you are notified in the event of any problems.

When you visit Search Central there is a section which shows you URL Errors in the search listing – this will show you a list of the 404 errors that Google has found on your site, and a graph which shows you how this has changed over time. If the graph starts to go up, look into why there are pages that were on your site and now can’t be found.

If there was a temporary problem on your site, you can mark errors as being fixed.

404discovery.png

Fixing Problems[edit]

Discovery is only one part of the process. Once you have discovered the problematic URLs, do something about it (if it needs fixing!) by either redirecting the page to another on the site, re-instating the original page, or looking into what has caused the 404 error.

If you need to redirect a page, check out this page which explains how to create 301 (permanent) redirects: Creating 301 redirects

Monitoring Problems[edit]

If you want to monitor your 404 traffic, the best way to do this in Analytics is to look at what happens when you have a 404 error. In most cases, the page title changes to 404 – so we can create a custom segment which will filter traffic with a title of 404 and tell you what the landing page is. This should allow you to monitor and proactively manage your 404 errors and ensure that your site visitors do not end up landing on dead links.

Analyticsalerts.png

Analyticsalerts2.png

Google also has the ability, in Analytics, to set up alerts. Alerts allow you to be emailed when certain events occur. In this case, we can set up an alert to be notified if there is more than a 5% increase in the number of 404 errors in a weekly period – which might mean we have a problem with the website which needs investigating.

This is a great way to keep on top of things even if you haven’t logged in to look at your dashboard!

Analyticsalertsemail.png

Monitoring Errors with a Dashboard[edit]

There is also a dashboard you can install called the Data Integrity Dashboard which shows you information about 404 errors, along with some other metrics which might be of interest. Just search the Google Analytics Gallery for Data Integrity Dashboard and select which profile to install it under.

Dataintegrity.png

Узнайте, как правильно создать и настроить собственную страницу ошибки 404 для сайта на Joomla 3 и Joomla 4, отображаемую в интерфейсе шаблона.

Важно знать!

Ошибка 404 (Error 404) — это ответ сервера, отправляемый при запросах на несуществующие ресурсы.

Веб-сервер должен отправлять ответ 404 Not Found в случае, если соответствующего запрашиваемому URL-адресу ресурса не существует.

Что такое страница ошибки 404?

Важно знать!

Страница ошибки 404 — это веб-страница, отображаемая при прямом запросе на несуществующий документ.

При этом сервер должен отдавать именно ответ 404 Not Found, а не перенаправлять пользователей на страницу со статусом 200 OK. Это очень важно, т. к. роботы поисковых систем принимают во внимание ответы сервера, и считают существующими все страницы со статусом 200 OK, который не запрещает индексировать такие страницы в поисковой системе, а это может способствовать появлению дублей страниц в поисковой выдаче и затруднит продвижение сайта в целом.

Страница ошибки 404 в шаблонах Joomla

Профессиональные шаблоны Joomla всегда имеют в своём арсенале настроенную рабочую страницу 404-й ошибки, отображаемую при вводе несуществующих адресов.

Как правило, внешний интерфейс данных страниц сильно отличается от общего интерфейса шаблона, что может негативно сказаться на поведенческих факторах: некоторые пользователи могут «испугаться» и покинуть сайт. Во избежание таких потерь посетителей сайта на ровном месте мы рекомендуем создавать настраиваемую страницу для 404-ошибки, отображаемую в интерфейсе шаблона.

Создание страницы 404 в интерфейсе шаблона

Разберем по пунктам, как правильно создать и настроить собственную страницу ошибки 404 в теле стандартного шаблона Protostar для Joomla 3 с отображением контента в области компонента.

Важно знать!

Указанная инструкция актуальна как для Joomla 3, так и для Joomla 4.

  1. Создать и опубликовать материал, который будет отображаться при запросе несуществующей страницы. Примеры опций:
    • Заголовок: «Страница не найдена».
    • Алиас: «error-404».
    • Cодержание: «Указанной страницы не существует. Вероятно, она была удалена или перенесена на другой адрес.»
    • Категория: «Uncategorised».
  2. Создать и опубликовать скрытый пункт меню данного материала с алиасом error-404:
    • Во вкладке Параметры материала необходимо отключить показ всей лишней информации (Автор, Хиты, Дата публикации и т. д.).
    • Во вкладке Параметры ссылки необходимо установить опцию Показать в меню на Нет, чтобы скрыть пункт меню.
    • Во вкладке Параметры страницы можно прописать тег <title>, который будет отображаться вместо названия материала. Например: «Ошибка 404 — страница не найдена».
    • Во вкладке Метаданные выбрать значение метатега Robots noindex, nofollow.
  3. В папке шаблона (/templates/шаблон) создать или заменить существующий файл error.php, который должен содержать только следующий код:
    <?php
    defined( '_JEXEC' ) or die( 'Restricted access' );
    if($this->error->getCode() == '404'){
        header("HTTP/1.1 404 Not Found");
        echo file_get_contents(JURI::root().'error-404');
        exit;
    }
  4. Проверяем функционирование страницы. По запросу несуществующего документа должен отображаться созданный материал.
  5. Проверяем ответ сервера для несуществующей страницы. Для этого можно воспользоваться панелью разработчика в браузере или сторонним веб-сервисом.
  6. Чтобы сделать страницу ошибки 404 более наглядной, рекомендуем добавить в её контент соответствующее изображение, которое без труда можно найти в поисковой выдаче картинок, а также отключить на ней ненужные модули.

Видеоинструкция

Ошибка 404 отвечает за оповещение пользователя о том, что запрошенной им страницы не существует. Правильная настройка страницы с ошибкой 404 важна не только для пользователя, но и для поисковой системы. В Joomla существует встроенная страница ошибки 404, но вид у нее неприглядный. Поэтому мы ее заменим на свою красивую страницу.

Создаем новый материал для показа 404 ошибки.

Если не усердствовать над оформлением страницы, то можно сделать простенький текстовый контент с кнопкой для возврата на предыдущую страницу.

Код этой страницы такой:

<div style="text-align:center;">
<h1 class="error-title">404</h1>
<h2>Ой... Мы не можем найти эту страницу!</h2>
<p class="lead">Мы сожалеем, но страница на которую Вы пытались перейти не существует.<br />Пожалуйста вернитесь на предыдущую страницу или воспользуйтесь меню сайта.</p>
<a href="javascript: history.go(-1)" ><button>Предыдущая страница</button></a>
</div>

Прикрепляем материал к пункту меню joomla, чтобы ссылка страницы с ошибкой имела человекопонятный url, например 404-error.

Не забываем ссылку меню сделать скрытой

Создаем файл error.php в папке шаблона сайта /templates/ваш_шаблон, который будет возврашать код ошибки и показывать нашу кастомную страницу.

Код содержимого error.php

<?php
defined('_JEXEC') or die;

if (!isset($this->error))
{
	$this->error = JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR'));
	$this->debug = false;
}

if($this->error->getCode()=='404') {
	header("HTTP/1.0 404 Not Found");
        $url=JURI::root()."index.php/404-error";
        $data = file_get_contents($url) or die("Cannot open URL");
        echo $data;
        break;
}
?> 

Проверяем открывается ли страница с ошибкой. Вводим несуществующий url, примерно так http://soft-setup.ru/iuensg

Если открылась наша кастомная страница по адресу /404-error, то все сделано правильно.

Проверяем возращает ли наш сайт 404 ошибку роботу.

Проверить ответ сервера можно в webmaster.yandex.ru. переходим в Инструменты/Проверка ответа сервера. Вводим несуществующий url и жмем проверить.

Получили код статуса HTTP: 404 Not Found. Что и требовалось получить.

Понравилась статья? Поделить с друзьями:
  • Jedi academy ошибка нужен диск 1 что
  • Jcb 3cx ошибки на приборной панели
  • Jcb 175 мини погрузчик коды ошибок
  • Jcb 160 колесный экскаватор ошибка
  • Jbl onbeat awake ошибка up9