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.
flowchart TD
A["Tabela icUrlTracker\n7.996.535 registos (~2.2 GB)"] --> B["Backoffice tenta carregar\na lista de redirecionamentos"]
B --> C["Query SQL demora > 30 segundos"]
C --> D["Timeout no browser"]
D --> E["Seccao de redirecionamentos\nnao carrega"]
E --> F["Administrador nao consegue\ngerir redirecionamentos"]
style A fill:#ff4444,color:#fff
style F fill:#ff4444,color:#fff
| Métrica | Valor |
|---|---|
| Registos na tabela icUrlTracker | 7.996.535 |
| Valor normal para um site desta dimensão | < 10.000 |
| Fator de excesso | ~800x |
| Tempo que o problema existe | ~1 ano |
O número extremamente elevado de registos (quase 8 milhões, confirmado em produção a 2026-04-14) 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 produção!
-- Eliminar logs de 404 (99,97% da tabela)
-- Mantém TODOS os redirects reais (Is404 = 0)
DELETE FROM icUrlTracker WHERE Is404 = 1;
-- Após limpeza, reconstruir índices
ALTER INDEX ALL ON icUrlTracker REBUILD;
Após a limpeza, a tabela passa de ~8 milhões para apenas ~1.904 registos (os redirecionamentos reais), e a secção de redirecionamentos no backoffice voltará a funcionar normalmente. Este script foi testado com sucesso em ambiente local com dados de produção.
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 aplicação | Sim | Não |
Plano de Resolução#
flowchart LR
A["1. Backup da BD"] --> B["2. Exportar redirecionamentos\nativos para CSV"]
B --> C["3. Executar limpeza\nem qualidade"]
C --> D["4. Testar redirecionamentos\ncriticos"]
D --> E["5. Executar limpeza\nem producao"]
E --> F["6. Verificar backoffice\nfuncional"]
F --> G["7. Mover redirecionamentos\ncriticos para web.config"]
- 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)