Optimización del fichero htaccess

      • Forzar Trailing slash

Esta mejora consiste en evitar que al final de la URL aparezca una barra. A nivel de optimización en buscadores, esto significa que los buscadores lo interpretan como una redirección 302. Para evitar esto, es recomendable implementar esta mejora en el fichero htaccess.

Aliños para la seguridad y SEO WordPress (apuntes básicos)

<IfModule mod_rewrite.c>
 RewriteCond %{REQUEST_URI} /+[^\.]+$
 RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
</IfModule>
      • Prevenir Hotlinking

Hotlinking significa que alguien está usando un hipervínculo a una imagen que está archivada en otra web, en lugar de guardar una copia física de la imagen en el servidor de la web en el que se mostrará la imagen. Esto supone un consumo de ancho de banda innecesario, que perjudica al SEO.

#Replace ?mysite\.com/ with your blog url
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
#Replace /images/nohotlink.jpg with your "don't hotlink" image url
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]
    • Mejorar el almacenamiento en cache de los ficheros

Este es probablemente el fragmento más útil de toda esta lista. Mediante el uso de algunas simples mejoras de cacheo en el fichero .htaccess, puede aumentar drásticamente la velocidad de carga de una página web.

# 1 año
 <FilesMatch "\.(ico|pdf|flv)$">
 Header set Cache-Control "max-age=29030400, public"
 </FilesMatch>
 # 1 semana
 <FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
 Header set Cache-Control "max-age=604800, public"
 </FilesMatch>
 # 2 días
 <FilesMatch "\.(xml|txt|css|js)$">
 Header set Cache-Control "max-age=172800, proxy-revalidate"
 </FilesMatch>
 # 1 minuto
 <FilesMatch "\.(html|htm|php)$">
 Header set Cache-Control "max-age=60, private, proxy-revalidate"
 </FilesMatch>						
      • Expirar caché de fichero estáticos con htaccess

Mediante esta mejora en el fichero htaccess, se inlcuye en el Header el tiempo de expiración de un determinado archivo, de este modo este no es cargado nuevamente si es que aun no ha expirado. Se consigue con ellos que no cambien comúnmente como las imágenes, vídeos, ficheros JS y CSS a los cuales podríamos agregarle headers de expiración con lo cual solo se cargarán la primera vez que accedemos a la pagina.

<IfModule mod_rewrite.c>ExpiresActive On
 ExpiresByType image/jpg "access 1 year"
 ExpiresByType image/jpeg "access 1 year"
 ExpiresByType image/gif "access 1 year"
 ExpiresByType image/png "access 1 year"
 ExpiresByType text/css "access 1 month"
 ExpiresByType application/pdf "access 1 month"
 ExpiresByType text/x-javascript "access 1 month"
 ExpiresByType application/x-shockwave-flash "access 1 month"
 ExpiresByType image/x-icon "access 1 year"
 ExpiresDefault "access 2 days"
 </IfModule>

    • Eliminar cabeceras ETags

Al eliminar la cabecera ETag, se deshabilitan las cachés de los navegadores lo que otorga la posibilidad de validar los archivos, de esta forma el navegador utiliza su Cache-Control y Expires Header para servir los ficheros. Las etiquetas de entidad (eTags) son un mecanismo para comprobar si hay una nueva versión de un archivo almacenado en caché.

<ifModule mod_headers.c>
unset ETag
</ifModule>
FileETag none

Impactos: 0

Optimización del fichero htaccess

limpiar-html-wordpress

Optimización del fichero htaccess

      • Forzar Trailing slash

Esta mejora consiste en evitar que al final de la URL aparezca una barra. A nivel de optimización en buscadores, esto significa que los buscadores lo interpretan como una redirección 302. Para evitar esto, es recomendable implementar esta mejora en el fichero htaccess.

Aliños para la seguridad y SEO WordPress (apuntes básicos)

<IfModule mod_rewrite.c>
 RewriteCond %{REQUEST_URI} /+[^\.]+$
 RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
</IfModule>
      • Prevenir Hotlinking

Hotlinking significa que alguien está usando un hipervínculo a una imagen que está archivada en otra web, en lugar de guardar una copia física de la imagen en el servidor de la web en el que se mostrará la imagen. Esto supone un consumo de ancho de banda innecesario, que perjudica al SEO.

#Replace ?mysite\.com/ with your blog url
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
#Replace /images/nohotlink.jpg with your "don't hotlink" image url
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]
    • Mejorar el almacenamiento en cache de los ficheros

Este es probablemente el fragmento más útil de toda esta lista. Mediante el uso de algunas simples mejoras de cacheo en el fichero .htaccess, puede aumentar drásticamente la velocidad de carga de una página web.

# 1 año
 <FilesMatch "\.(ico|pdf|flv)$">
 Header set Cache-Control "max-age=29030400, public"
 </FilesMatch>
 # 1 semana
 <FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
 Header set Cache-Control "max-age=604800, public"
 </FilesMatch>
 # 2 días
 <FilesMatch "\.(xml|txt|css|js)$">
 Header set Cache-Control "max-age=172800, proxy-revalidate"
 </FilesMatch>
 # 1 minuto
 <FilesMatch "\.(html|htm|php)$">
 Header set Cache-Control "max-age=60, private, proxy-revalidate"
 </FilesMatch>						
      • Expirar caché de fichero estáticos con htaccess

Mediante esta mejora en el fichero htaccess, se inlcuye en el Header el tiempo de expiración de un determinado archivo, de este modo este no es cargado nuevamente si es que aun no ha expirado. Se consigue con ellos que no cambien comúnmente como las imágenes, vídeos, ficheros JS y CSS a los cuales podríamos agregarle headers de expiración con lo cual solo se cargarán la primera vez que accedemos a la pagina.

<IfModule mod_rewrite.c>ExpiresActive On
 ExpiresByType image/jpg "access 1 year"
 ExpiresByType image/jpeg "access 1 year"
 ExpiresByType image/gif "access 1 year"
 ExpiresByType image/png "access 1 year"
 ExpiresByType text/css "access 1 month"
 ExpiresByType application/pdf "access 1 month"
 ExpiresByType text/x-javascript "access 1 month"
 ExpiresByType application/x-shockwave-flash "access 1 month"
 ExpiresByType image/x-icon "access 1 year"
 ExpiresDefault "access 2 days"
 </IfModule>

    • Eliminar cabeceras ETags

Al eliminar la cabecera ETag, se deshabilitan las cachés de los navegadores lo que otorga la posibilidad de validar los archivos, de esta forma el navegador utiliza su Cache-Control y Expires Header para servir los ficheros. Las etiquetas de entidad (eTags) son un mecanismo para comprobar si hay una nueva versión de un archivo almacenado en caché.

<ifModule mod_headers.c>
unset ETag
</ifModule>
FileETag none

Impactos: 0

    • Optimizar el código HTML en WordPress

Implementa este código en el fichero functions.php del tema que estés utilizando para WordPress y eliminar HTML y etiquetas sin valor para el posicionamiento en buscadores

// optimizacion wordpress - delete html trush
remove_action( 'wp_head', 'wp_generator' ) ;
remove_action( 'wp_head', 'noindex', 1 ) ;
remove_action( 'wp_head', 'wlwmanifest_link' ) ;
remove_action( 'wp_head', 'rsd_link' ) ;
remove_action( 'wp_head', 'feed_links', 2 );
remove_action( 'wp_head', 'feed_links_extra', 3 );
remove_action( 'wp_head', 'parent_post_rel_link', 10, 0 );
remove_action( 'wp_head', 'start_post_rel_link', 10, 0 );
add_filter( 'pre_comment_content', 'wp_specialchars' ); 
//Disallow html in comments
remove_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0 );


/*Eliminar scripts y css de WordPress*/
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'admin_print_scripts','print_emoji_detection_script');
remove_action( 'wp_print_styles', 'print_emoji_styles' );
remove_action( 'admin_print_styles', 'print_emoji_styles' );

Impactos: 0

Optimizar el código HTML en WordPress

limpiar-html-wordpress
    • Optimizar el código HTML en WordPress

Implementa este código en el fichero functions.php del tema que estés utilizando para WordPress y eliminar HTML y etiquetas sin valor para el posicionamiento en buscadores

// optimizacion wordpress - delete html trush
remove_action( 'wp_head', 'wp_generator' ) ;
remove_action( 'wp_head', 'noindex', 1 ) ;
remove_action( 'wp_head', 'wlwmanifest_link' ) ;
remove_action( 'wp_head', 'rsd_link' ) ;
remove_action( 'wp_head', 'feed_links', 2 );
remove_action( 'wp_head', 'feed_links_extra', 3 );
remove_action( 'wp_head', 'parent_post_rel_link', 10, 0 );
remove_action( 'wp_head', 'start_post_rel_link', 10, 0 );
add_filter( 'pre_comment_content', 'wp_specialchars' ); 
//Disallow html in comments
remove_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0 );


/*Eliminar scripts y css de WordPress*/
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'admin_print_scripts','print_emoji_detection_script');
remove_action( 'wp_print_styles', 'print_emoji_styles' );
remove_action( 'admin_print_styles', 'print_emoji_styles' );

Impactos: 0

Aliños para la seguridad y SEO WordPress

Archivos que comprometen la seguridad de WordPress deberemos editar el archivo .htaccess y añadir al principio del mismo el siguiente código:

# proteger wpconfig.php
<files wp-config.php>
order allow,deny
deny from all
</files>

# proteger htaccess
<files .htaccess>
order allow,deny
deny from all
</files>

Proteger el directorio wp-admin con una contraseña

Añadir en .htaccess

AuthType Basic
AuthName "Acceso restringido"
AuthUserFile "/home/NOMBRECUENTA/.htpasswds/public_html/wp-admin/passwd"
require valid-user

Para generar estos datos podemos utilizar una página como la siguiente: http://www.htaccesstools.com/htpasswd-generator/

Ocultar listado de ficheros en tus directorios

Simplemente añade esto al inicio de tu fichero .htaccess:

Options -Indexes

Añadir al principio.

Header always append X-Frame-Options SAMEORIGIN
Header set X-Content-Type-Options nosniff
Header set X-XSS-Protection "1; mode=block"

Borrar los ficheros  license.txt, licencia.txt y readme.html

find / -name "license.txt" -exec rm -rf {} \;

find / -name "licencia.txt" -exec rm -rf {} \;

find / -name "readme.html" -exec rm -rf {} \;

Añadir compresión en .htaccess

<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>

Prueba de compresión

Compresión Apache2

Cambiar Server Signature

cambiar /etc/apache2/conf-enabled/security.conf si existe

vim /etc/apache2/conf-enabled/security.conf

cambiar:

  • ServerTokens Prod
  • ServerSignature Off

si el fichero no existe crearlo

vim /etc/apache2/conf-available/security.conf

y añadir

ServerTokens Prod
ServerSignature Off

luego habilitarlo con

a2enconf security 
service apache2 restart

Impactos: 0

Aliños para la seguridad y SEO WordPress (apuntes básicos)

limpiar-html-wordpress

Aliños para la seguridad y SEO WordPress

Archivos que comprometen la seguridad de WordPress deberemos editar el archivo .htaccess y añadir al principio del mismo el siguiente código:

# proteger wpconfig.php
<files wp-config.php>
order allow,deny
deny from all
</files>

# proteger htaccess
<files .htaccess>
order allow,deny
deny from all
</files>

Proteger el directorio wp-admin con una contraseña

Añadir en .htaccess

AuthType Basic
AuthName "Acceso restringido"
AuthUserFile "/home/NOMBRECUENTA/.htpasswds/public_html/wp-admin/passwd"
require valid-user

Para generar estos datos podemos utilizar una página como la siguiente: http://www.htaccesstools.com/htpasswd-generator/

Ocultar listado de ficheros en tus directorios

Simplemente añade esto al inicio de tu fichero .htaccess:

Options -Indexes

Añadir al principio.

Header always append X-Frame-Options SAMEORIGIN
Header set X-Content-Type-Options nosniff
Header set X-XSS-Protection "1; mode=block"

Borrar los ficheros  license.txt, licencia.txt y readme.html

find / -name "license.txt" -exec rm -rf {} \;

find / -name "licencia.txt" -exec rm -rf {} \;

find / -name "readme.html" -exec rm -rf {} \;

Añadir compresión en .htaccess

<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>

Prueba de compresión

Compresión Apache2

Cambiar Server Signature

cambiar /etc/apache2/conf-enabled/security.conf si existe

vim /etc/apache2/conf-enabled/security.conf

cambiar:

  • ServerTokens Prod
  • ServerSignature Off

si el fichero no existe crearlo

vim /etc/apache2/conf-available/security.conf

y añadir

ServerTokens Prod
ServerSignature Off

luego habilitarlo con

a2enconf security 
service apache2 restart

Impactos: 0

Cambiar en php.ini

Maximum allowed size for uploaded files.
upload_max_filesize = 2M
por
Maximum allowed size for uploaded files.
upload_max_filesize = 10M

Si lo anterior falla
max_execution_time = 7200; //Aumentar el tiempo de espera
upload_max_filesize = 20M; //aumentar tamaño permitido de archivos a subir
post_max_size = 20M; //aumentar tamaño de post

sino .htaccess
php_value upload_max_filesize 10M#set max post size
php_value post_max_size 10M

Impactos: 4

Como evitar el límite de subida de 2 Mb en WordPress

limpiar-html-wordpress

Cambiar en php.ini

Maximum allowed size for uploaded files.
upload_max_filesize = 2M
por
Maximum allowed size for uploaded files.
upload_max_filesize = 10M

Si lo anterior falla
max_execution_time = 7200; //Aumentar el tiempo de espera
upload_max_filesize = 20M; //aumentar tamaño permitido de archivos a subir
post_max_size = 20M; //aumentar tamaño de post

sino .htaccess
php_value upload_max_filesize 10M#set max post size
php_value post_max_size 10M

Impactos: 4

Para poder actualizar WordPress sin tener que configurar servidor FTP
Añadir la siguiente línea en wp-config.php

define(‘FS_METHOD’, ‘direct’);

Impactos: 0