Tabla de Contenidos
Se necesitan un par de sencillos pasos para instalar WordPress, pero debes ajustar algunos de los parámetros predeterminados para optimizar aún más el rendimiento y también mejorar la seguridad de tu sitio web de WordPress.
Optimiza tu instalación de WordPress
Estas sugerencias son sólo aplicables a los sitios que utilizan WordPress.org con alojamiento propio y no los blogs de WordPress.com. Además, supongo que estás ejecutando WordPress en Apache con Linux. Vamos a empezar:
1. Mueve fuera la carpeta de carga de archivos de medios
WordPress almacena todas sus imágenes y archivos cargados en la carpeta wp-content / uploads. Sin embargo, deberás mover esta carpeta fuera de la carpeta principal de WordPress, por ejemplo en un subdominio. Por lo tanto las copias de seguridad de WordPress serán más manejables (los archivos cargados y los temas pueden ser respaldados por separado) y lo más importante, al servir imágenes de un dominio diferente permitirá descargas paralelas en el navegador mejorando el tiempo de carga de la página.
Abre el archivo wp-config.php y añade las siguientes líneas para cambiar la ubicación de la carpeta wp-content.
define( 'WP_CONTENT_URL', 'http://files.dominio.com/media' ); define( 'WP_CONTENT_DIR', $_SERVER['HOME'] . '/files.dominio.com/media' );
También puedes pasar todos los contenidos de los archivos de Medios utilizando el CDN del plugin W3 Total cache del que haré un tutorial próximamente.
2. Retire los meta tags innecesarios de la cabecera de WordPress
Si te fijas en el código HTML fuente de tu sitio de WordPress, encontrarás un par de etiquetas meta en el encabezado que no son realmente necesarias. Por ejemplo, la versión de software de WordPress que se ejecuta en el servidor puede ser fácilmente recuperada al mirar en la fuente de tu cabecera.
<meta name="generator" content="WordPress 4.1" />
Esta información es una buena pista para hackers que buscan los blogs que están utilizando las versiones más antiguas y menos seguras del software de WordPress. Para eliminar completamente el número de versión y otros meta-datos no esenciales de tu cabecera de WordPress, añade este fragmento en el fichero functions.php encontrado en la carpeta de temas de WordPress.
remove_action( 'wp_head', 'wp_generator' ) ; remove_action( 'wp_head', 'wlwmanifest_link' ) ; remove_action( 'wp_head', 'rsd_link' ) ;
3. Evita que las personas puedan navegar por tus carpetas
Puesto que no quieres que cualquiera pueda navegar por los archivos de WordPress y las carpetas usando la vista de explorador en navegadores web, añade la siguiente línea a tu archivo .htaccess que está en el directorio raiz de la instalación de WordPress.
Options All -Indexes
Asegúrate también de que hay un index.php en blanco en las carpetas wp-content/themes y wp-content/plugins de tu directorio de WordPress.
4. Deshabilita el HTML en los comentarios de WordPress
El cuadro de comentarios en WordPress permite a los comentaristas usar etiquetas HTML e incluso pueden agregar hipervínculos en sus comentarios. Los comentarios tienen rel = nofollow pero si no deseas el HTML en los comentarios de WordPress, añade este fragmento a tu archivo functions.php.
add_filter( 'pre_comment_content', 'wp_specialchars' );
5. Desactiva las revisiones posteriores en WordPress
WordPress incluye una función útil de revisiones para ayudarte a rastrear cambios en las ediciones de los posts y también puede volver a cualquier versión anterior de tu blog. Sin embargo las revisiones aumentan el tamaño de la tabla wp_posts de WordPress con cada revisión lo que significa una fila adicional en nuestra base de datos.
Para desactivar las revisiones posteriores en WordPress, abre el archivo wp-config.php en el directorio de WordPress y añade la siguiente línea:
define( 'WP_POST_REVISIONS', false);
Alternativamente, si deseas mantener la funcionalidad «Revisiones de publicaciones», es posible que sólo tengas que limitar el número de revisiones de posts que WordPress almacena en la base de datos MySQL. Añade esta línea al archivo wp-config para guardar sólo las últimas 3 ediciones.
define ('WP_POST_REVISIONS', 3);
6. Cambia el intervalo del auto guardado del post
Al editar un blog dentro del editor de WordPress, se auto-guardan los borradores y esto ayuda en la recuperación de tu trabajo en caso de que el navegador se bloquee. Los borradores se guardan cada minuto, pero puede cambiar la duración predeterminada por 120 segundos (o 2 minutos) mediante la adición de una línea a tu archivo wp-config.php.
define ('AUTOSAVE_INTERVAL', 120);
7. Ocultar los no esenciales RSS Feeds de WordPress
La instalación de WordPress genera múltiples RSS Feeds como el feed del blog, el feed del artículo, el feed de los comentarios, feed de categoría, feed de archivo, etc. y estos son auto-detectables y están incluidos en la cabecera HTML de las páginas del blog usando la etiqueta meta . Si lo que deseas es dar a conocer tu feed RSS principal y eliminar los otros canales puedes añadir una línea a tu archivo functions.php:
remove_action ('wp_head', 'feed_links', 2); remove_action ('wp_head', 'feed_links_extra', 3);
8. Mantener un único Feed RSS y redirigir los otros
En el paso anterior, simplemente quitamos las fuentes RSS dentro de la cabecera de sitio, pero las fuentes RSS existen todavía. Si lo que quieres es tener una sola fuente RSS servida a través de FeedBurner y desactivar todas las demás, añade esto a tu archivo .htaccess. Recuerda reemplazar la URL del feed con el tuyo propio.
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_USER_AGENT} !^.*(FeedBurner|FeedValidator) [NC] RewriteRule ^feed/?.*$ http://ejemplo.com/feed/ [L,NC,R=301] </IfModule>
9. Desactivar los avisos de inicio de sesión en WordPress
Cuando se escribe un nombre de usuario que no existe o una contraseña incorrecta al iniciar sesión en WordPress, proporcionará un mensaje de error muy detallado que le dice exactamente si tu nombre de usuario es incorrecto o la contraseña no coincide. Esto podría ofrecer una pista para las personas que están tratando de entrar en tu blog de WordPress, pero afortunadamente podemos desactivar los avisos de inicio de sesión.
function no_wordpress_errors(){ return '¡SAL DE MI CESPED AHORA!'; } add_filter( 'login_errors', 'no_wordpress_errors' );
10. Habilitar autenticación en dos pasos
Esto es muy recomendable. Si alguien se apodera de tus credenciales de WordPress, todavía necesitarán tu teléfono móvil para entrar en el panel de WordPress.
A diferencia de Dropbox o Google, la autenticación de 2 pasos no es parte de WordPress, pero siempre puedes utilizar el plugin Google Authenticator para habilitar la autenticación de 2 factores.
11. Cambiar la estructura Permalink
No utilices la estructura Permalink que viene por defecto en WordPress, ya que es malo para el SEO. Dirigete a Opciones > Enlaces permanentes dentro de tu panel de WordPress y cambia la estructura de WordPress Permalink a algo como:
Opción 1. /% post_id% /% postname% Opción 2. / categoría%% /% postname% /% post_id% /
12. Añade un Favicon e iconos táctiles
Si tu tema de WordPress no permite incluir un favicon (favicon.ico) o los iconos táctiles de Apple, pero los navegadores y lectores de feeds todavía pueden solicitarlos de tu servidor. Es siempre mejor servir un archivo que devolver un error 404.
En primer lugar, crea un favicon.ico 16 × 16 y un archivo apple-touch.png de 144 × 144 y súbelos al directorio principal de tu blog. A continuación, añade esta línea a tu .htaccess para redirigir todas las peticiones de apple touch icon a ese archivo en particular.
RedirectMatch 301 /apple-touch-icon(.*)?.png http://ejemplo.com/apple-touch.png
13. Desactivar la indexación de los scripts de WordPress
¿Quieres que Google y otros motores de búsqueda puedan rastrear e indexar las páginas del blog, pero no los diversos archivos PHP de tu instalación de WordPress? Abre el archivo robots.txt en tu directorio de WordPress y añade estas líneas para bloquear que los robots indexen las carpetas internas de WordPress.
User-agent: * Disallow: /wp-admin/ Disallow: /wp-includes/ Disallow: /wp-content/plugins/ Disallow: /wp-content/themes/ Disallow: /feed/ Disallow: */feed/
14. Cambiar el administrador en suscriptor
Si tu nombre de usuario de WordPress es «admin», crea un nuevo usuario y otorgarles privilegios de administrador. Ahora cierra sesión en WordPress, inicie sesión de nuevo como el nuevo usuario y cambia el privilegio de usuario «admin» de Administrador para suscriptor.
Puedes incluso suprimir el usuario «admin» y transferir las entradas / páginas existentes al nuevo usuario. Esto es importante por razones de seguridad, ya que no quieres que nadie adivine el nombre de usuario que tenga privilegios de administrador para la instalación de WordPress.
15. Oculta el Sitemaps XML de los motores de búsqueda
XML Sitemaps ayuda a los motores de búsqueda a indexar y rastrear nuestros contenidos, pero supongo que no quieres que los motores de búsqueda puedan mostrar realmente tu mapa del sitio en las páginas de resultados. Añade esto a tu .htaccess para evitar la indexación de XML Sitemaps .
<IfModule mod_rewrite.c> <Files sitemap.xml> Header set X-Robots-Tag "noindex" </Files> </IfModule>
16. No utilices el sistema de búsqueda de WordPress
Asegúrate de que la búsqueda en tu sitio web es alimentado por Google Custom Search y no utilices la función de búsqueda integrada de WordPress por defecto. La búsqueda de WordPress devuelve los resultados menos relevantes y la otra ventaja es que vas a reducir la tensión en tu servidor/base de datos de WordPress, pues las consultas de búsqueda serán manejadas a través de Google.
17. Protege con contraseña el directorio wp-admin
Puedes agregar fácilmente otro nivel de seguridad a la instalación de WordPress para proteger el password del directorio wp-admin. No obstante, tendrás que acordarte de dos conjuntos de credenciales para iniciar sesión en WordPress, como la contraseña de WordPress y la contraseña que protege el directorio wp-admin .
18. Errores 404 en Google Analytics
Los errores 404 son una oportunidad perdida. Puedes usar los eventos de Google Analytics para registrar tus errores 404 , incluyendo detalles sobre el sitio de referencia que apunta a la página 404 de tu sitio. Añade este fragmento a tu archivo 404.php .
<? if (is_404()) { ?> _gaq.push(['_trackEvent', '404', document.location.pathname + document.location.search, document.referrer, 0, true]); <? } ?>
19. Elimina los temas y plugins que no estás utilizando
Los plugins y temas no utilizados no afectan el rendimiento de tu sitio web de WordPress, pero el objetivo debe ser tener el menor código ejecutable como sea posible en nuestro servidor. Así que desactiva y elimina las cosas que ya no necesitas.
20. Detener las adivinanzas URLs de WordPress
WordPress tiene una extraña costumbre de utilizar URLs adivinanzas y lo hace cometer errores en la mayoría de los casos. Me explico. Si un usuario quiere ver la URL reinspirit.com/hola pero esta página no existe, WordPress puede redirigir al usuario al reinspirit.com/hola-mundo sólo porque las URLs tienen algunas palabras comunes.
Si deseas que WordPress deje de adivinar las direcciones URL y en lugar incluya un error 404 Not Found para las páginas que faltan, pon este fragmento en el archivo functions.php:
add_filter ('redirect_canonical', 'stop_guessing'); stop_guessing función ($ url) { si (is_404 ()) { return false; } return $ url; }
21. Establecer expiración de encabezados para páginas estáticas
Los archivos estáticos alojados en tu sitio web de WordPress como imágenes, CSS y Javascript no van a cambiar a menudo y por lo tanto puedes configurar Expirar Encabezados para que los archivos se almacenen en caché en el navegador del usuario. Por lo tanto, para las visitas siguientes, tu sitio se carga relativamente más rápido al guardar el JS y CSS en la cache local.
Consulta este Github sobre HTML5 para obtener detalles sobre la configuración de las cabeceras de caducidad y compresión para el rendimiento. Si estás usando un plugin de caché como W3 Total Cache, el control de caché es administrado por el propio plugin.
ExpiresActive On ExpiresByType image/gif "access plus 30 days" ExpiresByType image/jpeg "access plus 30 days" ExpiresByType image/png "access plus 30 days" ExpiresByType text/css "access plus 1 week" ExpiresByType text/javascript "access plus 1 week"
23. Mejorar la seguridad de WordPress
He hablado de la seguridad de WordPress en detalle anteriormente. Lo esencial es que debes agregar claves secretas a tu archivo wp_config.php, instalar un plugin de monitoreo de archivos (como Sucuri o WordFence), cambiar el prefijo de las tablas de WordPress y también limitar los intentos de entrada para evitar ataques de fuerza bruta.
24. Desactivar el Archivo Edición de WordPress
Cuando se inicia la sesión en tu panel de WordPress como administrador, puedes editar fácilmente cualquiera de los archivos PHP asociados con tus plugins de WordPress y temas. Si deseas eliminar la funcionalidad de edición de archivos (un punto y coma que falta puede acabar con tu sitio de WordPress), añade esta línea a tu archivo wp-config.php:
define ('DISALLOW_FILE_EDIT', true);
25. Retira los parámetros de consulta adicionales de URLs
Si la dirección de tu sitio de WordPress es ejemplo.com, la gente todavía puede llegar a tu sitio si agregan unos parámetros de consulta a la URL. Como puede ser ejemplo.com/?utm=ga o ejemplo.com/?ref=feedly son técnicamente hablando URLs completamente diferentes pero funcionarán bien.
Esto es malo porque diluye la equidad de tu vínculo (SEO) y, en una situación ideal, te gustaría que todas las URL apunten a la versión canónica. Añade este pequeño fragmento al archivo .htaccess y eliminará todos los parámetros de consulta innecesarios de todas las peticiones entrantes.
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{QUERY_STRING} !="" RewriteCond %{QUERY_STRING} !^p=.* RewriteCond %{QUERY_STRING} !^s=.* RewriteCond %{REQUEST_URI} !^/wp-admin.* RewriteRule ^(.*)$ /$1? [R=301,L] </IfModule>
26. Elimina la barra de administración
Esta es una característica molesta de WordPress que añade una barra de admin en la parte superior de todas las páginas, y que es visible para todos los usuarios que han iniciado sesión en sus cuentas de WordPress. Sin embargo, esto puede ser eliminado mediante la adición de una línea al archivo functions.php.
add_filter ('show_admin_bar', '__return_false');
27. Alternativas de contenidos para Ad Blockers
Algunos de tus lectores del blog pueden estar utilizando software de bloqueo de anuncios para bloquear la publicación de anuncios de tu sitio. Puede servir contenido alternativo como una lista de tus entradas de WordPress populares o incluir un vídeo de YouTube en su lugar.
28. Añade tu marca al RSS feed
Puedes agregar fácilmente el logotipo de marca a todos los artículos en el feed RSS. Y puesto que éstos se sirven de tu servidor, puede incluir una imagen diferente para los sitios que están plagiando tu contenido por la reedición del feed. Añade esto a tu archivo functions.php.
function add_rss_logo($content) { if(is_feed()) { $content .= "<hr><a href='blog_url'><img src='logo_url'/></a>"; } return $content; } add_filter('the_content', 'add_rss_logo'); add_filter('the_excerpt_rss', 'add_rss_logo');
29. Instala los plugins imprescindibles
Aquí está una lista completa de plugins de WordPress que utilizo o he utilizado y recomiendo.
30. Mantenerse logeado por un período más largo
Si marcas la opción «Recuérdame», WordPress te mantendrá conectado por 2 semanas. Si sólo está iniciando sesión en WordPress desde un ordenador personal, puedes ampliar fácilmente la fecha de expiración de la autorización de inicio de sesión de cookies mediante la adición de esto a tu archivo functions.php.
add_filter( 'auth_cookie_expiration', 'stay_logged_in_for_1_year' ); function stay_logged_in_for_1_year( $expire ) { return 31556926; // 1 year in seconds }
Seguro que existen mas formas de optimizar WordPress después de realizar la instalación, y si conoces algunas mas estaría encantado de que las compartas en los comentarios de abajo.
David dice
Pedro, esta muy buena esta compilación. Ahí voy de a pocos implementandolas, son bastantes!
Pedro Mendez dice
Estupendo David! Despacito y buena letra 😉
Creo que haces algunas recomendaciones basadas en conceptos antiguos que ya no son válidos. Por ejemplo, decir que las URLs preestablecidas en WordPress son malas para el SEO no tiene ningún fundamento, al menos a mi no se me ocurre ninguno, y veo que tu no lo aplicas en tu propio blog. Además, propones introducir el post_id, lo que supone introducir un parámetro irrelevante para los motores de búsquedad y que además puede ser molesto para los usuarios. Hace muuuuuuucho tiempo que se habló de poner el post_id porque hacia más rápida la respuesta de WordPress; eso era cierto pero se solucionó en WP 3.3.
Otra recomendación que me ha llamado la atención es recomendar crear un archivo robots.txt real. Sin meterme en si me parece oportuno o no el contenido que propones, crear un archivo robtos.txt inhabilita la forma en la que WordPress trabaja con el robots.txt. WordPress utiliza un robots.txt virtual que se puede modificar a través de filtros y acciones, mecanismo utilizado por muchos plugins. Si creas un robots.txt real, inhabilitas el virtual e impides que los plugins que lo necesiten puedan modificarlo.
Tampoco estoy de acuerdo con eliminar todos los query vars de las URLs como una recomendación general pues te impide utilizar muhcas de las herramientas de tracking para comercio online o para social tracking. Además, WordPress añade la etiqueta canonical en la cabecera, con lo que las query vars no te harán ningún daño.
Hay algunas propuestas más con las que no estoy de acuerdo, pero no estoy seguro si tengo fundamentos sólidos o sólo son preferencias personales, así que prefiero no comentarlas.
También tienes propuestas que me han parecido muy interesantes, como la de mover el contenido de uploads a un subdominio para permitir descargas paralelas.
Hola CybMeta. La URL predeterminada que viene por defecto es esta https://reinspirit.com/?p=123 y como comprenderás no es nada amigable de cara a SEO. El post ID puede evitar URLs duplicadas en el caso de tener un blog con miles de entradas y puede servir para identificar ese post para multiples opciones. Es verdad que yo no utilizo ese formato porque mi blog tiene ya algunos años y no lo voy a cambiar ahora. Respecto a los robots.txt Yoast ha escrito hace poco un artículo al respecto https://yoast.com/wordpress-robots-txt-example/ y le vamos a hacer caso ;). Gracias por tu aportación y espero verte pronto por aquí ofreciendo tu experiencia. Saludos!
Me refería a las URLs *amigables* predeterminadas. En WPSE hay muchas preguntas sobre ese tema y al final la conclusión es la misma: no hay una respuesta clara y objetiva, todo opiniones. Lo que dices que utilizar el post ID evita tener URLs duplicadas; utilizando el postname tampoco las tendrás porque WordPress no te deja poner el mismo slug para dos posts; y si alguna vez se te ocurre cambiar el slug, WordPress redirige de forma automática desde el viejo al nuevo slug asegurando la «supervivencia» del post. La última pregunta sobre este tema en WPSE hubo un debate muy interesante sobre utilizar post ID y sobre no utilizarlo, pero que como digo no llegó a nada claro. Finalmente el debate fue borrado precisamente por ser «primary opinion based question», lo que es off-topic en WPSE. Te puedes hacer una idea por qué pienso que es una recomendación sin fundamento y más una «opinión», válida por supuesto, pero tanto como cualquier otra opinión.
Del robots.txt, como decía,no me refería al contenido si no al hecho de crear el archivo robots.txt real. Para modificar el robots.txt en WordPress se debería utilizar el filtro robots_txt. También se puede alterar con la acción do_robotstxt. El problema es que si creas un archivo robots.txt real, se utilizará ese e impides que los plugins que utilicen el filtro robots_txt o la acción do_robotstxt puedan funcionar.
Si es verdad que WordPress crea un slug alternativo del tipo contacto/ a contacto-2/ si hay dos url iguales, pero aún así lo veo poco amigable esa alternativa, aunque como bien dices solo es mi opinión y para gustos los colores :). Respecto a robots.txt ¿tienes alguna recomendación de un filtro o una acción para incluir en funtions.php que nos pueda servir para tener nuestro sitio mejor optimizado?
Creo que el robots.txt predeterminado que genera WordPress desde la versión 4.0 es, hoy por hoy, perfecto para la mayoría de webs, habría que estudiar casos particulares que puedan requerir alguna modificación.
Yo, por ejemplo, sólo lo modifico para añadir la referencia al sitemap:
add_filter( ‘robots_txt’, function( $output ) {
$output .= «\nSitemap: » . site_url( ‘sitemap.xml’ ) . «\n»;
return $output;
});
PD: el código anterior, mejor en un plugin que en functions.php o se perderá la funcionalidad si se cabmia de tema.
Gracias CymMeta! Aunque Yoast dice lo siguiente sobre añadir el sitemap.xml a robots txt:
«Vinculación a su sitemap XML desde el archivo robots.txt. Siempre he sentido que une a su sitemap XML desde el archivo robots.txt es un poco absurdo. Usted debe ser añadirlos manualmente a sus Google y Bing Webmaster Tools y asegúrese de que nos fijamos en sus comentarios acerca de su sitemap XML. Esta es la razón de nuestro plugin de WordPress SEO no lo agrega a su archivo robots.txt.»
Tu que opinas.
Respecto a perder las funciones yo por ejemplo utilizo un tema hijo para que no se produzca perdida de datos en las actualizaciones o cambios
Añadir la referencia al sitemap en robots.txt no es sustitutivo de enviarlo a Google Webmaster Tools, o a Bing, pero hay otros muchos motores de búsqueda y otros muchos robots a los que esa referencia les puede ser útil (así se recomienda en las especificaciones sobre Sitemaps, casi al final en la sección «Informing search engine crawlers»).
De todas formas era por ponerte un ejemplo de uso del filtro
robots_txt
, no pretendía hacer una recomendación, ni mucho menos, como dije, **creo** que el robots.txt que genera WordPress de forma predeterminada es perfecto para la gran mayoría de webs.Además, robots.txt son indicaciones no obligatorias, lo que significa que los robots se lo pueden saltar a su antojo. Por ejemplo, Google dice:
Ya Juan era para saber solo tu punto de vista. Se que no es una recomendación. Pues me lo apunto todo porque me parece muy interesante. Muchas gracias de nuevo por aportar tanto valor de forma desinteresada. Estamos en contacto compañero!
Jejeje. Si me das carrete, no paro. Un placer compartir opiniones y puntos de vista. Saludos.
excelente… por casualidad sabes como hacer que un enlace padre o superior no tenga pagina o link donde ir??? me ayudaria bastante esto
Hola Marmuzm. Puedes explicar mejor tu pregunta?
¡Qué buen post!
Aprendiendo y tomando nota…
¡Saludos!
Hola, gracias por todas las recomendaciones, tengo una duda a ver si me la puedes aclarar ¿mover la carpeta de uploads a un subdominio no genera enlaces rotos? Soy nuevo en esto y estoy tratando de mejorar la carga de mi página web. Adicionalmente me gustaría saber que tan fácil es crear un subdominio, muchas gracias por las respuestas.
Saludos.
Hola Francisco. No genera enlaces rotos, solo los cambia de ubicación. Respecto a crear un subdominio hay cientos de tutoriales por Internet que te pueden guiar de forma sencilla a crear uno. Saludos!
Estimado Pedro, muchas gracias por la respuesta. Aprovecho para extenderme un poco mas en la consulta ¿si mi página no tiene muchas imágenes y están bien comprimidas, igual me sirve crear un subdominio para mejorar los tiempos de carga? la mía tiene cerca de 3 segundos pero quiero bajarla a menos de 2. He resuelto muchos aspectos de la optimización de mi página, con lo que aun no puedo y me estoy informando, es con el tema del css y el javascript, aun lo veo un poco complejo, si tienes algún post específico respecto a este tema o me puedes recomendar uno, agradezco me compartas la información.
Muchas gracias por tu amable respuesta.
Saludos cordiales.
Hola Francisco. Tienes algún plugin de caché instalado? Una buena configuración del plugin W3 Total Cache puede hacer maravillas. Saludos
Gracias , buen contenido . Haré la practica de sus tips en mi pagina web.
Buen articulo de maravilla lo pondré en uso para mi pagina web saludo éxitos
Que buen articulo me ayudo mucho en mi proyecto muchas gracias saludos desde Perú
excelente articulo, gracias por tu aporte
De nada! 😉