Cómo especificar caché de navegador

Los sitios web necesitan de múltiples recursos para poder minimizar su tiempo de carga, uno de ellos es el caché, con el cual el administrador de un sitio web puede definir el tiempo de expiración de una imagen, texto, archivo, etc. Cuando se especifica el caché de navegador en una web lo que se esta haciendo básicamente, es decirle al navegador que tales archivos puede volverlos a mostrar como la primera vez que visito la web, así ahorra tiempo de carga al no tener que descargar nuevamente las imágenes.

Especificar caché de navegador en WordPress

Para especificar el cache de navegador en nuestro sitio creado con WordPress, haremos uso del archivo .htaccess, el cual descargamos de nuestro FTP para editarlo y colocarle el siguiente código (Código actualizado, el anterior presentaba problemas). Antes de borrar todo el contenido de tu archivo crea una copia de seguridad:


# Con especificamos cache

ExpiresActive On
ExpiresDefault "access plus 10 days"
ExpiresByType text/css "access plus 1 week"
ExpiresByType text/plain "access plus 1 week"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/x-icon "access plus 3 months"
ExpiresByType application/x-javascript "access plus 1 month"
ExpiresByType application/javascript "access plus 1 week"
ExpiresByType text/javascript "access plus 1 week"
ExpiresByType application/x-icon "access plus 3 months"

# FIN

Con el código anterior estamos definiendo el tiempo de expiración de las imágenes  y de todos los archivos en un mes. Listo, ahora volvemos a subir nuestro archivo al servidor, de esta manera tu sitio web demorará menos tiempo en cargar. Cualquier problema con el código puedes dejarlo en los comentarios.

suscribete a los comentarios

83 Comments

  1. Pingback: Cómo tener PageSpeed en 100 | PasiónSEO.com | Aprende SEO Gratis

    • Claro Andres también puedes hacerlo a través del Cpanel del hosting de tu web, puedes descargarlo en tu computadora y después lo modificas. normalmente el acceso se encuentra en la url tusitio.com/cpanel

      Saludos

  2. Pingback: Apache « el blog de yago

  3. Hola, he intentado varias veces pegar el código en mi archivo .htaccess la primera vez he borrado todo lo que tenia y lo he sustituido por el del post, y daba error la segunda lo he incluido al codigo que ya aparecía y también daba error.

    este es el codigo que viene por defecto en mi archivo htaccess:

    SetEnv PHP_VER 5
    SetEnv REGISTER_GLOBALS 0

    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]

    # BEGIN WordPress

    RewriteEngine On
    RewriteBase /
    RewriteRule ^index.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]

    # END WordPress

    donde debo pegarlo?
    gracias!!!!

      • Hola Kleber, excelente la información con respecto a WordPress y Page Speed.

        A mi me ha dado el mismo error que Jossué, he introducido los códigos en el archivo .htaccess, pero los he vuelto a quitar pues no cargaba la página en los navegadores.

        En que lugar concreto se deben pegar estos códigos en este archivo? Es un dato importante este.

        Este es el texto de mi archivo .htaccess de mi blog de WordPress:

        # -FrontPage-

        IndexIgnore .htaccess */.??* *~ *# */HEADER* */README* */_vti*

        order deny,allow
        deny from all
        allow from all

        order deny,allow
        deny from all

        AuthName comoconstruirundomo.info
        AuthUserFile /home/comodomo/public_html/_vti_pvt/service.pwd
        AuthGroupFile /home/comodomo/public_html/_vti_pvt/service.grp

        # BEGIN WordPress

        RewriteEngine On
        RewriteBase /
        RewriteRule ^index.php$ – [L]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule . /index.php [L]

        # END WordPress

        Te agradezco que indiques en que lugar van estos códigos, así de esta manera también guiamos a quienes sigan estos artículos en el futuro.

        Gracias

        Atte Daniel

        • Hola Josue y Daniel.

          Primero gracias por reportar el error. Estuve viendo y les deje un nuevo código actualizado (Se encuentra en el post). Ahora utilizo el modulo para ordenar la expiración al mes. la primera linea del código es la que viene por defecto una vez creamos URL amigables. Entonces solo tienes que copiar y pegar el codigo tal cual y borrar todo el contenido por defecto que trae tu htaccess.

          Si presenta problemas, dejen el comentario.

          Saludos

  4. Pingback: Desarrollar temas con base en preguntas mejora el SEO | Pasión SEO | Aprende SEO gratis

  5. antonio

    Hola, hay alguna forma de especificar el caché del navegador en un sitio “plain html”, es decir, a la antigua, sin wordpress ni nada? gracias

  6. Gerardo

    Se que ya tiene algun tiempo esta entrada,pero,he realizado los pasos y page speed me sigue mostrando que tengo que especificar la cache 🙁

  7. Jordi

    Hola Kleber, ¿es posible que el código tenga algún error? Lo he copiado tal cual en mi .htaccess pero una vez lo subo la página me muestra el típico error de “Internal Server Error”. Espero una respuesta. Muchas gracias!

  8. Jacobo

    Hola!!

    Yo ando algo desesperado porque no hay forma de que funcione!! ;(((((

    He probado varios códigos, el último el tuyo pero en teoría no hay manera de que funcione 🙁

    Y digo en teoría porque en el pagespeed de google me marca ese error:

    http://developers.google.com/speed/pagespeed/insights/?url=http%3A%2F%2Fwww.dise%C3%B1adorwebcoru%C3%B1a.es%2F

    Mi web no es WordPress, no se si puede ser ese el problema. Igualmente en mi servidor está activado el “Mod_expires”

    ¿sabes cual puede ser el problema?

  9. Hola amigo, sinceramente estoy teniendo problemas con esa parte del htacces porque no me lo reconoce, antes llegaba al 97% y 92% de gtmetrix respectivamente y ahora puedo llegar hasta 90% por que no me toma lo del cache.. tepaso mi htaccess para ver si me puedes dar una mano

    # Con especificamos cache

    ExpiresActive On
    ExpiresDefault “access plus 10 days”
    ExpiresByType text/css “access plus 1 week”
    ExpiresByType text/plain “access plus 1 week”
    ExpiresByType image/gif “access plus 1 month”
    ExpiresByType image/png “access plus 1 month”
    ExpiresByType image/jpeg “access plus 1 month”
    ExpiresByType image/x-icon “access plus 3 months”
    ExpiresByType application/x-javascript “access plus 1 month”
    ExpiresByType application/javascript “access plus 1 week”
    ExpiresByType text/javascript “access plus 1 week”
    ExpiresByType application/x-icon “access plus 3 months”

    # FIN

    AddOutputFilterByType DEFLATE text/plain
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE application/xml
    AddOutputFilterByType DEFLATE application/xhtml+xml
    AddOutputFilterByType DEFLATE application/rss+xml
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE application/x-javascript

    # BEGIN WPSuperCache

    RewriteEngine On
    RewriteBase /
    #If you serve pages from behind a proxy you may want to change ‘RewriteCond %{HTTPS} on’ to something more sensible
    AddDefaultCharset UTF-8
    RewriteCond %{REQUEST_URI} !^.*[^/]$
    RewriteCond %{REQUEST_URI} !^.*//.*$
    RewriteCond %{REQUEST_METHOD} !POST
    RewriteCond %{QUERY_STRING} !.*=.*
    RewriteCond %{HTTP:Cookie} !^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$
    RewriteCond %{HTTP:X-Wap-Profile} !^[a-z0-9”]+ [NC]
    RewriteCond %{HTTP:Profile} !^[a-z0-9”]+ [NC]
    RewriteCond %{HTTP:Accept-Encoding} gzip
    RewriteCond %{HTTPS} on
    RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{SERVER_NAME}/$1/index-https.html.gz -f
    RewriteRule ^(.*) “/wp-content/cache/supercache/%{SERVER_NAME}/$1/index-https.html.gz” [L]

    RewriteCond %{REQUEST_URI} !^.*[^/]$
    RewriteCond %{REQUEST_URI} !^.*//.*$
    RewriteCond %{REQUEST_METHOD} !POST
    RewriteCond %{QUERY_STRING} !.*=.*
    RewriteCond %{HTTP:Cookie} !^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$
    RewriteCond %{HTTP:X-Wap-Profile} !^[a-z0-9”]+ [NC]
    RewriteCond %{HTTP:Profile} !^[a-z0-9”]+ [NC]
    RewriteCond %{HTTP:Accept-Encoding} gzip
    RewriteCond %{HTTPS} !on
    RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{SERVER_NAME}/$1/index.html.gz -f
    RewriteRule ^(.*) “/wp-content/cache/supercache/%{SERVER_NAME}/$1/index.html.gz” [L]

    RewriteCond %{REQUEST_URI} !^.*[^/]$
    RewriteCond %{REQUEST_URI} !^.*//.*$
    RewriteCond %{REQUEST_METHOD} !POST
    RewriteCond %{QUERY_STRING} !.*=.*
    RewriteCond %{HTTP:Cookie} !^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$
    RewriteCond %{HTTP:X-Wap-Profile} !^[a-z0-9”]+ [NC]
    RewriteCond %{HTTP:Profile} !^[a-z0-9”]+ [NC]
    RewriteCond %{HTTPS} on
    RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{SERVER_NAME}/$1/index-https.html -f
    RewriteRule ^(.*) “/wp-content/cache/supercache/%{SERVER_NAME}/$1/index-https.html” [L]

    RewriteCond %{REQUEST_URI} !^.*[^/]$
    RewriteCond %{REQUEST_URI} !^.*//.*$
    RewriteCond %{REQUEST_METHOD} !POST
    RewriteCond %{QUERY_STRING} !.*=.*
    RewriteCond %{HTTP:Cookie} !^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$
    RewriteCond %{HTTP:X-Wap-Profile} !^[a-z0-9”]+ [NC]
    RewriteCond %{HTTP:Profile} !^[a-z0-9”]+ [NC]
    RewriteCond %{HTTPS} !on
    RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{SERVER_NAME}/$1/index.html -f
    RewriteRule ^(.*) “/wp-content/cache/supercache/%{SERVER_NAME}/$1/index.html” [L]

    # END WPSuperCache

    # utf-8
    AddDefaultCharset utf-8
    AddCharset utf-8 .atom .css .js .json .rss .vtt .xml
    # END utf-8

    # Eliminar www.

    Header set X-UA-Compatible “IE=edge,chrome=1?
    # Sólo queremos añadirlo para páginas HTML, el resto es un desperdicio de ancho de banda

    Header unset X-UA-Compatible

    SetOutputFilter DEFLATE

    SetOutputFilter DEFLATE

    ExpiresActive On
    ExpiresDefault A604800

    ExpiresDefault “access plus 7 day”

    # Compressed javascript files
    AddEncoding x-gzip .jgz
    AddType application/x-javascript .jgz
    AddType text/css .jgz

    SetOutputFilter DEFLATE
    AddEncoding x-compress .Z
    AddEncoding x-gzip .gz .tgz
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    AddOutputFilterByType DEFLATE text/php text/html text/txt text/xml text/css style/css

    Header append Vary Accept-Encoding

    Header set Expires “Thu, 15 Apr 2025 20:00:00 GMT”

    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.*

    AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript

    AddOutputFilterByType DEFLATE text/plain
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE application/xml
    AddOutputFilterByType DEFLATE application/xhtml+xml
    AddOutputFilterByType DEFLATE application/rss+xml
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE application/x-javascript
    ExpiresActive On
    ExpiresDefault “access plus 1 year”

    # BEGIN WordPress

    RewriteEngine On
    RewriteBase /
    RewriteRule ^index.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]

    # END WordPress

  10. Hola Kleber
    Ante todo felicitarte por el Post, muy completo.
    A la hora de incorporar las lineas de código en el .htacces me surgen dudas, al igual que leido a compañeros anteriores. Te estaría muy agradecido si me puedes indicar donde insertar el código que nos facilitas:

    Gracias de antemano Kleber!!

  11. Hola Kleber! he leído tu post al milimetro y luego para cerciorarme si funciona he comprobado tu web en PageSpeed y waoooooo! tienes 100/100 realmente impresionante! te haz ganado mi respeto, así que voy a seguir a partir de hoy todos tus consejos, empezando sobre la optimización web. Muy agradecido y manos a la obra. Saludos!

  12. Miguel

    Muy buenas, primero que nada me he dado una vuelta por todo la pagina y la vdd me ha ayudado mucho.

    El asunto es que yo trabajo bajo el framework de laravel 5 y estaba viendo sobre como especificar la cache y modifico el archivo .htaccess y no me funciona, bueno lo reviso con la pagina que proporciona google el pagespeed insights y siempre me aparece el Especificar caché de navegador

  13. Hola kleber, he añadido al archivo el código que has puesto y no ha dado error, pero al pasar el test de google me sigue diciendo el error de ·especificar caché de navegador” ¿no lo he hecho bien?

  14. Hola Jessica soy Christian compañero de trabajo de kleber en pasionseo.com, tendría que conocer mas particularidades de tu caso para ayudarte, pero si estas utilizando WP quizás deberías plantearte la utilización de un plugin para realizar esta función y poderla configurar al máximo, permíteme que te recomiende WP-Super-Cache lo podrás descargar desde la pagina oficial de wordpress te dejo el enlace, https://wordpress.org/plugins/wp-super-cache/ cualquier cos coméntanos, encantados de ayudarte.

    Feliz dia y buen SEO

  15. Hola a ver si me podéis decir algo, por que yo llevo muuucho tiempo detrás de esto y no consigo que GtMetrix me lo dé por valido, me sigue marcando a “0” en Add expires headers:

    Te dejo como está mi htaccess, espero que me podáis decir algo que me ayude,
    no se si es que a lo mejor tengo reglas duplicadas…
    Saludos!

    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_HOST} ^www.(.*)$ [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

    ExpiresActive On
    ExpiresByType image/jpg “access plus 1 year”
    ExpiresByType image/jpeg “access plus 1 year”
    ExpiresByType image/gif “access plus 1 year”
    ExpiresByType image/png “access plus 1 year”
    ExpiresByType text/css “access plus 1 month”
    ExpiresByType application/pdf “access plus 1 month”
    ExpiresByType application/javascript “access plus 1 year”
    ExpiresByType application/x-javascript “access plus 1 year”
    ExpiresByType text/javascript “access plus 1 year”
    ExpiresByType application/x-shockwave-flash “access plus 1 month”
    ExpiresByType image/x-icon “access plus 1 year”
    ExpiresDefault “access plus 30 days”

    # BEGIN W3TC Browser Cache

    AddType text/css .css
    AddType text/x-component .htc
    AddType application/x-javascript .js
    AddType application/javascript .js2
    AddType text/javascript .js3
    AddType text/x-js .js4
    AddType text/html .html .htm
    AddType text/richtext .rtf .rtx
    AddType image/svg+xml .svg .svgz
    AddType text/plain .txt
    AddType text/xsd .xsd
    AddType text/xsl .xsl
    AddType text/xml .xml
    AddType video/asf .asf .asx .wax .wmv .wmx
    AddType video/avi .avi
    AddType image/bmp .bmp
    AddType application/java .class
    AddType video/divx .divx
    AddType application/msword .doc .docx
    AddType application/vnd.ms-fontobject .eot
    AddType application/x-msdownload .exe
    AddType image/gif .gif
    AddType application/x-gzip .gz .gzip
    AddType image/x-icon .ico
    AddType image/jpeg .jpg .jpeg .jpe
    AddType application/json .json
    AddType application/vnd.ms-access .mdb
    AddType audio/midi .mid .midi
    AddType video/quicktime .mov .qt
    AddType audio/mpeg .mp3 .m4a
    AddType video/mp4 .mp4 .m4v
    AddType video/mpeg .mpeg .mpg .mpe
    AddType application/vnd.ms-project .mpp
    AddType application/x-font-otf .otf
    AddType application/vnd.ms-opentype .otf
    AddType application/vnd.oasis.opendocument.database .odb
    AddType application/vnd.oasis.opendocument.chart .odc
    AddType application/vnd.oasis.opendocument.formula .odf
    AddType application/vnd.oasis.opendocument.graphics .odg
    AddType application/vnd.oasis.opendocument.presentation .odp
    AddType application/vnd.oasis.opendocument.spreadsheet .ods
    AddType application/vnd.oasis.opendocument.text .odt
    AddType audio/ogg .ogg
    AddType application/pdf .pdf
    AddType image/png .png
    AddType application/vnd.ms-powerpoint .pot .pps .ppt .pptx
    AddType audio/x-realaudio .ra .ram
    AddType application/x-shockwave-flash .swf
    AddType application/x-tar .tar
    AddType image/tiff .tif .tiff
    AddType application/x-font-ttf .ttf .ttc
    AddType application/vnd.ms-opentype .ttf .ttc
    AddType audio/wav .wav
    AddType audio/wma .wma
    AddType application/vnd.ms-write .wri
    AddType application/font-woff .woff
    AddType application/vnd.ms-excel .xla .xls .xlsx .xlt .xlw
    AddType application/zip .zip

    ExpiresActive On
    ExpiresByType text/css A31536000
    ExpiresByType text/x-component A31536000
    ExpiresByType application/x-javascript A31536000
    ExpiresByType application/javascript A31536000
    ExpiresByType text/javascript A31536000
    ExpiresByType text/x-js A31536000
    ExpiresByType text/html A3600
    ExpiresByType text/richtext A3600
    ExpiresByType image/svg+xml A3600
    ExpiresByType text/plain A3600
    ExpiresByType text/xsd A3600
    ExpiresByType text/xsl A3600
    ExpiresByType text/xml A3600
    ExpiresByType video/asf A31536000
    ExpiresByType video/avi A31536000
    ExpiresByType image/bmp A31536000
    ExpiresByType application/java A31536000
    ExpiresByType video/divx A31536000
    ExpiresByType application/msword A31536000
    ExpiresByType application/vnd.ms-fontobject A31536000
    ExpiresByType application/x-msdownload A31536000
    ExpiresByType image/gif A31536000
    ExpiresByType application/x-gzip A31536000
    ExpiresByType image/x-icon A31536000
    ExpiresByType image/jpeg A31536000
    ExpiresByType application/json A31536000
    ExpiresByType application/vnd.ms-access A31536000
    ExpiresByType audio/midi A31536000
    ExpiresByType video/quicktime A31536000
    ExpiresByType audio/mpeg A31536000
    ExpiresByType video/mp4 A31536000
    ExpiresByType video/mpeg A31536000
    ExpiresByType application/vnd.ms-project A31536000
    ExpiresByType application/x-font-otf A31536000
    ExpiresByType application/vnd.ms-opentype A31536000
    ExpiresByType application/vnd.oasis.opendocument.database A31536000
    ExpiresByType application/vnd.oasis.opendocument.chart A31536000
    ExpiresByType application/vnd.oasis.opendocument.formula A31536000
    ExpiresByType application/vnd.oasis.opendocument.graphics A31536000
    ExpiresByType application/vnd.oasis.opendocument.presentation A31536000
    ExpiresByType application/vnd.oasis.opendocument.spreadsheet A31536000
    ExpiresByType application/vnd.oasis.opendocument.text A31536000
    ExpiresByType audio/ogg A31536000
    ExpiresByType application/pdf A31536000
    ExpiresByType image/png A31536000
    ExpiresByType application/vnd.ms-powerpoint A31536000
    ExpiresByType audio/x-realaudio A31536000
    ExpiresByType image/svg+xml A31536000
    ExpiresByType application/x-shockwave-flash A31536000
    ExpiresByType application/x-tar A31536000
    ExpiresByType image/tiff A31536000
    ExpiresByType application/x-font-ttf A31536000
    ExpiresByType application/vnd.ms-opentype A31536000
    ExpiresByType audio/wav A31536000
    ExpiresByType audio/wma A31536000
    ExpiresByType application/vnd.ms-write A31536000
    ExpiresByType application/font-woff A31536000
    ExpiresByType application/vnd.ms-excel A31536000
    ExpiresByType application/zip A31536000

    Header append Vary User-Agent env=!dont-vary

    AddOutputFilterByType DEFLATE text/css text/x-component application/x-javascript application/javascript text/javascript text/x-js text/html text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon application/json

    # DEFLATE by extension
    AddOutputFilter DEFLATE js css htm html xml

    FileETag MTime Size

    Header set Pragma “public”
    Header append Cache-Control “public”
    Header unset Set-Cookie
    Header set X-Powered-By “W3 Total Cache/0.9.4.1”

    FileETag MTime Size

    Header set Pragma “public”
    Header append Cache-Control “public”
    Header set X-Powered-By “W3 Total Cache/0.9.4.1”

    FileETag MTime Size

    Header set Pragma “public”
    Header append Cache-Control “public”
    Header unset Set-Cookie
    Header set X-Powered-By “W3 Total Cache/0.9.4.1″

    # END W3TC Browser Cache
    # BEGIN W3TC Page Cache core

    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTPS} =on
    RewriteRule .* – [E=W3TC_SSL:_ssl]
    RewriteCond %{SERVER_PORT} =443
    RewriteRule .* – [E=W3TC_SSL:_ssl]
    RewriteCond %{HTTP:Accept-Encoding} gzip
    RewriteRule .* – [E=W3TC_ENC:_gzip]
    RewriteCond %{HTTP_COOKIE} w3tc_preview [NC]
    RewriteRule .* – [E=W3TC_PREVIEW:_preview]
    RewriteCond %{REQUEST_METHOD} !=POST
    RewriteCond %{QUERY_STRING} =””
    RewriteCond %{REQUEST_URI} /$
    RewriteCond %{HTTP_COOKIE} !(comment_author|wp-postpass|w3tc_logged_out|wordpress_logged_in|wptouch_switch_toggle) [NC]
    RewriteCond “%{DOCUMENT_ROOT}/wp-content/cache/page_enhanced/%{HTTP_HOST}/%{REQUEST_URI}/_index%{ENV:W3TC_SSL}%{ENV:W3TC_PREVIEW}.html%{ENV:W3TC_ENC}” -f
    RewriteRule .* “/wp-content/cache/page_enhanced/%{HTTP_HOST}/%{REQUEST_URI}/_index%{ENV:W3TC_SSL}%{ENV:W3TC_PREVIEW}.html%{ENV:W3TC_ENC}” [L]

    # END W3TC Page Cache core
    # BEGIN WordPress

    RewriteEngine On
    RewriteBase /
    RewriteRule ^index.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]

    # END WordPress

    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.*

    # BEGIN BWP Minify Headers

    ForceType application/x-javascript

    ForceType text/css

    AddEncoding gzip .gz
    AddCharset utf-8 .js .css

    SetEnvIfNoCase Request_URI “.gz$” no-gzip

    Header set Cache-Control “public, max-age=86400”
    Header set Vary “Accept-Encoding”
    Header unset ETag

    # END BWP Minify Headers

    RewriteEngine On
    RewriteCond %{HTTP:Accept-Encoding} gzip
    RewriteRule .* – [E=ZIP_EXT:.gz]
    RewriteCond %{HTTP:Cache-Control} !no-cache
    RewriteCond %{HTTP:If-Modified-Since} !no-cache
    RewriteCond %{REQUEST_FILENAME}%{ENV:ZIP_EXT} -f
    RewriteRule (.*) $1%{ENV:ZIP_EXT} [L]
    RewriteRule ^minify-b(d+)-([a-zA-Z0-9-_.]+).(css|js)$ /index.php?blog=$1&min_group=$2&min_type=$3 [L]

    # END BWP Minify Rules

    • Para un análisis así deberías indicarme la web donde realizas el test y que errores reales tienes sobre la web, el site va lento? quieres tener una web mas veloz etc? dame mas datos y miramos si puedo ayudarte.

      Pero recuerda este post es del 2012 y los plugins de cache para wp ahora son mejores, cual estas utilizando?

  16. Miguel Salazar

    Muchas gracias Christian por compartir, estoy batallando una posición en en el top 10 de google y estoy poniendo esfuerzo en todo el sitio. slds.

  17. Santiago

    Hola buenas noches! Quiero que me ayuden con este tema! Es urgente! Yo descargué el htacces y copié el código De ustedes pero no me funciona! Hay que copiarlo antes del texto que se encuentra por defecto en htacces o hay que boorsr todo y copiar sólo el código? Quedó muy atento Gracias

      • Santiago

        No señor, he copiado el codigo, vuelvo a hacer el test en page speed y me sigue saliendo el error de especificar caché, mi pregunta es la siguiente: ¿hay que borrar el texto que tiene el .htacces y copiar el codigo?

        Gracias Christian

        • Hola santiago depende de que código tengas en el, recuerda que en este archivo se pueden realizar muchas otras configuraciones, deberías insertar el código para completar el actual, aunque si lo quieres realizar para debugar y realizar pruebas hazlo sin problemas. Inserta tu código y lo revisamos si hace falta. :9

  18. Ivánj

    Hola amigos les hago una consulta, ya que también estoy intentando mejorar la velocidad de mi sitio web, cree el archivo .htaccess en el cual coloque sólo el código que uds. proporcionaron pero igualmente en PageSpeed Insighs sigue apareciendo que tengo que especificar el cache. Alguien sabría decirme por donde puede venir el problema? Saludos!

    • Hola ivanj, no deberías tener problema, recordar lo que siempre comentamos y recomendamos sobre este tipo de configuraciones y la posible utilización de plugin su utilizáis wordpress. De todos modos no estaría de mas que contactaras con tu hosting para verificar que tengas activo el modulo de Apache que hace que este sistema funcione, mas concertadamente el modulo es: mod_expires y vienen por defecto en las instalaciones, si es un VPS y tuvieras que activarlo deberías ejecutar este comando en tu consola.
      # a2enmod expires
      Espero que te sirva o nos des mas información.

  19. Daniel Rodriguez

    Hola amigos: Antes que nada, felicitarles por el post, ya que es muy completo y competente.
    Deseo agregar el código HTML que proporcionan para especificar la caché del navegador, pero no me queda claro donde debo insertarlo.
    Les paso aquí la codificación actual que tengo en el .htaccess:

    # BEGIN WPSuperCache

    RewriteEngine On
    RewriteBase /
    #If you serve pages from behind a proxy you may want to change ‘RewriteCond %{HTTPS} on’ to something more sensible
    AddDefaultCharset UTF-8
    RewriteCond %{REQUEST_URI} !^.*[^/]$
    RewriteCond %{REQUEST_URI} !^.*//.*$
    RewriteCond %{REQUEST_METHOD} !POST
    RewriteCond %{QUERY_STRING} !.*=.*
    RewriteCond %{HTTP:Cookie} !^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$
    RewriteCond %{HTTP:X-Wap-Profile} !^[a-z0-9″]+ [NC]
    RewriteCond %{HTTP:Profile} !^[a-z0-9″]+ [NC]
    RewriteCond %{HTTP:Accept-Encoding} gzip
    RewriteCond %{HTTPS} on
    RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{SERVER_NAME}/$1/index-https.html.gz -f
    RewriteRule ^(.*) “/wp-content/cache/supercache/%{SERVER_NAME}/$1/index-https.html.gz” [L]

    RewriteCond %{REQUEST_URI} !^.*[^/]$
    RewriteCond %{REQUEST_URI} !^.*//.*$
    RewriteCond %{REQUEST_METHOD} !POST
    RewriteCond %{QUERY_STRING} !.*=.*
    RewriteCond %{HTTP:Cookie} !^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$
    RewriteCond %{HTTP:X-Wap-Profile} !^[a-z0-9″]+ [NC]
    RewriteCond %{HTTP:Profile} !^[a-z0-9″]+ [NC]
    RewriteCond %{HTTP:Accept-Encoding} gzip
    RewriteCond %{HTTPS} !on
    RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{SERVER_NAME}/$1/index.html.gz -f
    RewriteRule ^(.*) “/wp-content/cache/supercache/%{SERVER_NAME}/$1/index.html.gz” [L]

    RewriteCond %{REQUEST_URI} !^.*[^/]$
    RewriteCond %{REQUEST_URI} !^.*//.*$
    RewriteCond %{REQUEST_METHOD} !POST
    RewriteCond %{QUERY_STRING} !.*=.*
    RewriteCond %{HTTP:Cookie} !^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$
    RewriteCond %{HTTP:X-Wap-Profile} !^[a-z0-9″]+ [NC]
    RewriteCond %{HTTP:Profile} !^[a-z0-9″]+ [NC]
    RewriteCond %{HTTPS} on
    RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{SERVER_NAME}/$1/index-https.html -f
    RewriteRule ^(.*) “/wp-content/cache/supercache/%{SERVER_NAME}/$1/index-https.html” [L]

    RewriteCond %{REQUEST_URI} !^.*[^/]$
    RewriteCond %{REQUEST_URI} !^.*//.*$
    RewriteCond %{REQUEST_METHOD} !POST
    RewriteCond %{QUERY_STRING} !.*=.*
    RewriteCond %{HTTP:Cookie} !^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$
    RewriteCond %{HTTP:X-Wap-Profile} !^[a-z0-9″]+ [NC]
    RewriteCond %{HTTP:Profile} !^[a-z0-9″]+ [NC]
    RewriteCond %{HTTPS} !on
    RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{SERVER_NAME}/$1/index.html -f
    RewriteRule ^(.*) “/wp-content/cache/supercache/%{SERVER_NAME}/$1/index.html” [L]

    # END WPSuperCache
    # BEGIN WordPress

    RewriteEngine On
    RewriteBase /
    RewriteRule ^index.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]

    # END WordPress

    Desde ya les agradezco la ayuda que me puedan proporcionar. Saludos!

    Daniel Rodriguez

    • Hola Daniel, tu caso es distinto porque tu estas utilizando un plugin wpsuperchache el cual automatiza toda su integración, probaste si tienes activa la cache, realiza las pruebas de velocidad desde https://tools.pingdom.com y OJO recuerda que la primera vez que haces el test aun no esta cacheado, el dato de mejora es la segunda vez que haces el test, donde la cache ya esta activa. 🙂

  20. Gonzalo

    Hola!
    Gracias a este blog pude mejorar mucho una web, pero me encuentro con que el cache deja fuera algunas imagenes que corresponden al theme de WordPress que se utiliza en el sitio y obviamente queda en rojo.
    Mi rank es de 75 y me gustaria mejorarlo.

    Gracais de antemano

    • Hola Gonzalo, me encanta escuchas eso, estamos aquí para ayudaros 🙂 ciertamente hay algunos themes que no están muy optimizados, y son algo lentos, en casos así deberías intentar juntar funciones y scripts en un solo archivo y si algunas imágenes se quedan fuera del theme no descartes optimizarlas manualmente, de todas formas envíame un email con tu web a ayuda@pasionseo.com e intentare darle un vistazo con un mayor detenimiento.

      Un slaudo y buen SEO

    • No te preocupes, sino tienes .htaccess, puedes crearlo facilmente:
      Para crear un fichero .htaccess, solomente deberemos abrir el “notepad” e introducir el código de cualquier htaccess que queramos.

      Guardamos el fichero como un fichero de texto, por ej “htaccess.txt”, y lo subimos por FTP a nuestra sistema de ficheros de dominio. Una vez en el servidor, modificamos el nombre del fichero “htaccess.txt” por el de “.htaccess”.

      Espero que te sirva.

  21. Trebol

    Hola Christian
    He copiado el codigo que me señalan especial para mi plantilla Newspaper 7 en .htaccess http://forum.tagdiv.com/how-to-make-the-site-faster/

    El problema es que en pagespeed todavía persiste el problema Establecer una fecha de caducidad o una edad máxima en las cabeceras HTTP de los recursos estáticos indica al navegador que cargue los recursos descargados previamente del disco local en lugar de hacerlo a través de la red.

    Ninguno de los elementos que previamente estaban han desaparecido, debe pasar algun periodo de tiempo? esta mal hecho en algun paso?

    Como puedes ver
    https://developers.google.com/speed/pagespeed/insights/?url=https%3A%2F%2Fwww.trebol-apuestas.com%2F&tab=mobile

    Debería como mínimo haber especificado ya el cache de las imagenes estables, osea de todas las imagenes que aparecen que tienen cache 4 horas como por ejemplo:
    /wp-content/plugins/js_composer/assets/lib/bower/font-awesome/css/font-awesome.min.css?ver=4.11.2

    Puedes ayudarme?! un saludo y buen SEO

  22. Santiago

    Especifique el cache pero me siguen saliendo estos dos puntos. como puedo solucionarlos ?

    Especificar caché de navegador
    Establecer una fecha de caducidad o una edad máxima en las cabeceras HTTP de los recursos estáticos indica al navegador que cargue los recursos descargados previamente del disco local en lugar de hacerlo a través de la red.
    Aprovechar el almacenamiento en caché del navegador de estos recursos almacenables en caché:
    http://maps.google.com/maps/api/js?sensor=false (30 minutos)
    https://www.google-analytics.com/analytics.js (2 horas)

    Saludos!

    • Hola Santiago, nos faltarian más datos quizas tu hosting no tenga instalado el mod_expires, lo desconozco si nos facilitas tus datos por correo electronico podriamos ver más a fondon y realizarte alguna recomendacion.

  23. Jon

    Llevaba tiempo buscando como subir la velocidad de carga de mi pagina web. Gracias por este articulo, muy sencillo de entender y fácil de aplicar.

  24. Pedro Acosta

    Ese htacces esta sospechoso..

    El por qué tiene acceso plus?
    Además al optimizar obviamente te lleva ver el login.
    100/100 en algunos casos este 91 sobre 98 en promedio

    Bueno, genero mi duda.

  25. Natty | Colegialas Neiva

    He hecho todo lo posible para cambiar los tiempos de carga ni este que me recomienda ni el de googleessimple me han servido.
    La verdad ya NO se que hacer.

  26. Jane

    Hola me sirvió mucho el código para especificar el cache gracias, el problema es que ahora no puedo desactivar el ExpiresActive, que tendría que hacer para eliminar todas las especificaciones de cache ya guardadas, que debo modificar en el archivo .htaccess para desactivar el almacenamiento cache?

    • Hola Jane el ExpiresActive, forma parte del modulo de cache, quizas entendi mal tu pregunta pero si te refieres a que tienes un plugin de cache y ya tienes el codigo introducido, puedes desactivarlo desde plugins facilmente.

  27. Hola, muchas gracias por el posteo. Seguí las instrucciones. Ingresé al FTP y reemplacé el archivo htaccess, incluyendo únicamente el código que ustedes detallan arriba. Sin embargo, Pagespeed Insights me sigue indicando “Especificar caché de navegador” para muchos archivos PNG. Me podrían indicar a qué se debe esto por favor. Gracias! Saludos

    • Hola Nicolas depende de muchos mas factores porque cada web es distinta, lo que debes fijarte es en el cambio de puntuacion del google insights, deberia existir un cambio entre el primer analisis sin el codigo y el segundo analisis con el codigo. Piensa que si es un WordPress en ocasiones entre en conflicto con algun otro codigo o plugin, revisa tus plugin si los tienes y realiza las comprobaciones comentadas, esperamos tu comentario.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *