Problema de Redirecionamentos¶
Descrição do Problema¶
A gestão de redirecionamentos de URL no website da UNICEF Portugal está completamente inoperacional há aproximadamente 1 ano. A equipa não consegue adicionar, editar ou remover redirecionamentos através do backoffice do Umbraco.
Causa Raiz¶
O Umbraco utiliza o pacote URL Tracker (icUrlTracker) para gerir redirecionamentos de URL (301/302). Este pacote armazena todos os redirecionamentos numa tabela SQL chamada icUrlTracker.
| Métrica | Valor |
|---|---|
| Registos na tabela icUrlTracker | 1.631.926 |
| Valor normal para um site desta dimensão | < 10.000 |
| Fator de excesso | ~163x |
| Tempo que o problema existe | ~1 ano |
O número extremamente elevado de registos (1,6 milhões) indica que o URL Tracker tem registado alterações de forma descontrolada, possivelmente:
- Registando cada alteração de URL como um novo redirecionamento, mesmo para alterações triviais
- Criando entradas duplicadas para o mesmo redirecionamento
- Não removendo entradas obsoletas automaticamente
Impacto¶
- Gestão de redirecionamentos impossível - A secção do URL Tracker no backoffice do Umbraco dá timeout ao tentar carregar
- Redirecionamentos antigos não podem ser removidos - Redirecionamentos obsoletos ou incorretos permanecem ativos
- Novos redirecionamentos não podem ser criados via Umbraco - A equipa tem de recorrer a alternativas manuais
- Performance da aplicação degradada - A tabela é consultada em cada pedido para verificar redirecionamentos
Solução Principal: Limpeza da Tabela¶
A solução prioritária é limpar a tabela icUrlTracker, mantendo apenas os redirecionamentos ativamente utilizados e recentes.
-- AVISO: Executar primeiro em ambiente de qualidade!
-- Fazer backup antes de executar em producao!
-- Opção 1: Manter apenas os últimos 30 dias
DELETE FROM icUrlTracker
WHERE Inserted < DATEADD(day, -30, GETDATE());
-- Opção 2: Manter apenas redirecionamentos marcados como ativos
-- (verificar a estrutura exata da tabela antes de executar)
DELETE FROM icUrlTracker
WHERE Is301 = 0
AND Inserted < DATEADD(day, -7, GETDATE());
-- Após limpeza, reconstruir índices
ALTER INDEX ALL ON icUrlTracker REBUILD;
Após a limpeza, a tabela deverá ter poucos milhares de registos, e a secção de redirecionamentos no backoffice voltará a funcionar normalmente.
Solução Alternativa: IIS URL Rewrite¶
Para redirecionamentos críticos que precisam de funcionar independentemente do estado da aplicação, podem ser usadas regras de IIS URL Rewrite no ficheiro web.config.
Esta abordagem já está a ser utilizada para alguns redirecionamentos, como por exemplo:
<!-- Exemplo ja existente no web.config -->
<rule name="Redirect presentesunicef.pt" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^presentesunicef\.pt$" />
</conditions>
<action type="Redirect" url="https://www.unicef.pt/{R:1}"
redirectType="Permanent" />
</rule>
Quando usar IIS URL Rewrite vs. URL Tracker¶
| Critério | IIS URL Rewrite (web.config) | URL Tracker (Umbraco) |
|---|---|---|
| Redirecionamentos de domínio | Recomendado | Não adequado |
| Redirecionamentos permanentes críticos | Recomendado | Adequado |
| Redirecionamentos temporários | Possível | Recomendado |
| Gestão por não-técnicos | Não (requer deploy) | Sim (backoffice) |
| Performance | Excelente (processado pelo IIS) | Boa (depende da BD) |
| Independente da aplicacao | Sim | Nao |
Plano de Resolução¶
- Fazer backup completo da base de dados de produção
- Exportar os redirecionamentos ativos para um ficheiro CSV (para referência)
- Executar a limpeza no ambiente de qualidade
- Testar os redirecionamentos críticos (ex: presentesunicef.pt) no ambiente de qualidade
- Executar a limpeza em produção numa janela de manutenção
- Verificar que o backoffice carrega a secção de redirecionamentos corretamente
- Migrar redirecionamentos críticos para regras IIS URL Rewrite no
web.config(para maior fiabilidade)