Hace unos días atrás, empecé a investigar sobre que medidas podía tomar para mejorar el SEO de mi sitio web, polisofia.com, y una de esas medidas era crear una página 404 personalizada.

Antes de ilustrar cómo y qué hice, les explicaré que es un sitio 404. Como dice en Wikipedia, “HTTP Error 404 o not found es un código de estado HTTP que indica que el host ha sido capaz de comunicarse con el servidor, pero no existe el recurso que ha sido pedido”. Osea, el usuario se equivocó al escribir la url, el link ya no existe o el desarrollador se equivocó en algo y por eso el sitio al que se intenta acceder no existe.

En mi búsqueda, encontré dos maneras que es haciendo, más bien modificando, el archivo 404.html que está en public/404.html o con rails. Decidí hacerlo con rails ya que tiene dos grandes beneficios.

Puedo utilizar el layout
Puedo utilizar internacionalización, o sea, puedo tener el sitio 404 en distintos idiomas.

Ahora vamos a la acción.

Primero, hay que borrar el archivo default que está en public, el archivo 404.html para evitar errores.

Segundo, hay que modificar el archivo application.rb que está en config y en las rutas agregamos:

module NameOfMyApp
  class Application < Rails::Application
    # …

    require Rails.root.join("lib/custom_public_exceptions")
    config.exceptions_app = CustomPublicExceptions.new(Rails.public_path)
  end
end
Rails.application.routes.draw do
  match "/404" => "errors#error404", via: [ :get, :post, :patch, :delete ]

  # …
end

Ahora, tenemos que crear los siguientes archivos de la forma habitual:
lib/custom_public_exceptions.rb
app/controllers/errors_controller.rb
app/views/errors/error404.erb

Y listo! Sólo faltaría revisar en desarrollo si es que funciona o no. Ingresa a http://localhost:3000/404 y en caso de que no aparezca, revisa que hayas borrado el archivo 404.html que está en la carpeta publica.

Les dejo el resultado de lo que hice: http://polisofia.com/404