Основы поисковой оптимизации для ASP.NET разработчиков

среда, 8 сентября 2010, Александр Краковецкий

SEO (Search Engine Optimization) - оптимизация для поисковых систем (или просто поисковая оптимизация) - это комплекс мер для продвижения веб-сайта в поисковых системах с целью поднятия позиций сайта в результатах выдачи. Понятно, что никто из разработчков не будет делать SEO-оптимизаторов, но какие-то минимальные знания по этой теме должны быть у всех. Поэтому приступим.

MetaDescription и MetaKeywords

Meta description практически не влияет на позицию сайта в поисковой выдаче, но поисковые системы используют это значение для отображение сниппетов.

    protected void Page_Load(object sender, EventArgs e)
    {
        MetaDescription = @"Cool meta description";
        MetaKeywords = @"Cool, meta, keywords";
    }

На выходе мы получим такой HTML код:

При разработке CMS обязательно нужно давать возможность пользователю задать эти параметры или можно генерировать их автоматически на базе, например, заголовка страницы.

URL­-адреса, оптимизированные для поиска

Адреса вида

http://site.com/product/{id}/edit

http://site.com/product/{id}/info

http://site.com/product/{id}/description

намного лучше адресов вида:

http://site.com/Product.aspx?id={id}&action=0

http://site.com/Product.aspx?id={id}&action=1

http://site.com/Product.aspx?id={id}&action=2

C точки зрения поисковых систем вхождение поискового запроса в название URL - это важный критерий. Поэтому если у вас сложная логика, которая подразумевает передачу параметров через GET, то вам не мешало бы задуматься о хотя бы простом URL Rewriting.

Первый способ - это настроить модуль URL Rewriting на IIS (начиная с 7 версии), но также вы можете это сделать с помощью программного кода.

Например, в Default.aspx.cs пишем такой код:

        if (!IsPostBack)
        {
            if (Request["id"] != null)
            {
                l.Text = "Current Id: " + Request["id"];
            }
        }

В Default.aspx дрбавим Label:

После запуска страницы Default.aspx, например, с параметром id=158 мы увидим на экране строчку:

Current Id: 158

Теперь мы хотим сделать наш URL более приятным. Для этого идем в Global.asax и переписываем метод Application_BeginRequest:

    void Application_BeginRequest(object sender, EventArgs e)
    {
        HttpContext context = HttpContext.Current;
        string path = context.Request.Path.ToLower();

        int lastContent = path.LastIndexOf("/product/");
        if (lastContent == -1)
        {
            return;
        }
        int lastSlash = path.LastIndexOf('/');
        string key = path.Substring(lastSlash + 1, path.Length - lastSlash - 1);

        context.RewritePath("~/default.aspx?id=" + key, false);
    }

Что делает это код? Сначала мы получаем текущий контекст, потом проверяем, присутствует ли в URL строка "product" и если нет - выходим из метода и вызов продолжится как обычно. Если строка "product" присутствует, то мы вычисляем передаваемый id и потом с помощью метода RewritePath говорим о том, что запрос должен на самом деле идти на страницу Default.aspx с заданным параметром.

Теперь когда мы зайдем на сайт по URL:

http://site.com/product/158

фактически будет вызвана страницы Default.aspx?id=158 и на экране мы увидим все ту же строчку:

Current Id: 158

Пользователь при этом не будет знать, что на самом деле ему подменили URL и будет пользоваться "удобным" URL. Также подумает и поисковая система, которая проиндексирует "правильный" с вашей точки зрения URL.

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

Переадресация

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

Чае всего в SEO используются такие коды (все коды можно посмотреть здесь):

  • 404 - Не найдено
  • 301 - Перемещено окончательно
  • 302 - Перемещено временно 

В идеале, если в приложении случается какая-то ошибка, то пользователя необходимо перенаправлять на специальные страницы (хотя бы для 501 и 404).

Сделать это можно в web.config:

   

   

Это простое решение, но на самом деле оно вызывает ряд проблем, которые были описаны в этой статье, цитирую:

Давайте проведем небольшой тест и посмотрим какой HTTP код нам вернет ASP.NET в случае 404 ошибки.

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

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

Решение 1

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

   

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

protected void Page_Load(object sender, EventArgs e)

{

    Response.StatusCode = 404;

}

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

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

Решение 2

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

Теперь, добавим следующий код в файл 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");

    }

}

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

Еще одним методом устранения проблемы является использование следующего кода:

protected void Application_BeginRequest(object sender, EventArgs e) { 
     var host = Request.Url.Host; 
     if (host.Equals("progblog.ru", StringComparison.OrdinalIgnoreCase)) { 
         var newUrl = new UriBuilder(Request.Url); 
         newUrl.Host = "www." + host; 
         Response.StatusCode = 301; 
         Response.Status = "301 Moved Permanently"; 
         Response.AddHeader("Location", newUrl.Uri.AbsoluteUri); 
         Response.End(); 
         return; 
     } 
}

Тут немного нужно остановиться на таких методах как Response.Redirect и Server.Transfer.

Response.Redirect перенаправляет одну страницу на другую, при этом если вы перед этим пишете что-нибуть в объект Session, то вам обязательно необходимо вызывать этот метод с указанием параметра endResponse = false иначе сессия у вас может поломаться. При этом пользователь в адресной строке видет тот URL, который вы передали в качестве параметра методу. Если же вы используете Server.Transfer, то запрос полностью передается новой страницы и они рассматривается как единое целое. В этом случае с сессией у вас проблем быть не должно, но пользователь не увидит новую страницу в адресной строке и будет думать, что находится на предыдущей странице.

В ASP.NET 4.0 появились новые методы, которые устраняют описанные выше проблемы:

Redirect(String) Перенаправляет запрос по новому адресу и задает новый URL-адрес.
Redirect(String, Boolean) Перенаправляет клиента на новый адрес URL.Задает новый адрес URL и условия прекращения выполнения текущей страницы.
RedirectPermanent(String) Выполняет безвозвратное перенаправление с запрошенного URL-адреса на заданный URL-адрес.
RedirectPermanent(String, Boolean) Выполняет безвозвратное перенаправление с запрошенного URL-адреса на заданный URL-адрес и предоставляет возможность завершить ответ.
RedirectToRoute(Object) Перенаправляет запрос на новый URL-адрес, используя значения параметров маршрута.
RedirectToRoute(RouteValueDictionary) Перенаправляет запрос на новый URL-адрес, используя значения параметров маршрута.
RedirectToRoute(String) Перенаправляет запрос на новый URL-адрес, используя имя маршрута.
RedirectToRoute(String, Object) Перенаправляет запрос на новый URL-адрес, используя значения параметров маршрута и имя маршрута.
RedirectToRoute(String, RouteValueDictionary) Перенаправляет запрос на новый URL-адрес, используя значения параметров маршрута и имя маршрута.
RedirectToRoutePermanent(Object) Выполняет постоянное перенаправление запроса с запрошенного URL-адреса на новый URL-адрес, используя значения параметров маршрута.
RedirectToRoutePermanent(RouteValueDictionary) Выполняет постоянное перенаправление запроса с запрошенного URL-адреса на новый URL-адрес, используя значения параметров маршрута.
RedirectToRoutePermanent(String) Выполняет постоянное перенаправление с запрошенного URL-адреса на новый URL-адрес, используя имя маршрута.
RedirectToRoutePermanent(String, Object) Выполняет постоянное перенаправление запроса с запрошенного URL-адреса на новый URL-адрес, используя значения параметров маршрута и имя маршрута, соответствующее новому URL-адресу.
RedirectToRoutePermanent(String, RouteValueDictionary) Выполняет постоянное перенаправление запроса с запрошенного URL-адреса на новый URL-адрес, используя значения параметров маршрута и имя маршрута.

Книга Поисковая оптимизация сайта (SEO) на ASP.NET для профессионалов. Руководство разработчика по SEO

В завершение хочу сказать, что по заданной теме есть лишь одна книга - "Книга Поисковая оптимизация сайта (SEO) на ASP.NET для профессионалов. Руководство разработчика по SEO".

Книга двух специалистов в области маркетинга и разработки для Web посвящена технологиям создания и обслуживания Web-сайтов с помощью ASP.NET, которые оптимизированы для поисковых механизмов (SEO). Подробно рассматриваются такие вопросы, как облегчение индексации сайта, средства для продвижения сайта, роль архитектуры сайта в поисковой оптимизации, способы достижения хороших поисковых рангов и многие другие. Читатели ознакомятся с методами переадресации, Web-каналами и социальными закладками, приманиванием ссылок, оценкой оптимальности сайта с точки зрения поисковых механизмов. Кроме того, приводится пример построения электронного магазина с учетом аспектов поисковой оптимизации (SEO). Книга "Поисковая оптимизация на ASP.NET для профессионалов. Руководство разработчика по SEO" рассчитана на программистов и менеджеров по маркетингу разной квалификации, а также будет полезна для студентов и преподавателей дисциплин, связанных с веб- аналитикой и разработкой для Web.

400 стр., с ил.; ISBN 978-5-8459-1404-0, 978-0-470-13147-3; формат 70x100/16; твердый переплет; тип бумаги: газетная; серия ...для профессионалов (от Wrox) 2008, 2 кв.; Диалектика.

Оглавление:

Об авторах      
Введение      


Глава 1. Вы, как программист и специалист по поисковому маркетингу     
Глава 2. Основы SEO     
Глава 3. URL­адреса, оптимизированные для поиска     
Глава 4. Перемещение контента и коды состояния HTTP     
Глава 5. Дублированный контент     
Глава 6. HTML и JavaScript, оптимизированные для поиска     
Глава 7. Web­каналы и социальные закладки     
Глава 8. Нечестная SEO     
Глава 9. Карты сайтов 
Глава 10. Приманивание ссылок     
Глава 11. Маскирование, региональная привязка и подмена по IP     
Глава 12. Зарубежная SEO     
Глава 13. Разрешение технических вопросов     
Глава 14. Практическое занятие: создание электронного магазина
Глава 15. Клиника для сайтов: так у вас уже есть Web­сайт?


Приложение А. Простые регулярные выражения
Глоссарий
Предметный указатель

 

В статье были рассмотрены далеко не все приемы приемы поисковой оптимизации для веб-прилодений, написанных на ASP.NET. Если тема интересна, то можно будет продолжить.

Компании из статьи


Microsoft Украина


Сайт:
http://www.microsoft.com/ukr/ua/

Microsoft Украина Украинское подразделение компании Microsoft.

Ищите нас в интернетах!

Комментарии

Свежие вакансии