Detectar links quebrados e a exibição da página de erro 404 para as páginas não encontradas é uma forma muito eficaz de manter o correto funcionamento de um site e as ligações entre suas diferentes páginas. Com poucas linhas de código é possível criar um registro desses links defeituosos e também notificar o administrador do site da ocorrência de tal problema.

Arquivo de log próprio

Para criar um arquivo de log específico para catalogar os acessos inválidos será criado um plugin simples com apenas uma intervenção no código do WordPress: Logo após carregar o WordPress o plugin verifica se o endereço é do tipo 404 e, caso seja positiva a verificação, gera uma entrada em um arquivo de log do tipo .CSV (a escolha desse formato foi em razão da fácil manipulação desses dados em planilhas).

Inicialmente o plugin recebe as configurações iniciais e cria o arquivo de log apenas com o seu cabeçalho. As informações a serem armazenadas são a data e hora do acesso, o link acessado e a origem desse acesso inválido.

class WPDEV_404_Notifier
{

    private static $log_file;

    public static function setup()
    {
        self::$log_file = plugin_dir_path( __FILE__ ) . '404.log';
        self::set_log();
    }

    private static function set_log()
    {
        if ( !file_exists( self::$log_file ) ) {
            $log = 'Data/Hora;URL;Origem';
            file_put_contents( self::$log_file, $log );
        }
    }

}

add_action( 'plugins_loaded', array( 'WPDEV_404_Notifier', 'setup' ) );

A execução de uma ação logo após o WordPress ter sido carregado será dada pelo gancho wp. Dentro do método setup será feita a devida chamada do gancho:

add_action( 'wp', array( 'WPDEV_404_Notifier', 'init' ) );

Por fim, o método init será responsável por verificar o acesso e gerar o log.

public static function init()
{
    if ( is_404() ) {
        $log = sprintf(
            '"%s";"%s";"%s"',
            date( 'd/m/Y H:i:s' ),
            $_SERVER[ 'REQUEST_URI' ],
            wp_get_referer()
        );
        file_put_contents(
            self::$log_file,
            PHP_EOL . $log,
            FILE_APPEND
        );
    }
}

Arquivo de log do WordPress

A proposta de um arquivo de log próprio é boa para manter as ocorrências dos erros 404 agrupados em um único lugar. Porém, caso seja preferível, o plugin pode tratar esse erro como uma nova entrada do arquivo debug.log. Nesse caso a propriedade $log_file e o método set_log seriam dispensáveis, bastando alterar o método init do plugin para:

public static function init()
{
    if ( is_404() ) {
        $ref = wp_get_referer();
        $referer = ' ';
        if ( $ref ) {
            $referer = sprintf(
                ' acessado através da página "%s" ', $ref
            );
        }
        $error = sprintf(
            'O endereço "%s"%snão existe',
            $_SERVER[ 'REQUEST_URI' ], $referer
        );
        error_log( $error );
    }
}

A visualização do conteúdo do arquivo debug.log pode ser facilitada pelo plugin WordPress Log Viewer.

Notificar o administrador por email

Outra alternativa para identificar as páginas 404 de um site é optar por disparar um email de notificação ao administrador do site, ao invés de gerar um log desses erros. Esse processo é muito usado para notificar o autor de um post que seu conteúdo foi publicado ou então a um visitante que teve um comentário respondido no site.

Essa opção também dispensa a propriedade $log_file e o método set_log; e as rotinas do método init seriam as seguintes:

public static function init()
{
    if ( is_404() ) {
        $email = get_option( 'admin_email' );

        $ref = wp_get_referer();
        $msg = sprintf(
            'Erro 404 - Endereço não encontrado' . PHP_EOL .
            'A URL "%s" não foi localizada.' . PHP_EOL .
            'Origem do acesso: %s',
            $_SERVER[ 'REQUEST_URI' ],
            ( $ref ) ? $ref : 'Desconhecida'
        );

        wp_mail( $email, 'Erro 404', $msg );
    }
}

Caso exista algum problema com a entrega desses emails, uma possível solução é realizar o envio de email no WordPress com autenticação de SMTP.

Monitorar os links do site permite manter o correto funcionamento do projeto. A execução dessa tarefa não convém ser feita de forma manual; pelo contrário, aqui estão dispostas três formas diferentes de saber quais são os links quebrados de um site de modo automatizado para que as ações de correção possam ser pontuais seja na origem ou no destino do link.

Clique aqui para fazer o download da classe WPDEV_404_Notifier