Skip to content

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\n1.631.926 registos (457 MB)"] --> 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 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

  1. Gestão de redirecionamentos impossível - A secção do URL Tracker no backoffice do Umbraco dá timeout ao tentar carregar
  2. Redirecionamentos antigos não podem ser removidos - Redirecionamentos obsoletos ou incorretos permanecem ativos
  3. Novos redirecionamentos não podem ser criados via Umbraco - A equipa tem de recorrer a alternativas manuais
  4. 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

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"]
  1. Fazer backup completo da base de dados de produção
  2. Exportar os redirecionamentos ativos para um ficheiro CSV (para referência)
  3. Executar a limpeza no ambiente de qualidade
  4. Testar os redirecionamentos críticos (ex: presentesunicef.pt) no ambiente de qualidade
  5. Executar a limpeza em produção numa janela de manutenção
  6. Verificar que o backoffice carrega a secção de redirecionamentos corretamente
  7. Migrar redirecionamentos críticos para regras IIS URL Rewrite no web.config (para maior fiabilidade)