Programación Optimizada Ferran Bonàs 01/10/2009 - Valencia
Generación URLs (I) URLs dinámicas (mismo script, varios contenidos) VS estáticas dominio.com/index.php?id_pag=8&content… dominio.com/cursos/categoria/cursos_java_18j.htm dominio.com/cursos_java_18jc Comprueba que las URLs de tus páginas contienen las Keywords más relevantes al comienzo    Uso de URL semánticas dominio.com/1856_2432_c_1285_prov_9 (Prominencia de la KW en la url    KW mas principales a la izquierda)
Generación  URLs (II) Generación de páginas estáticas: Mod_rewrite/.htaccess Capturar error 404 Archivos vs Carpetas vs Subdominios Virtual Host Alias Cómo optimizar: Módulo generador URL (rewrite) Optimización URL (caracteres, espacios, mayúsculas,…) Evitar contenido duplicado (sin riesgo de baneo) 1 contenido    1 URL Check URL  Meta canonical
Estrategia linking interno (I) Generación Links Uso de Anchor Text Nofollow ¿ya no sirve? Contextualizar vínculos Mediante diccionarios Descripciones adicionales Vínculos en images. Asignar “contenido textual” a la imagen Title Alt image Estructura interna hypertexto No jerárquica, no secuencial: estructura de malla URLs mas importantes en menos niveles de profundidad de la home Paginados    convertirlos en estáticos, no más de 10 Path navegación    caminos de vuelta (usuario y bot) Footer    linking interno o intrasite
Estrategia linking interno (II) Lo más buscado Conceptos más buscados en tu site En forma de nube de tags Guardar histórico: Concepto, fecha (útil para tendencias) y número de resultados (útil para contenido) ¿Cómo y dónde?  Como: Petición URL oculta, guardar inline Donde: Mysql, Memcache Herramientas de crawling Proporcionan broken-links # páginas de nuestro site Ejemplos: Xenu's Link Sleuth (http://home.snafu.de/tilman/xenulink.html)
Metas Generación meta-tags Title: prominencia (cuanto antes mejor), elemento mayor peso. Anchor text hacia tu site en las páginas de resultados de buscadores  Ej. 1: Emagister-Formaacion-Cursos de Java Ej. 2: Curso de Java - Cursos – Emagister Description: usar resumen del contenido o snippet Content-Language: es-ES VS es-AR (para los non-US English) Ej. Buscar solo paginas en español (buscadores) Content-Type: text/html (y charset=utf8) Keywords: set keywords estáticas + keywords dinámicas Robots (más adelante) Rating: Determinar el tipo de público (ej. Adult) Cómo optimizar: módulo generador metas + información en BBDD Frameworks: ej. Wordpress SEO plugin http://www.webmarketingnow.com/tips/meta-tags-uncovered.html
Contenido y Estilos Optimiza el contenido de tus páginas. Uso de keywords en el texto Keyword density Prominencia contenido Estilos: úsalos para promocionar el contenido Usar títulos: H1 (Categoría/+-Title), H2, H3,…  Negrita: Resaltar keywords (mediante un diccionario)
Optimización de código HTML Div en vez de tablas (tiempo renderización y fallos) Minimizar espacios en blanco Quitar comentarios Tamaño imágenes (uso de thumbnails) Usar ajax para multi-opción (evitar listados en HTML). Ej. provincias  CSS/JS Evitar código inline Ideal en el bloque HEAD (puede ir al final según tamaño) JavaScript: Ojo con errores! Pueden hacer que la página no se cargue en Firefox (aunque en IE sí). No afecta posicionamiento, si en #visitas. Unificar todo el CSS en 1 (ídem JS) Compresión de CSS/JS Cómo activar recarga desde los navegadores: parámetro adicional al CSS/JS (estilos.css?19) CSS Sprites
Instrucciones de Indexamiento (I) Robots.txt URLs dinámicas (*.php, *?) Zona de usuarios, paneles internos, zonas privadas Páginas de formulario, Reglas de uso, privacidad ¿¿Imágenes?? Cambios de estructura del site Metatag robots Index, noindex Follow, nofollow None, all Archive (cache)
Instrucciones de Indexamiento (II) Sitemap.xml y/o mapa html Webmaster Tools de Google: subir sitemap, reincorporación urls Obstáculos para que te indexen los bots Applets Java Contenido textual en las imágenes Formularios URL con parámetros de sesión (user_id, id_user,…) Llamadas javascript: onclick, history(-1) Bucles Callejón sin salida http://www.google.com/support/webmasters/bin/answer.py?hl=en&answer=156184
Aspectos de sistemas (configuración) Ubicación de los servidores: Concordancia IP con publico objetivo  Tiempo de respuesta bajo (frecuencia y velocidad de rastreo de los bots) Servidores de contenido distribuidos Dominios territoriales VS dominios genéricos Herramientas: Firebug, Yslow Comandos: wget, curl
Aspectos de sistemas (rendimiento) Compresión Eliminar White Spaces (saltos de línea, espacios extras) Php: Stripwhitespace Java: Trimflt.jar  mod_deflate, mod_gzip en contenido texto (html,xml,css,js)  Disponibilidad y tiempo de respuesta Uso de caches (disco y/o memoria) Memcache Php APC Análisis rendimiento de los sistemas Herramientas: Pingdom, mon.itor.us, iplabel
Metodo de desarrollo (I) Trabajo en equipo    Uso de repositorios (CVS, SVN, P4) Técnico/s especialista/s SEO en el equipo Cada programador tiene su entorno ¿Cómo pasamos a producción? Preproducción: replica lo más parecida a producción Etiquetar el código Rollback rápido Timeline con histórico: bajada de tráfico, reducción de páginas indexadas. Detección errores Cada error se inserta en una base de datos Base de datos accesible para todos los desarrolladores
Metodo de desarrollo (II) Internacionalización Código único Menor número de excepciones posibles Todos los programadores conocen todo Uso de herramientas de traducción Se trabaja con labels en el código Plantilla de traducción para cada idioma Librería gettext (GNU internationalization and localization) POEdit    Editor de traducciones  Fácilmente externalizable
¡Gracias! [email_address]
Ejemplo Mod_rewrite ErrorDocument 404 /error404.htm RewriteEngine on RewriteRule ^discotecas/(.*)-pr-(.*)_(.*).htm /discos_prov.php?id_provincia=$2&page=$3 RewriteRule ^discotecas/(.*)-pr-(.*).htm /discos_prov.php?id_provincia=$2 RewriteRule ^discotecas/novedades-(.*).htm /index.php?page=$1 RewriteRule ^discotecas/(.*)/(.*)/(.*)-dt-(.*).htm /disco.php?id_disco=$4 RewriteRule ^discotecas/(.*)/(.*)-po-(.*)_(.*).htm /discos_pob.php?id_poblacion=$3&page=$4 RewriteRule ^discotecas/(.*)/(.*)-po-(.*).htm /discos_pob.php?id_poblacion=$3
Ejemplo Mod_deflate SetOutputFilter DEFLATE BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary SetEnvIfNoCase Request_URI \.(?:pdf|wav|swf|doc|xls|rtf|ppt)$ no-gzip dont-vary SetEnvIfNoCase Request_URI ^/centre/index_modules.cfm.* no-gzip dont-vary SetEnvIfNoCase Request_URI ^/centre/index_modules_sc.cfm.* no-gzip dont-vary SetEnvIfNoCase Request_URI ^/centre/adjuntos/getfile.cfm.* no-gzip dont-vary SetEnvIfNoCase Request_URI ^/cursos_gratis/visor_cursos/dspFile.cfm.* no-gzip dont-vary SetEnvIfNoCase Request_URI ^/centre/commons/gui/tiny_mce/.* no-gzip dont-vary
Ejemplo VirtualHost e Alias <VirtualHost *:80> ServerAdmin noc@emagister.com DocumentRoot /var/html/www.emagister.com DirectoryIndex index.cfm ServerName www.emagister.com ServerAlias subvencionados.emagister.com master.emagister.com cursosgratis.emagister.com Alias /master /var/html/www.emagister.com Alias /universidades /var/html/www.emagister.com Alias /cursos-gratis /var/html/www.emagister.com Alias /oposiciones-convocatorias /var/html/www.emagister.com </VirtualHost *:80>

Programación Optimizada - Search Congress Valencia 2009

  • 1.
    Programación Optimizada FerranBonàs 01/10/2009 - Valencia
  • 2.
    Generación URLs (I)URLs dinámicas (mismo script, varios contenidos) VS estáticas dominio.com/index.php?id_pag=8&content… dominio.com/cursos/categoria/cursos_java_18j.htm dominio.com/cursos_java_18jc Comprueba que las URLs de tus páginas contienen las Keywords más relevantes al comienzo  Uso de URL semánticas dominio.com/1856_2432_c_1285_prov_9 (Prominencia de la KW en la url  KW mas principales a la izquierda)
  • 3.
    Generación URLs(II) Generación de páginas estáticas: Mod_rewrite/.htaccess Capturar error 404 Archivos vs Carpetas vs Subdominios Virtual Host Alias Cómo optimizar: Módulo generador URL (rewrite) Optimización URL (caracteres, espacios, mayúsculas,…) Evitar contenido duplicado (sin riesgo de baneo) 1 contenido  1 URL Check URL Meta canonical
  • 4.
    Estrategia linking interno(I) Generación Links Uso de Anchor Text Nofollow ¿ya no sirve? Contextualizar vínculos Mediante diccionarios Descripciones adicionales Vínculos en images. Asignar “contenido textual” a la imagen Title Alt image Estructura interna hypertexto No jerárquica, no secuencial: estructura de malla URLs mas importantes en menos niveles de profundidad de la home Paginados  convertirlos en estáticos, no más de 10 Path navegación  caminos de vuelta (usuario y bot) Footer  linking interno o intrasite
  • 5.
    Estrategia linking interno(II) Lo más buscado Conceptos más buscados en tu site En forma de nube de tags Guardar histórico: Concepto, fecha (útil para tendencias) y número de resultados (útil para contenido) ¿Cómo y dónde? Como: Petición URL oculta, guardar inline Donde: Mysql, Memcache Herramientas de crawling Proporcionan broken-links # páginas de nuestro site Ejemplos: Xenu's Link Sleuth (http://home.snafu.de/tilman/xenulink.html)
  • 6.
    Metas Generación meta-tagsTitle: prominencia (cuanto antes mejor), elemento mayor peso. Anchor text hacia tu site en las páginas de resultados de buscadores Ej. 1: Emagister-Formaacion-Cursos de Java Ej. 2: Curso de Java - Cursos – Emagister Description: usar resumen del contenido o snippet Content-Language: es-ES VS es-AR (para los non-US English) Ej. Buscar solo paginas en español (buscadores) Content-Type: text/html (y charset=utf8) Keywords: set keywords estáticas + keywords dinámicas Robots (más adelante) Rating: Determinar el tipo de público (ej. Adult) Cómo optimizar: módulo generador metas + información en BBDD Frameworks: ej. Wordpress SEO plugin http://www.webmarketingnow.com/tips/meta-tags-uncovered.html
  • 7.
    Contenido y EstilosOptimiza el contenido de tus páginas. Uso de keywords en el texto Keyword density Prominencia contenido Estilos: úsalos para promocionar el contenido Usar títulos: H1 (Categoría/+-Title), H2, H3,… Negrita: Resaltar keywords (mediante un diccionario)
  • 8.
    Optimización de códigoHTML Div en vez de tablas (tiempo renderización y fallos) Minimizar espacios en blanco Quitar comentarios Tamaño imágenes (uso de thumbnails) Usar ajax para multi-opción (evitar listados en HTML). Ej. provincias CSS/JS Evitar código inline Ideal en el bloque HEAD (puede ir al final según tamaño) JavaScript: Ojo con errores! Pueden hacer que la página no se cargue en Firefox (aunque en IE sí). No afecta posicionamiento, si en #visitas. Unificar todo el CSS en 1 (ídem JS) Compresión de CSS/JS Cómo activar recarga desde los navegadores: parámetro adicional al CSS/JS (estilos.css?19) CSS Sprites
  • 9.
    Instrucciones de Indexamiento(I) Robots.txt URLs dinámicas (*.php, *?) Zona de usuarios, paneles internos, zonas privadas Páginas de formulario, Reglas de uso, privacidad ¿¿Imágenes?? Cambios de estructura del site Metatag robots Index, noindex Follow, nofollow None, all Archive (cache)
  • 10.
    Instrucciones de Indexamiento(II) Sitemap.xml y/o mapa html Webmaster Tools de Google: subir sitemap, reincorporación urls Obstáculos para que te indexen los bots Applets Java Contenido textual en las imágenes Formularios URL con parámetros de sesión (user_id, id_user,…) Llamadas javascript: onclick, history(-1) Bucles Callejón sin salida http://www.google.com/support/webmasters/bin/answer.py?hl=en&answer=156184
  • 11.
    Aspectos de sistemas(configuración) Ubicación de los servidores: Concordancia IP con publico objetivo Tiempo de respuesta bajo (frecuencia y velocidad de rastreo de los bots) Servidores de contenido distribuidos Dominios territoriales VS dominios genéricos Herramientas: Firebug, Yslow Comandos: wget, curl
  • 12.
    Aspectos de sistemas(rendimiento) Compresión Eliminar White Spaces (saltos de línea, espacios extras) Php: Stripwhitespace Java: Trimflt.jar mod_deflate, mod_gzip en contenido texto (html,xml,css,js) Disponibilidad y tiempo de respuesta Uso de caches (disco y/o memoria) Memcache Php APC Análisis rendimiento de los sistemas Herramientas: Pingdom, mon.itor.us, iplabel
  • 13.
    Metodo de desarrollo(I) Trabajo en equipo  Uso de repositorios (CVS, SVN, P4) Técnico/s especialista/s SEO en el equipo Cada programador tiene su entorno ¿Cómo pasamos a producción? Preproducción: replica lo más parecida a producción Etiquetar el código Rollback rápido Timeline con histórico: bajada de tráfico, reducción de páginas indexadas. Detección errores Cada error se inserta en una base de datos Base de datos accesible para todos los desarrolladores
  • 14.
    Metodo de desarrollo(II) Internacionalización Código único Menor número de excepciones posibles Todos los programadores conocen todo Uso de herramientas de traducción Se trabaja con labels en el código Plantilla de traducción para cada idioma Librería gettext (GNU internationalization and localization) POEdit  Editor de traducciones Fácilmente externalizable
  • 15.
  • 16.
    Ejemplo Mod_rewrite ErrorDocument404 /error404.htm RewriteEngine on RewriteRule ^discotecas/(.*)-pr-(.*)_(.*).htm /discos_prov.php?id_provincia=$2&page=$3 RewriteRule ^discotecas/(.*)-pr-(.*).htm /discos_prov.php?id_provincia=$2 RewriteRule ^discotecas/novedades-(.*).htm /index.php?page=$1 RewriteRule ^discotecas/(.*)/(.*)/(.*)-dt-(.*).htm /disco.php?id_disco=$4 RewriteRule ^discotecas/(.*)/(.*)-po-(.*)_(.*).htm /discos_pob.php?id_poblacion=$3&page=$4 RewriteRule ^discotecas/(.*)/(.*)-po-(.*).htm /discos_pob.php?id_poblacion=$3
  • 17.
    Ejemplo Mod_deflate SetOutputFilterDEFLATE BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary SetEnvIfNoCase Request_URI \.(?:pdf|wav|swf|doc|xls|rtf|ppt)$ no-gzip dont-vary SetEnvIfNoCase Request_URI ^/centre/index_modules.cfm.* no-gzip dont-vary SetEnvIfNoCase Request_URI ^/centre/index_modules_sc.cfm.* no-gzip dont-vary SetEnvIfNoCase Request_URI ^/centre/adjuntos/getfile.cfm.* no-gzip dont-vary SetEnvIfNoCase Request_URI ^/cursos_gratis/visor_cursos/dspFile.cfm.* no-gzip dont-vary SetEnvIfNoCase Request_URI ^/centre/commons/gui/tiny_mce/.* no-gzip dont-vary
  • 18.
    Ejemplo VirtualHost eAlias <VirtualHost *:80> ServerAdmin noc@emagister.com DocumentRoot /var/html/www.emagister.com DirectoryIndex index.cfm ServerName www.emagister.com ServerAlias subvencionados.emagister.com master.emagister.com cursosgratis.emagister.com Alias /master /var/html/www.emagister.com Alias /universidades /var/html/www.emagister.com Alias /cursos-gratis /var/html/www.emagister.com Alias /oposiciones-convocatorias /var/html/www.emagister.com </VirtualHost *:80>

Notas del editor