Ao longo de todo o tempo trabalhando com SEO, encontrei diversos sites desenvolvidos em ASP.NET, que por vezes apresentavam os mesmos problemas acerca de sua otimização e que, por vezes, os desenvolvedores dos sites não sabiam como resolver ou passavam por dificuldades para implementar uma solução.
Com o aumento incontestável da importância do SEO para um site, os desenvolvedores do ASP.NET implementaram novas funcionalidades para a versão 4 do produto, a fim de facilitar a aplicação de algumas atividades básicas de SEO, tornando o ASP.NET mais amigável ao processo de otimização.

Conforme anunciado pelo ScottGu’s Blog, as novidades em SEO são:
- Nova propriedade Page.MetaKeywords
- Nova propriedade Page.MetaDescription
- Suporte a URLs Amigáveis
- Novo método Response.RedirectPermanent()
Page.MetaDescription e Page.MetaKeywords
Obviamente, essas propriedades servem para facilitar a otimização individual de meta description e meta keywords para as páginas de um site. Um exemplo de código com o controlador Page_Load:
void Page_Load(object sender, EventArgs e){ Page.Title = "Título Otimizado da Página"; Page.MetaDescription = "Campo para meta description específica de uma página"; Page.MetaKeywords = "insira,as,keywords,relevantes,da,página,aqui"; }
Também, os valores para meta description e meta keywords podem ser determinados direto no código fonte de um arquivo aspx:
<%@ Page Title = "Título Otimizado da Página" Description = "Campo para meta description específica de uma página" Keywords = "insira,as,keywords,relevantes,da,página.aqui" MasterPageFile = "~/Site.Master" CodeBehind = "paginaX.aspx.cs" Inherits = "WebApplication1.pagina" %>
Especialmente no caso de meta keywords, essa melhoria na implemetação de meta tags em páginas ASP.NET é tardia, uma vez que todas Search Engines anunciaram que não consideram meta keywords como fator de rankeamento. Para o uso de meta description, essa propriedade será bem útil, já que esta meta tag ainda tem um importante papel no desempenho de um site em SERPs.
Suporte a URLs Amigáveis no ASP.NET
Este é um problema bastante comum em sites ASP.NET: na maior parte dos casos, as URLs são sobrecarregadas de parâmetros, normalmente recebendo valores numéricos (e não palavras – keywords), o que pode causar problemas com conteúdo duplicado (quando os parâmetros são escritos em uma ordem diferente), dificultam o entendimento da URL e não agregam valor semântico para Search Engines.
O ASP.NET 4 conta com a URL Routing Engine, que visa fazer o mapeamento de URLs amigáveis. Tipicamente, uma URL tem o seguinte formato:
http://www.site.com/categoria.aspx?id=3339
A URL Routing Engine vai permitir que URLs amigáveis sejam mapeadas para suas versões não-amigáveis, ou seja, uma URL:
http://www.site.com/categoria/eletronicos
Será mapeada para a versão não-amigável e seu conteúdo carregado normalmente. Resta validar questões como redirecionamento da versão não-amigável para a amigável e a possibilidade de acesso do conteúdo via URL não-amigável – para evitar conteúdo duplicado.
Método Response.RedirectPermanent()
O redirecionamento em ASP.NET normalmente é realizado com o método Respose.Redirect(), mas existe um problema: este método retorna o código 302, indicando um redirecionamento temporário, o que não é o quadro ideal para SEO.
O novo método Response.RedirectPermanent() do ASP.NET 4 resolve esta questão respondendo com código 301, redirecionamento permanente, uma indicação de mudança de URL:
Response.RedirectPermanent("nova/url.aspx");
Outros 2 novos métodos também entram para tratar redirecionamentos:
//Redirecionamento 302: Response.RedirectToRoute("Categorias", new { category = "categoria1" } ) //Redirecionamento 301 Response.RedirectToRoutePermanent("Categorias", new { category = "categoria1" } )
SEO com ASP.NET
Como disse no início do artigo, as novidades no ASP.NET 4 resolvem questões básicas de SEO. Considerando o tempo de vida e importância de SEO para o desempenho de um site, essas novidades chegam atradas para os desenvedores de websites. São questões já muito debatidas, mas que agora estão facilitadas.
Por fim, convido os desenvolvedores que utilizam o ASP.NET para seus comentários e impressões. Até a próxima!







11 de janeiro de 2010 às 9:37 am
Muito bom o artigo! Trabalho com ASP.NET, e sempre tive dificuldades em criar sites com uma url amigável. Já uso o URL routing a algum tempo no ASP.NET MVC, já imaginava que a microsoft iria colocar isso no ASP.NET.
[Responder]
11 de janeiro de 2010 às 9:40 am
Muito bom o artigo! Trabalho com ASP.NET e sempre tive dificuldades em criar sites com uma url amigável. Já uso o URL routing a algum tempo com o ASP.NET MVC, já imaginava que a microsoft iria implementar essa funcionalidade no ASP.NET. Ainda não tive contato com o ASP.NET 4.0, mas espero bastante melhorias.
[Responder]
11 de janeiro de 2010 às 10:34 am
Acho que para obter páginas otimizadas para SEO o ASP.NET MVC é o mais indicado. Já fiz site utilizando ele e deu resultado legal e com menos dor de cabeça do que o ASP.NET apenas.
[Responder]
Alexsandro disse,
janeiro 11th, 2010 às 11:52 am
Mas agora com o suporte em sua versao 4. Acho que nao iram migrar mais para o ASP.net MVC, é uma pena.!
[Responder]
11 de janeiro de 2010 às 10:56 am
Oh que bom que tem url amigaveis na versao 4.0.
So conhecia no ASP.net MVC.
Muito bom saber disto.
[Responder]
11 de janeiro de 2010 às 2:17 pm
As urls amigáveis já podiam ser feitas há algum tempo implementando uma classe derivada da interface IHttpHandler e mapeando no web.config uma extensão de arquivo ou mesmo um diretório inteiro para ela.
[Responder]
Frank Marcel disse,
janeiro 12th, 2010 às 6:09 am
Parece que o ASP.NET 4 está facilitando as coisas então.
[Responder]
Alexsandro disse,
janeiro 12th, 2010 às 7:38 am
Ja ouvi falar mesmo.. mas dizem que na prática nao é tao simples assim. Tem algum documento falando de como fazer isto?
Valew.
[Responder]
Sergio Postarek disse,
janeiro 12th, 2010 às 8:46 am
Cria uma class como a do exemplo abaixo:
public class ConteudoHandler : IHttpHandler
{
public ConteudoHandler()
{
}
public void ProcessRequest(HttpContext context)
{
string alias = System.IO.Path.GetFileName(context.Request.RawUrl.ToString());
var conteudo = MetodoQueBuscaConteudo(alias);
if (conteudo != null)
{
HttpContext.Current.Server.Transfer(“/conteudo.aspx?id” + conteudo.Id);
}
else
{
HttpContext.Current.Server.Transfer(“/Erro/404.aspx”);
}
}
public bool IsReusable
{
get
{
return true;
}
}
}
E no web.config vc coloca a seguinte entrada:
Dessa maneira qualquer coisa que vc chame em /conteudo/meu-conteudo-qualquer vai redirecionar de forma transparente para /conteudo.aspx?id=1234
[Responder]
Sergio Postarek disse,
janeiro 12th, 2010 às 8:47 am
Oooops faltou o sinal de igual depois de ‘?id’ na linha abaixo. Segue a correção.
HttpContext.Current.Server.Transfer(”/conteudo.aspx?id=” + conteudo.Id);
Frank Marcel disse,
janeiro 12th, 2010 às 8:55 am
Sergio, faltou o código do web.config.
Se você utilizar html, separe os caracteres ou eles não vão aparecer. O Wordpress não permite todo tipo de html.
Obrigado pelas informações!
Enriqueceu, e muito, o artigo!
Abraços!
Sergio Postarek disse,
janeiro 12th, 2010 às 9:05 am
Ultima tentativa do web.config:
<system.webServer>
<handlers>
<add name=”ConteudoHandler” path=”conteudo/*” verb=”*” type=”NamespaceQualquer.ConteudoHandler” resourceType=”Unspecified” preCondition=”integratedMode” />
</handlers>
</system.webServer>
Frank Marcel disse,
janeiro 12th, 2010 às 9:07 am
Obrigado Sergio!
Alexsandro disse,
março 7th, 2010 às 11:03 pm
Valew Sergio, isto vai ser de bom aproveito.
Desculpe a demora em responder, eu NÃO esqueci deste post. Valew..
11 de janeiro de 2010 às 2:47 pm
Não é tardia as mudanças. Acho que veio em boa hora.
O ASP.NET tem uma arquitetura muito boa para desenvolvimento e essas novas funcionalidades, aliadas as demais do ASP.NET 4, coloca a tecnologia com grande diferencial para desenvolvimento.
[Responder]
Frank Marcel disse,
janeiro 12th, 2010 às 8:58 am
Olá Luis, disse que são tardias pois resolvem questões básicas de SEO, questões que já são discutidas há anos, e somente agora o ASP.NET facilitou a vida dos desenvolvedores com código simples e nativo da linguagem.
[Responder]