Как стать автором
Обновить

ASP.NET, HTTP 404 и SEO

Время на прочтение2 мин
Количество просмотров10K
Недавно, мой SEO оптимизатор сказал мне, что недоволен тем как ASP.NET возвращает HTTP ответ в случае ситуации 404, то есть страница не найдена. Я начал ковыряться и обнаружил пару интересных моментов, которые возможно кому-то пригодятся.

1) Обычно, по умолчанию так сказать, мы ловим 404 такими настройками web.config

<customErrors defaultRedirect="GenericError.htm" mode="On">

<error statusCode="404" redirect="404.html"/>

</customErrors>


Оданко, этот подход имет проблему, о которой мне и говорил СЕО оптимизатор. Давайте проведем небольшой тест и посмотрим какой HTTP код нам вернет ASP.NET в случае 404 ошибки.



Итак, мы сначала получаем 302 (Redirect) и затем 200 то есть типа все хорошо. Но это на самом деле, как оказалось, плохо для SEO оптимизации.

Проблема : Нам нужно чтобы ASP.NET возвращял HTTP 404 код в ситуации когда страница не найдена, а не просто редиректил на страницу ошибки с кодом 200.

Решение 1

Давайте немного поменяем наш web.config и сделаем чтобы редирект происходил не на статический html файл а на .aspx

<customErrors defaultRedirect="GenericError.htm" mode="On">

<error statusCode="404" redirect="404.aspx"/>

</customErrors>


Теперь добавим в Page_Load этой 404.aspx страницы следующий код

protected void Page_Load(object sender, EventArgs e)
{
Response.StatusCode = 404;
}


Теперь давайте протестируем



Выглядит лучше, мы таки полчили 404 код на выходе, однако мой СЕО оптимизатор не доволен, так как мы все еще имеем как бы двойной ответ, то есть сначала 302 код редиректа а потом 404. Это, как мне сказали, плохо для Google поиска и нам нужно чтобы возвращался один ответ, с 404 кодом и больше ничего.

Решение 2

Давайте закомментируем наши настройки в web.config

<!--<customErrors defaultRedirect=«GenericError.htm» mode=«On»>

<error statusCode=«404» redirect=«404.html»/>

</customErrors>-->


Теперь, добавим следующий код в файл global.asax, или сначала добавим этот файл в наш проект, если вдруг его там нет. Логика кода — поймать 404 ошибку и перенаправить на нашу страницу информации об ошибке.

protected void Application_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
if (ex is HttpException)
{
if (((HttpException)(ex)).GetHttpCode() == 404)
Server.Transfer("~/404.html");
}
// Код для общих ошибок
Server.Transfer("~/GenericError.htm");
}

Отлично, теперь тестим



Яхуу, мы получили наш заветный, одинокий 404 код на нашу ошибку от ASP.NET. CEO оптимизатор остался доволен, а я тоже с интересом провел врeмя :)

Может кому то поможет ;)
Теги:
Хабы:
Всего голосов 50: ↑33 и ↓17+16
Комментарии56

Публикации

Истории

Работа

.NET разработчик
79 вакансий

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
24 сентября
Astra DevConf 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн