Меню создается для SEF, чтобы выдавался свой собственный заданный адрес страницы 404.
Типа такого
http://site.ru/error404.html?Ок. Вернемся к
Вашему коду.
Вопрос. Каким макаром Вы сообщаете поисковику что страницы больше нет - ошибка 404? По вашему коду он получит ошибку 302 - затребованный URI перемешен, но лишь временно. Это значит что страница "А" (которой у Вас на сайте уже нет!) временно перемещена на страницу "Б". Для поисковика стр. "Б" ничем не отличается от др. страниц Вашего сайта, разве что только тем, что там выводится текст "Ошибка 404".
А вот здесь,
<?php
if ($this->error->code = '404') {
header("HTTP/1.0 404 Not Found");
} ?>
поисковику отправляется код 404. И ниволнует.
А вот здесь,
<?php
defined('JPATH_BASE') or die();
echo file_get_contents(JURI::root().'/index.php?option=com_content&view=article&id=29');
?>
посетителю сайта выводится "Страница не найдена" из материала (ID 29).
Таким образов и волки сыты - поисковик получил 404, и овцы целы - пользователь увидел страницу с сообщением об 404.
Разве что, есть один нюанс.
Допустим, пользователь идет на несуществующий адрес
http://site.ru/bla-bla-bla.html . В приведенном мной варианте: а) Поисковик получит статус: 404 - материал не найден; б) Пользователю загрузится адрес
http://site.ru/bla-bla-bla.html, в шаблоне сайта, с сообщением об ошибке 404.
Нюанс в том, что, пользователь попадет куда и шел, он не будет перекинут на стр. типа http://site.ru/error404.html . Но если поиграться, то и это (
http://site.ru/error404.html ) можно реализовать, если очень надо.
Я пробовал - первый не пошел. Да и не считаю нужным на каждый чих ставить отдельный компонент.
А как Вы боретесь с дублями страниц в поисковых выдачах? Прописываете редиректы 301 в .htaccess?
А как быть если их [дублей, или др.] более ста (100), например? Каждый раз править .htaccess?