Создание страницы ошибки 404 в VirtueMart

Опубликовано: 11 Март, 2015
Обновлено: 28 Февраль, 2017
Категория: SEO оптимизация
Комментариев: 57

Ошибка 404 возникает при заходе пользователя на страницу, которая не существует, удалена или перенесена по другому адресу.

Есть несколько вариантов настройки данной страницы:

  • Использовать 404 страницу, настроенную в шаблоне (файл error.php)
  • Редирект со всех страниц с 404 ошибкой на главную страницу магазина
  • Создание собственной страницы с 404 ошибкой

Использование страницы с 404 ошибкой по умолчанию

В большинстве шаблонов в корневой папке находится файл error.php. В нем настроен вид страницы с 404 ошибкой.

Если шаблон хороший, то можно использовать его, но я не сторонник такого подхода. Во-первых, скорее всего, пользователь не увидит на странице привычную структуру магазина (с категориями, формой поиска и т.д.); во-вторых, дизайн страницы наверняка придется править.

Редирект на главную страницу

Это самый простой вариант. При попадании пользователя на несуществующую страницу автоматически будет срабатывать редирект на главную.

Для включения данной опции в Virtuemart > Настройки > Внешний вид нужно активировать Включить в VirtueMart обработку 404 ошибки.

2

Собственная страницы с 404 ошибкой

Самый правильный, на мой взгляд, вариант.

В менеджере материалов создаем новый материал с информацией об ошибке. Присваиваем категорию Uncategorized (Без категории).

3

Далее создаем новый пункт меню с типом Материал, выбираем созданный ранее материал.

Из поля Ссылка копируем адрес ссылки.

В корневую папку шаблона копируем файл \templates\system\error.php.

Сразу после

Вставляем

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

В результате страница с 404 ошибкой будет иметь нужный нам вид.

5

57 комментариев

    denis2015

    Сделал, но появилась и никак не убирается вверху надпись "Материалы". в файле /components/com_content/views/article/tmpl/default.php у параметра show_page_heading заменял 1 на 0, не помогло.

      admin

      admin

      Материалы - это случайно не категория материала с 404 ошибкой?

    seocomby

    Такая же проблема. Материалы - это не категория материала с 404 ошибкой. Uncategorised - категория материала.

      admin

      admin

      Если отменить правки то ошибка лишняя надпись исчезает?
      На каком именно этапе она появляется?

    denis2015

    Решил проблему так: в файле error.php указал путь к материалу через алиас пункта меню.
    Надпись "Материалы" исчезла, и вид адреса в случае срабатывания ошибки стал красивее: site.ru/404
    Правда не знаю, на сколько это верно

      denism300

      можно узнать, как вы это сделали?
      я пробовал так:
      header('Location: /404');

      уходит в бесконечный редирект, о чем радостно сообщает через некоторое время

      Дмитрий

      BHy4eK

      to: denis2015

      Напишите пожалуйста как вы это реализовали?

    Yura

    Все сделал как описано выше - результат

    1. site/contacts.html - страница отобржается
    site/contacts/ - страница отображается
    site/contacts/gfg - 404

    2. Если зайти в товары - то при всех вариантах отображается страница

      admin

      admin

      Не забыли включить Включить в VirtueMart обработку 404 ошибки в Virtuemart > Настройки > Внешний вид?
      Активирована ли опция Добавлять суффикс к URL в Система > Общие настройки > Сайт?

    Юрий

    Да все это сделал

      admin

      admin

      Тогда трудно сказать в чем проблема.
      Пришлите ссылку на сайт.

    Егор

    Такая проблема. если делать ошибки с ссылках на пункты меню, то все ок с 404-ой. Если же делать ошибку в товаре, то переправляет на главную страницу магазина

    Virtuemart > Настройки > Внешний вид?
    Активирована ли опция Добавлять суффикс к URL в Система > Общие настройки > Сайт?

    это все включено

      admin

      admin

      Не забыли включить обработку 404 ошибки в настройках virtuemart?

    Егор

    нет. несколько раз еще проверял, снимая и убирая галочку) посмотрите, если не трудно на hobbysale.by. В каталоге именно. Буду признателен за помощь

      admin

      admin

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

    Егор

    Все равно, спасибо за помощь)

    Николай

    Такая же проблема, в обычных статьях все работает, в магазине нет. Все включил, из карточки товара переходит в категорию а 404 ерор не выдает

      admin

      admin

      Здравствуйте!

      Зашел на сайт.
      Из карточки товара и со страницы категорий при изменении адреса на неправильный происходит редирект на страницу http://combicorm.ru/index.php?option=com_content&view=article&id=78

    Николай

    ДА все исправил уже сам, дело было в router.php. Что бы все заработало надо было в нем внести вот такие изменения :
    elseif (!$helper->use_id && ($helper->activeMenu->view == 'category' ) ) {
    $product = $helper->getProductId($segments ,$helper->activeMenu->virtuemart_category_id);
    $vars['virtuemart_product_id'] = $product['virtuemart_product_id'];
    $vars['virtuemart_category_id'] = $product['virtuemart_category_id'];

    if(isset($vars['virtuemart_product_id']))
    {
    $vars['view'] = 'productdetails';

    }
    else
    {
    JError::raiseError(404, JText::_("Page Not Found"));
    }

    } elseif (isset($segments[0]) && ctype_digit ($segments[0]) || $helper->activeMenu->virtuemart_category_id>0 ) {
    $vars['virtuemart_category_id'] = $segments[0];
    $vars['view'] = 'category';

    } elseif ($helper->activeMenu->virtuemart_category_id >0 && $vars['view'] != 'productdetails') {
    $vars['virtuemart_category_id'] = $helper->activeMenu->virtuemart_category_id ;
    $vars['view'] = 'category';

    } elseif ($id = $helper->getCategoryId (end($segments) ,$helper->activeMenu->virtuemart_category_id )) {

    // find corresponding category . If not, segment 0 must be a view
    $vars['virtuemart_category_id'] = $id;
    $vars['view'] = 'category' ;
    } else {
    JError::raiseError(404, JText::_("Page Not Found"));
    $vars['view'] = $segments[0] ;
    if ( isset($segments[1]) ) {
    $vars['task'] = $segments[1] ;
    }

    Ксатит такой вопрос при редиреки на http://combicorm.ru/index.php?option=com_content&view=article&id=78 страницу роботы гугла и ящи будут считать что ответ с этой страницы 404?

      admin

      admin

      Спасибо, что поделились.
      Проверить код ответа можно здесь http://checkmy.ru/

      Smith999

      Все сделал как у вас.
      Все равно работает не супер.
      site.ru/vibroplatformi/123 - будет правильная ошибка 404
      а, если
      site.ru/123/vibroplatformi/ - ошибка не загорается.

      Как у вас, если вставить ложную категори, перед правильной, будет ли 404?

      Дмитрий

      BHy4eK

      Николай, подскажите а где лежит файл router.php ?

    Николай

    Спасибо проверил, получается проблема. Как вы советуете делать с редиректом на http://combicorm.ru/index.php?option=com_content&view=article&id=78 то ответ сервера HTTP/1.1 200 OK, а нам нужно что бы было HTTP/1.1 404 Page Not Found. А то много мусора будет висеть в индексе. Вопрос чего же тогда делать? Как было что бы и красиво и правильно?:-)

    denis2015

    а если в файле error.php сделать так:

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

    Николай

    Тов се заработает как надо. denis2015 спасибо!!! Я только от вашего лица выложу еще раз:
    if (($this->error->getCode()) == '404') {
    header("HTTP/1.0 404 Not Found");
    echo file_get_contents(JURI::root().'index.php?option=com_content&view=article&id=78');
    exit;
    }
    С правильными символами, а то народ который ctrl+c ctrl+v ругаться будет. Ну все схема работает супер!!! спасибо еще раз автору блога и всем кто поучаствовал, атрому может быть поправить статью с рабочими дополнениями!

    Николай

    Скажем так подведу еще итоги все это действие у меня работает на joomla 3.4 и virtuemart 3.10. Обработка в virtuemart ошибки 404 выключина, файл router.php поправлен как писал выше. Так же данный фаил поправлен для вывода "правильных" урлов в virtuemart (без SEO-суффикс). Все.

      admin

      admin

      Спасибо, что поделились решениями.

    Егор

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

      admin

      admin

      Пришлите ссылку на сайт.

    Егор

    hobbysale.by

      admin

      admin

      Очистите кеш на сайте.
      Если не поможет, то без доступа к админке трудно сказать в чем проблема.
      До этого все правильно работало?

    Егор

    До исправлений в router.php была общая проблема, т.е. вместо 404 страницы из товара или категории вылезала главная страница каталога.

    Егор

    очистка кэша не помогла

      admin

      admin

      Для категорий созданы пункты меню?
      Попробуйте заменить router на стандартный.

    Егор

    Заменил. С ним все работает как раньше, т.е. 404-я не вылезает, а появляется стартовая страница каталога

    Егор

    Все работает. Не были созданы пункты меню) спасибо огромное за подсказку

    Александр

    Подскажите пожалуйста, у меня в Вирте нет пункта "включить обработку 404 ошибки" Почему?

      admin

      admin

      Точно не помню, но в virtuemart 2.6.12 этот пункт уже есть.
      У Вас какая версия vm?
      Попробуйте обновиться.

    mrfrunze

    mrfrunze

    Добрый день админ, настроил страницу 404 для сайта
    http://bcplaneta.com.ua/?error=404
    сайт не работает как магазин, но компонент вируемарта я не удалял!
    Создал материал, создал невидиоме меню,
    но страница 404 не отображается!? - отображается главная.
    Что делал
    - отключал в настойках вирта функ.- цию 404 - не помогло
    - включал и выключал невидимое меню - не помогло
    в самом файле error.php - прописал
    код
    if (($this->error->getCode()) == '404') {
    header('Location: /index.php?option=com_content&view=article&id=18');
    exit;
    }
    ==========
    то же не помагло! в чем может крыться причина? Спасибо.

      admin

      admin

      Здравствуйте!

      error.php находится в папке с шаблоном?
      Если да, то без доступа к админке сайта и доступа по ftp трудно что-то конкретное посоветовать.
      Пришлите доступы на admin@virtuemart.su

      RUslanka.RU

      Мне тоже ничего не помогало. Помогло в конечном итоге это решение https://masterpro.ws/forum/virtuemart/4539-seo-i-virtuemart

        admin

        admin

        Спасибо, что поделились.

    mrfrunze

    mrfrunze

    выслал вам на почту доступы

    Владимир

    Вопрос:
    У меня Joomla! 3.4.4 и VirtueMart 3.0.10.
    Открываю файл router.php - но там немного не так, как писал Николай.

    Алексей

    Virtuemart 3.0.16 в настройках внешнего вида нет чек бокса "Включить в VirtueMart обработку 404 ошибки". как быТЬ? на что влияет редирект на главную при не существующей странице?

      admin

      admin

      Данная опция находится в настройках во вкладке Магазин.

        Алексей

        Спасибо, разобрался.
        В итоге если делать вот так

          Алексей

          сделал вот так=

    Vladimir

    Этот метод не работает для php 7
    Знает ли кто как сделать 404 страницу на php7?

      Владимир

      После обновления Joomla все заработало

    Алексей

    Доброго дня! Метод работает, Спасибо! Может не в тему, но вопрос в следующем:
    VM 2.6.14
    Если после страницы с пунктом "меню категория VM" добавит произвольную аброкадабру
    Те есть site.ru/категорияVM/lkjtr547gbtr
    то, будет ответ сервера 200 ОК и редирект на этот пункт меню категория VM, а не 404 ошибка, как это нужно бы по идеи.
    При этом в настройках VM стоит пункт добавлять суффикс .html и если к этой аброкадабре добавить суффикс.html
    Те есть site.ru/категорияVM/lkjtr547gbtr.html,
    То ответ сервера будет 303 See other и редирект на категориюVM. Но на экране Показывается 404 ошибка.
    Можно ли как то вылечить этот баг? Спасибо

      admin

      admin

      Здравствуйте!

      Попробуйте способ из этого комментария

        Алексей

        Нет, к сожалению. Возможно потому что у меня Joomla 2.5 + VM 2.6, а метод для 3.0 и выше, как я понял.
        Если после категории меню VM добавить произвольные символы без суффикса то упорно 200 ОК и редирект на это меню.
        Но вот заметил если убрать в VM обработку 404 ошибки то, ответ сервера при несуществующем адресе с суффиксом будет 404, а не 303 как был до этого.
        Может пригодится кому.
        В любом случае Спасибо за участие.

    Виталий

    "В параметре Состояние выбираем Не опубликовано."

    Вопрос: зачем?
    Если не опубликовано - то и страница 404 не будет показываться.

      admin

      admin

      Верно, пункт меню нужно публиковать. Поправил в статье.

    Evgen54906

    Люди, подскажите как допилить выдачу ошибки 404 в virtuemart 3. Всё работает, 404 ошибка выскакивает, но не везде.
    site.ru/katalog/podnosy/123/ открывается страница категории
    site.ru/katalog/podnosy/123.html - открывается страница категории

    Во всех остальных случаях, и на самом сайте открывается моя 404 страница.

    Галочка в магазине на 404 ошибку стоит,
    Своя страница 404 создана

    Я так понимаю нужно править файл router.php, но что и как конкретно...

    Может админ поможет? За денежку. А то замучился уже с этой 404 ошибкой...

      admin

      admin

      На 100% закрыть вопрос с 404 ошибкой не получается, только частично. К сожалению, помочь не смогу.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*
Для вставки кода заключите его в теги [php] [/php]
*