rel="canonical" ou redirect 301?

Pra quem não entendeu o motivo da questão no título deste texto, uma breve explicação: as duas opções são formas válidas para se definir qual é a versão "original" em casos de conteúdo duplicado.

Mas se são duas formas diferentes de se chegar ao mesmo resultado, qual delas escolher? Há vantagens e desvantagens? Há casos em que só uma delas se aplica? São essas perguntas que eu tentarei responder aqui neste texto. :D

Entendendo o problema do conteúdo duplicado

Para entender onde e como aplicar corretamente as soluções acima, é importante entender qual é o real problema com conteúdo duplicado. Para entender isso, vamos precisar de um exemplo: a página inicial desse blog encontra-se em http://blog.klaus.pro.br/ - mas nada impede que alguém faça um link para ela assim: http://blog.klaus.pro.br/?home. Note que ambos os endereços funcionam perfeitamente.

No caso acima, os dois endereços exibem a (mesma) página inicial deste blog. Agora pense como um robô indexador, será que os dois endereços mostram o mesmo conteúdo porque alguém quer me enganar, dando a impressão de que há mais conteúdo do que realmente há no site, ou simplesmente os dois endereços são considerados a mesma página pelo sistema do site em questão. E se os dois endereços realmente apontam para uma mesma página, qual deles eu devo considerar como "principal" ou "original"?

Para resolver essa ambiguidade e, de quebra, definir qual é a página "original", as duas soluções acima podem ser empregadas.

Onde as duas soluções se aplicam

Quando você está resolvendo a questão de conteúdo duplicado apenas dentro do domínio de seu site, as duas soluções são aplicáveis. Ou seja, usar a meta tag canonical ou um redirecionamento 301 resolve perfeitamente a questão, levando-se em conta a restrição de domínio acima.

Desta forma, para resolver o problema citado no começo deste texto usando a meta tag canonical bastaria eu colocar isso na página incial do meu blog:

<link rel="canonical" href="http://blog.klaus.pro.br/" />

Onde apenas a meta tag canonical se aplica

Nota: Este exemplo foi retirado deste vídeo.

Se no seu site você possui uma versão "normal" da página e uma versão para impressão, muito provavelmente as páginas serão muito parecidas, a ponto de parecerem conteúdo duplicado para um indexador de conteúdo.

Se você colocar um redirecionamento 301 na página de impressão, nenhum usuário vai conseguir ver a página, o que definitivamente não é uma solução para o problema :) . Já com a meta canonical você pode informar sem problemas que a página "normal" é a versão "original" daquele conteúdo.

Onde apenas um redirecionamento 301 (ou 302) se aplica

A meta canonical não é válida (ou seja, ela é ignorada) quando a página referenciada encontra-se em outro domínio. Nesses casos, para indicar que o conteúdo original encontra-se em outro lugar, sua única opção é fazer um redirecionamento permanente ou temporário (301 ou 302, respectivamente) para o conteúdo "original".

Conclusão

Se você precisa resolver o problema de conteúdo duplicado em páginas de domínios diferentes, suas opções são os redirecionamentos 301 ou 302. Se ambas as páginas precisam ser acessíveis pois seu conteúdo é muito parecido mas não é igual, use a meta tag canonical.

É isso! :)

comentários (1)

[rails] Renderizando uma view sem uma action específica

Simples assim:

  def method_missing( method_name )
    begin
      render :template => 'my_controller/' + method_name
    rescue ActionView::MissingTemplate => e
      render :text => "Ops, essa view não existe! (#{method_name})", :status => 404
    end
  end

Viva o method_missing! :D

"Plus a mais": Uma forma alternativa está no comentário abaixo.

comentários (3)

Personalizando a div.fieldWithErrors do Rails

Dica rápida para o Rails. Sabe aquela div.fieldWithErrors que aparece em volta dos campos com erros de validação? Você pode alterá-la com facilidade e até sumir com ela de vez. =)

O Nando Vieira publicou um texto ensinando como fazer div.fieldWithErrors desaparecer. Porém, no meu caso eu queria algum elemento indicando o erro, mas gostaria que ele fosse uma tag span, por exemplo.

A solução é essa:

ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|
  "<span class=\"fieldWithErrors\">#{html_tag}</span>"
end

Basta adicionar esse trecho de código no seu config/environment.rb. =)

comentários (1)

3 dicas de produtividade para desenvolvedores web

Este post participa da promoção de aniversário do blog Efetividade.net. Neste breve post discuto algumas experiências e dicas simples que me ajudam a ter um dia-a-dia mais produtivo como desenvolvedor web.

1- Organize suas pastas e arquivos. Eu sei que parece ridículo dizer isso mas, já presenciei diversos casos como criar uma pasta temporária só pra fazer um trabalhinho rápido e depois, cadê a pasta?

Crie uma pasta projetos (ou algo do tipo) na sua pasta de usuário ("Meus Documentos" ou sua "home") e dentro dela vá criando subpastas de acordo com os projetos que você está trabalhando.

2- Encontre um editor de códigos que faça mais por você. No meu dia-a-dia eu faço muito XHTML, CSS e Javascript e é muito comum encontrar editores que apenas colorem códigos. Editores que autocompletam sua digitação economizam tempo e previnem distrações.

Existem uma série de editores com este perfil. Particularmente, embora eu não goste de Java, eu uso o jEdit. Quando estou fazendo códigos em Python ou Ruby (on Rails) costumo usar o gedit.

3- Use algum aplicativo de calendário para agendar seus compromissos e tarefas. Esquecer de compromissos e tarefas é uma das coisas que mais me acontecessem. Mesmo quando eu recebo um aviso 15 minutos antes. :D

O Mozilla Thunderbird com a extensão Lightning e o Google Calendar são duas excelentes opções (uma desktop e outra online, respectivamente) para gerenciar (e honrar) seus compromissos.

Resumindo: Repare que todas as três dicas se baseiam num princípio essencial: organização. Isso é uma coisa que aprendi e aplico sempre que possível, quanto mais organizadas e definidas estiverem suas tarefas, compromissos e ambiente de trabalho, mais prazerosos estes serão! :D

comentários