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\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#

  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 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"]
  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)