<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hello Google, su primera posición en Internet &#187; Desarrollo web</title>
	<atom:link href="http://www.hellogoogle.com/category/desarrollo-web/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hellogoogle.com</link>
	<description>Artículos para Crecer con su Empresa en Internet</description>
	<lastBuildDate>Sat, 27 Feb 2010 12:41:31 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>AJAX Accesible para Google: Posicionar contenido en Ajax</title>
		<link>http://www.hellogoogle.com/ajax-accesible-para-google/</link>
		<comments>http://www.hellogoogle.com/ajax-accesible-para-google/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 09:33:11 +0000</pubDate>
		<dc:creator>Ignacio Gorostiza</dc:creator>
				<category><![CDATA[Accesibilidad]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[google ajax acceibilidad javascript]]></category>

		<guid isPermaLink="false">http://www.hellogoogle.com/?p=326</guid>
		<description><![CDATA[Recientemente me preguntaron si Google indexaba contenidos en Ajax. La respuesta es: depende. 
Como ya sabrá Ajax es una técnica que abre la posibilidad de realizar una petición XMLHTTP al servidor y recibir un documento html/xml de respuesta de manera asíncrona, es decir, sin necesidad de recargar la página. Ajax en principio no tiene ninguna [...]


Artículos relacionados:<ol><li><a href='http://www.hellogoogle.com/ajax-zoomy-lightbox/' rel='bookmark' title='Permanent Link: Ajax zoomy: Un Ajax lightbox para su galería de imágenes'>Ajax zoomy: Un Ajax lightbox para su galería de imágenes</a></li><li><a href='http://www.hellogoogle.com/efecto_ajax_lightbox_javascript_css/' rel='bookmark' title='Permanent Link: Ajax Lightbox: Una ventana emergente 2.0 en su página web'>Ajax Lightbox: Una ventana emergente 2.0 en su página web</a></li><li><a href='http://www.hellogoogle.com/real-ajax-sexy-curls/' rel='bookmark' title='Permanent Link: Real Ajax Sexy Curls: Una forma elegante de mostrar el código fuente de nuestra página'>Real Ajax Sexy Curls: Una forma elegante de mostrar el código fuente de nuestra página</a></li></ol>]]></description>
			<content:encoded><![CDATA[<div><img src="/wp-content/uploads/2009/06/accesible_ajax.jpg" title="AJAX Accesible para Google: Posicionar contenido en Ajax" alt="accesible ajax AJAX Accesible para Google: Posicionar contenido en Ajax" /></div>
<p>Recientemente me preguntaron si Google indexaba contenidos en Ajax. La respuesta es: depende. </p>
<p>Como ya sabrá <em>Ajax</em> es una técnica que abre la posibilidad de realizar una petición <em>XMLHTTP</em> al servidor y recibir un documento <em>html/xml</em> de respuesta de manera <em>asíncrona</em>, es decir, sin necesidad de recargar la página. Ajax en principio no tiene ninguna contraindicación de cara al posicionamiento en Google, en realidad el problema no se encuentra en el Ajax, si no en la accesibilidad de los documentos que queramos que sean indexados.</p>
<p>En el  <a href="http://www.yensdesign.com/tutorials/contentajax/">siguiente ejemplo</a> los contenidos se cargan de manera asíncrona, pero Google no sería capaz de indexarlos. ¿Por qué? El problema radica en los enlaces, o mejor dicho, en la ausencia de enlaces. Fíjese en el código del menú principal:</p>
<code>&lt;li id=&quot;home&quot;&gt;Home&lt;/li&gt;<br />
&lt;li id=&quot;news&quot;&gt;News&lt;/li&gt;<br />
&lt;li id=&quot;interviews&quot;&gt;Interviews&lt;/li&gt;<br />
&lt;li id=&quot;external&quot;&gt;External&lt;/li&gt;  
<br/><br/>
</code>
<p>La utilización de Ajax no debe entrar en conflicto con la correcta navegación por los diferentes contenidos relevantes de un Site. En el ejemplo anterior, el acceso a los contenidos se implementa en javascript y esto impide que el <a href="http://es.wikipedia.org/wiki/Googlebot" target="_blank">bot de Google</a> pueda acceder e indexar estos contenidos. El siguiente código muestra la funcionalidad que controla el acceso a los contenidos:</p>
<code>sections.click(function(){

 		<br />
//show the loading bar<br />  		
 		showLoading();  	<br />	//load selected section<br />  		switch(this.id){ <br /> 			case &quot;home&quot;:<br />  				content.slideUp();  <br />				content.load(&quot;sections.html #section_home&quot;, hideLoading);<br />  				content.slideDown();<br />  				break;<br />		...  <br/>	
</code>
<p>Nota: El código del ejemplo está implementado con el <em>framework Jquery</em>. ¿No lo conoce?...¿Y a<a href="http://jquery.com/" target="_blank"> qué está esperando</a>?</p>
<p>Si aplica un simulador de Bot a la url del ejemplo podría hacerse una idea aproximada de <a href="http://www.xml-sitemaps.com/se-bot-simulator.html?op=se-bot-simulator&amp;go=1&amp;pageurl=http%3A//www.yensdesign.com/tutorials/contentajax/&amp;se=googlebot&amp;submit=Start">cómo visualiza Google esta página.</a> Como puede comprobar los contenidos dinámicos no son accesibles. </p>
<h3>¿Cómo podemos conseguir que  Ajax sea accesible por Google ?</h3>
<p>Podemos considerar que Google visualiza una página de manera similar a como lo haría un navegador con javascript deshabilitado. Por tanto si queremos dar visibilidad al buscador, cada contenido debe ser accesible  a través de un link html natural.  Le he preparado un pequeño   <a href="http://www.hellogoogle.com/examples/contentajax/">ejemplo  funcional de Ajax accesible</a>. Fíjese el aspecto que presenta ahora el código del menú principal:</p>
<p><code>&lt;li&gt;&lt;a href=&quot;mike-tyson/default.htm&quot;&gt;MIKE&lt;/a&gt;&lt;/li&gt;<br />
&lt;li&gt;&lt;a href=&quot;house/default.htm&quot;&gt;HOUSE&lt;/a&gt;&lt;/li&gt;<br />
&lt;li&gt;&lt;a href=&quot;bob-marley/default.htm&quot;&gt;BOB&lt;/a&gt;&lt;/li&gt;<br />
&lt;li&gt;&lt;a href=&quot;spiderman/default.htm&quot;&gt;SPIDER&lt;/a&gt;&lt;/li&gt;</code></p>
<p>A continuación podemos modificar el comportamiento de un link utilizando <em>javascript no obstructivo</em>. Esta técnica permite acceder al <em>DOM</em> de la página y asignar una funcionalidad determinada, como puede ser el acceso asíncrono a contenidos, a cualquier enlace del documento. De esta manera presentaríamos un documento html con enlaces naturales a Google, y una página <a href="http://es.wikipedia.org/wiki/Aplicaciones_de_Internet_Ricas" target="_blank">RIA</a> a nuestros visitantes:</p>
<p><code>sections.click(function(e){<br />
  var my_anchor = $(this).attr(&quot;href&quot;);<br />
showLoading();<br />
content.slideUp(&quot;slow&quot;, function(){	content.load(my_anchor, hideLoading);	} );<br />
content.slideDown();<br />
return(false);<br />
});</code></p>
<p>Si aplicamos el simulador de Bot a este ejemplo, podemos comprobar que ahora <a href="http://www.xml-sitemaps.com/se-bot-simulator.html?op=se-bot-simulator&amp;go=1&amp;pageurl=http%3A//www.hellogoogle.com/examples/contentajax/&amp;se=googlebot&amp;submit=Start">Google accedería sin problema a todos los contenidos</a>.</p>
<p>Le animo a  <a href="http://www.hellogoogle.com/examples/contentajax/accesiblecontentajax.rar" target="_blank">descargarse el código de ejemplo</a>, destriparlo, analizarlo, mejorarlo y aplicarlo libremente en sus desarrollos. Estoy seguro que Google se lo agradecerá.</p>
<p>Por último tenga presente siempre las siguientes consideraciones a la hora de desarrollar una funcionalidad Ajax:</p>
<ul>
  <li>Cuide la arquitectura interna de su Site y cree una estructura de enlaces lógica. </li>
  <li>Cada contenido de su site debe ser accesible por un enlace de texto estático.</li>
  <li>Si el acceso a los contenidos se realiza a través de <em>JavaScript</em>, frames, DHTML, Flash, o su acceso está restringido por id de sesión o Cookies, es muy posible que Google encuentre problemas para encontrarlos e indexarlos.</li>
  <li>El javascript <a href="http://es.wikipedia.org/wiki/JavaScript_no_obstructivo" target="_blank">no obstructivo</a> le permite crear funcionalidades RIA sin repercutir en la accesibilidad de la web.</li>
  <li>Puede recurrir a <a href="http://www.delorie.com/web/lynxview.html" target="_blank">navegadores textuales</a> para comprobar como visualizará Google su página.</li>
</ul> Powered by HelloGoogle.com

<p>Artículos relacionados:<ol><li><a href='http://www.hellogoogle.com/ajax-zoomy-lightbox/' rel='bookmark' title='Permanent Link: Ajax zoomy: Un Ajax lightbox para su galería de imágenes'>Ajax zoomy: Un Ajax lightbox para su galería de imágenes</a></li><li><a href='http://www.hellogoogle.com/efecto_ajax_lightbox_javascript_css/' rel='bookmark' title='Permanent Link: Ajax Lightbox: Una ventana emergente 2.0 en su página web'>Ajax Lightbox: Una ventana emergente 2.0 en su página web</a></li><li><a href='http://www.hellogoogle.com/real-ajax-sexy-curls/' rel='bookmark' title='Permanent Link: Real Ajax Sexy Curls: Una forma elegante de mostrar el código fuente de nuestra página'>Real Ajax Sexy Curls: Una forma elegante de mostrar el código fuente de nuestra página</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.hellogoogle.com/ajax-accesible-para-google/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Tutorial Cache Web: cómo gestionar el cacheo de nuestros contenidos</title>
		<link>http://www.hellogoogle.com/tutorial-cache-web/</link>
		<comments>http://www.hellogoogle.com/tutorial-cache-web/#comments</comments>
		<pubDate>Mon, 25 May 2009 19:30:23 +0000</pubDate>
		<dc:creator>Ignacio Gorostiza</dc:creator>
				<category><![CDATA[Desarrollo web]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[cahce servidor proxy web meta]]></category>

		<guid isPermaLink="false">http://www.hellogoogle.com/?p=254</guid>
		<description><![CDATA[
El concepto de cache (sin acento, a no confundir con la palabra caché que significa distinción o elegancia) es ampliamente utilizado en todos los campos de la informática. De manera general podríamos definirlo como el proceso en el que un conjunto de datos son duplicados con el fin de reducir el tiempo de acceso a [...]


Artículos relacionados:<ol><li><a href='http://www.hellogoogle.com/tutorial_google_analytics_3/' rel='bookmark' title='Permanent Link: Tutorial sobre Google Analytics: 3. Etiquetado o Tagging en campañas de Marketing'>Tutorial sobre Google Analytics: 3. Etiquetado o Tagging en campañas de Marketing</a></li><li><a href='http://www.hellogoogle.com/tutorial_google_analytics_4/' rel='bookmark' title='Permanent Link: Tutorial sobre Google Analytics: 4. Objetivos, Conversiones, Ruta de redireccionamiento y Funnels'>Tutorial sobre Google Analytics: 4. Objetivos, Conversiones, Ruta de redireccionamiento y Funnels</a></li><li><a href='http://www.hellogoogle.com/tutorial_google_analytics_2/' rel='bookmark' title='Permanent Link: Tutorial sobre Google Analytics: 2. La interfaz de Google Analytics'>Tutorial sobre Google Analytics: 2. La interfaz de Google Analytics</a></li></ol>]]></description>
			<content:encoded><![CDATA[<div><img src="http://www.hellogoogle.com/wp-content/uploads/2009/05/cache_image.jpg" title="Tutorial Cache Web: cómo gestionar el cacheo de nuestros contenidos" alt="cache image Tutorial Cache Web: cómo gestionar el cacheo de nuestros contenidos" />
</div>
<p>El concepto de cache (sin acento, a no confundir con la palabra caché que significa distinción o elegancia) es ampliamente utilizado en todos los campos de la informática. De manera general podríamos definirlo como el proceso en el que un conjunto de datos son duplicados con el fin de <strong>reducir</strong> el tiempo de acceso a la información original y <strong>optimizar</strong> el rendimiento de un sistema.
</p>
<p>En el terreno web, el cacheo es el proceso de almacenamiento de documentos web (una página html, una imagen, una librería javascript, etc) con el objetivo de reducir el ancho de banda consumido por los visitantes, la carga de los servidores que atienden peticiones web y el retardo de una descarga. Una cache web almacena una copia de los documentos que son devueltos por un servidor y se encarga de atender las peticiones siguientes.</p>
<p>A la hora de definir una web en la que se espera un tráfico elevado cobra especial relevancia establecer una política de cacheo que permita crear un sistema <strong>escalable</strong> y evitar problemas a la hora de atender las peticiones de nuestros usuarios.
</p>
<p>Existen tres tipos de caches que pueden actuar durante el proceso de solicitud de un documento web:
</p>
<ol>
  <li><strong> Cache de Agente de Usuario (<em>User-Agent</em>):</strong> Está presenten en los navegadores web y lógicamente sólo funcionan para un único usuario. </li>
  <li><strong>Cache Compartida o <em>proxy-cachés directos</em>:</strong> Este tipo de cache son utilizados por los proveedores de servicios de Internet y empresas para ahorrar ancho de banda. La comparten todos los usuarios que accedan.</li>
  <li><strong>Cache pasarela o <em>proxy-cachés inversos</em>:</strong> Funcionan como respaldo de un servidor web de  forma transparente para los usuarios. Es posible trabajar con varias cache pasarela de manera conjunta para implementar una Content Delivery Network (CDN) (pjem: Akami)</li>
</ol> <center><img src="http://www.hellogoogle.com/wp-content/uploads/2009/05/cache_map.jpg" alt="Tipo de Cache" title="Tutorial Cache Web: cómo gestionar el cacheo de nuestros contenidos" /></center><p>Si planificamos correctamente un Site, la cache nos ayudará a mejorar el tiempo de carga y a gestionar de manera eficiente el ancho de banda de nuestro servidor. El incremento de rendimiento puede ser excepcional y la experiencia de nuestros visitantes mejorará notablemente sin necesidad de invertir ni un sólo euro.</p>
<h3>Cómo se gestiona una petición web
</h3>
<p>Para comprender el proceso de cacheo es indispensable entender qué ocurre durante la carga de una web. El siguiente gráfico muestra como se comunican un navegador y un servidor web durante la solicitud y envío de una página <strong>no cacheada</strong>:
</p> <center><img src="http://www.hellogoogle.com/wp-content/uploads/2009/05/http_communication.jpg" border="0" width="437" height="186" title="Tutorial Cache Web: cómo gestionar el cacheo de nuestros contenidos" alt="http communication Tutorial Cache Web: cómo gestionar el cacheo de nuestros contenidos" /></center>
<p>1. Navegador: Hola!, ¿podrías mandarme el archivo <em>ejemplo.htm</em>?
  <br /> 2. Servidor: Claro, espera un momento que lo busco en mi disco duro.
  <br /> 3. Servidor: Aquí esta!
  <br /> 
  4. Servidor: Te lo mando chico, cuidado que es un poco pesado 100kb y mi ancho de banda es limitado.
  <br />
   5. Navegador: Muchas gracias ya lo estoy descargando y mostrándoselo al usuario.
</p>
<p>Si la página se encuentra <strong>cacheada</strong> el proceso podría ser similar el siguiente:
</p> <center><img src="http://www.hellogoogle.com/wp-content/uploads/2009/05/http_communication_cache.jpg" border="0" width="437" height="186" title="Tutorial Cache Web: cómo gestionar el cacheo de nuestros contenidos" alt="http communication cache Tutorial Cache Web: cómo gestionar el cacheo de nuestros contenidos" /></center>
<p>1. Navegador: Hola!, ¿podrías mandarme el archivo <em>ejemplo.htm</em>?
  <br /> 2. Servidor: Claro, espera un momento estoy comprobando la fecha de modificación del archivo.
  <br /> 3. Servidor: Aquí está!, y veo que no se ha modificado el fichero desde la última vez que lo solicitaste.
  <br /> 4. Servidor: Estás de suerte, la versión que tienes en tu cache es la última.
  <br /> 5. Navegador: Genial, entonces no hace falta que me la envíes ya estoy mostrando al usuario la página que tengo cacheada.
</p>
<h3>Qué métodos de cacheo existen.
</h3>
<p>Existen tres tipos de mecanismos que permiten gestionar el cacheo de un contenido:
</p>
<p><strong> 1. Mecanismos por Validación <em>(validation)</em></strong>: En este mecanismo el servidor comprueba si la respuesta que mantiene cacheada el navegador sigue siendo válida. Existen dos variantes:
</p>
<div style="margin-left: 20px;">
  <p><strong> Last-Modified</strong>
  </p>
  <p>Cuando el servidor devuelve un documento por primera vez a un navegador adjunta también la fecha de modificación del fichero (<strong>Last-modified)</strong>:
  </p>
  <p><code> &lt;meta http-equiv="last-modified" content="Fri, 14 Dec 2007 12:58:00 GMT" /&gt;</code>
  </p>
  <p>La próxima vez que el navegador solicite el documento, el servidor enviará como respuesta el mensaje <em>"Not Modified"</em> en el caso de que el documento no haya sido modificado desde su última petición. El navegador mostrará entonces al usuario el documento que tiene almacenado en su cache.
  </p>
  <p><strong> ETag</strong> <strong>(Entity Tag)</strong>
  </p>
  <p>El método Last-Modified no es infalible y puede presentar problemas si existen desajustes en el reloj interno del servidor Web.
  </p>
  <p>ETag es un identificador único (un <a href="http://es.wikipedia.org/wiki/Algoritmo_MD5">hash MD5</a>) que se identifíca de manera única cada fichero cada vez que se crea o modifica. De esta manera, en vez de comprobar la fecha de modificación se chequea su ETag para conocer si ha cambiado respecto a la versión cacheada:
  </p>
  <p><code>ETag: h3110g00g13
    <br /> Contenido del fichero solicitado.</code>
  </p>
  <p>Más adelante podrá ver como se puede realizar esta comprobación en el servidor.
    <br />
  </p>
</div>
<p><strong>2. Mecanismos por Frescura <em>(freshness)</em></strong>: Tanto el método <em>Last-Modified </em>como <em>ETag </em>requieren que el navegador se comunique con el servidor para comprobar la versión del fichero. En los mecanismos por <em>frescura </em>en cambio cada repuesta lleva asociada una fecha de caducidad (como un yogurt) y puede ser utilizada sin necesidad de que el servidor compruebe su validez. Existen dos formas de implementar este mecanismo:
</p>
<div style="margin-left: 20px;">
  <p><strong> Expires.</strong>
  </p>
  <p>El Método Expires consiste en asignar una fecha de caducidad al fichero, el navegador no solicita al servidor una versión nueva hasta que no se traspasa la fecha de expiración del archivo.
  </p>
  <p><code>&lt;meta http-equiv="Expires" content="Mon, 14 Dec 2007 12:58:00 GMT"&gt;</code>
  </p>
  <p>De esta forma la comunicación se reduce a un monólogo entre el navegador que no solicita una nueva versión al servidor mientras no se exceda el periodo de expiración del fichero.
  </p>
  <p><strong> Max-age</strong>
  </p>
  <p>Es un método similar a Expires con la particularidad de que la fecha de caducidad del documento se establece de manera relativa, es decir, "Este documento expirara dentro de x segundos a partir de hoy".
  </p>
  <p><code>&lt;meta http-equiv="Cache-Control" content="max-age=3600</code>"&gt;
  </p>
  <p>Recuerde que el tiempo se debe establecer en segundos, un año por ejemplo serían 31.536.000 de segundos.
  </p>
</div>
<p><strong>3. Mecanismo por Invalidación:</strong> Este mecanismo se deriva de otra petición que pasa por la caché. Por ejemplo, si la url asociada con una respuesta cacheada es solicitada más tarde a través de una petición POST, PUT o DELETE, la respuesta que se encontraba cacheada quedará invalidada. Esto es lo que ocurre por ejemplo cuando intenta navegar hacia atrás en su historial tras haber enviado los datos de un formulario.
  <br />
</p>
<p>Además tenga en cuenta que existen una serie de reglas que también aplican al cacheo de contenidos y deben tenerse en cuenta:
</p>
<ul>
  <li>Bajo determinadas circunstancias, como por ejemplo, cuando un equipo se desconecta de la red, la cache puede servir páginas sin consultar con el servidor de origen.</li>
  <li>Un documento nunca se cachea si la cabecera del documento indica de manera explicita que no es cachee.</li>
  <li>Si se utiliza un protocolo seguro ((HTTPS) la página nunca será cacheada.</li>
</ul>
<h3>Cómo evitar el cacheo de nuestros contenidos
</h3> <p>En ocasiones el cacheo de contenidos puede interferir con el correcto funcionamiento de la web y por tanto debemos evitarlo. El funcionamiento de la cache se puede controlar con las siguientes directivas:</p>
<ul>
  <li><strong>Cache-control: max-age - </strong>Especifica el número máximos de segundos en los que el contenido sera considerado como fresco</li>
  <li><strong>Cache-control: </strong><strong>s-maxage </strong>- Similar a la directiva max-age, pero aplicable solo para caches compartidas (pejm: un proxy).</li>
  <li><strong>Cache-control: public</strong> - indica que la versión cacheada puede ser guardada por proxies y otros servidores intermedios para que todo el mundo tenga acceso a ella..</li>
  <li><strong>Cache-control: private</strong> - indica que el archivo no es el mismo para usuarios diferentes. De esta manera el archivo puede ser cacheado por el navegador del usuario pero no debe ser cacheado por proxies intermedios.</li>
  <li><strong>Cache-control: no-cache</strong> - Significa que el archivo no debe ser cacheado, esto puede ser necesario en casos en los que una misma url pueda devolver diferentes contenidos.</li>
  <li><strong>Cache-control: no-store - </strong> Indica al navegador que sólo guarde el documento el tiempo necesario para mostrarlo. Le recomiendo la lectura del siguiente artículo dónde se alerta sobre el <a href="http://blogs.atlassian.com/developer/2007/12/cachecontrol_nostore_considere.html" target="_blank">peligro de utilizar la directiva no-store</a> en situaciones no adecuadas.</li>
  <li><strong>Cache-control: must-revalidate</strong> - Indica a la cache que deben hacer caso a cualquier directiva de cacheo que le indiquemos. Tenga en cuenta que la especificación HTTP permite a las caches atender de manera automática a las peticiones bajo determinadas circustancias. ¨La directiva must-revalidete obliga a la cache a seguir nuestras directivas de manera estricta. La forma de utilizarla es la siguiente:
  <p> <code>&lt;meta http-equiv="Cache-Control" content="max-age=3600, must-revalidate</code>"&gt;
  </p> </li>
  <li><strong>Cache-control: proxy-revalidate - </strong>Similar a <em>must-revalidate</em> pero sólo aplicable a proxy caches.</li>
</ul>
<p>Como ve no existe una única forma que indicar que una página<strong> no sea cacheada</strong> por un navegador. Generalmente se utiliza la siguiente cabecera:
  <br />
</p>
<p><code>&lt;meta http-equiv="Cache-Control" content="max-age=0, no-cache, no-store, private"&gt;
  <br /> &lt;meta http-equiv="Pragma" content="nocache"&gt;</code>
</p>
<p>La directiva <em>Pragma </em>tiene el mismo significado que <em><strong>Cache-control: no-cache</strong></em> y se suele incluir para asegurarnos la compatibilidad con versiones anteriores a HTTP/1.0. ( Debe tener en cuenta que alguna de estas directivas sólo funcionan con las navegadores modernos.)
</p>
<p>En lugar de utilizar el <strong>tag meta</strong> también puede crear las <em>cabeceras HTTP</em> para sus documentos con cualquier lenguajes de scripting de servidor: <a href="http://es2.php.net/manual/es/function.header.php" target="_blank">PHP</a>, <a href="http://www.w3schools.com/ASP/met_addheader.asp" target="_blank">ASP</a>, .NET, etc. Recuerde que cualquier directivas de cacheo deben incluirse al principio del documento, incluso antes del tag html. Aquí le muestro algunos códigos de ejemplo:
</p>
<p><strong>php:</strong>
</p>
<p><code>header("Cache-Control:...");
  <br /> header("Pragma:..."); </code>
</p>
<p><strong>Cold Fusion</strong>
</p> <code>&lt;CFHEADER NAME="Expires" VALUE="..."&gt;</code>
<p><strong>ASP</strong>
</p>
<p><code>&lt;% Response.CacheControl="..." %&gt;</code>
</p>
<p><strong>ASP. net </strong>
</p> <code>Response.Cache.SetExpires (...</code> )
<h3>Tipo de páginas en función de su cacheabilidad
</h3>
<p>Una web puede ofrecer tres tipos de contenidos en función de su cacheabilidad.
</p>
<ol>
  <li><strong>Contenidos estáticos:</strong> Son aquellos contenidos que ya existen físicamente en el servidor, tienen un tamaño fijo y una fecha determinada. Una página html, una imagen o un documento pdf son ejemplos de contenidos estáticos. Este tipo de contenidos son firmes candidatos a ser cacheados.
  <br /></li>
  <li><strong>Contenidos dinámicos:</strong> Son contenidos que se crean en el momento en el que se solicitan accediendo, por ejemplo, a una base de datos. Este tipo de páginas son independientes del perfil del usuario que las visita y por tanto son potencialmente cacheables. </li>
  <li><strong>Contenidos personalizados: </strong>Este tipo de contenidos se crean a medida en base a las características de la petición y pueden ser diferentes en función de <em>quién</em>, <em>cuándo</em>, o <em>cómo </em>es solicitada. Por este motivo este tipo de contenidos no son buenos candidatos a ser cacheados, aunque como veremos más adelante hay técnicas que permiten cachearlos de manera parcial o total. El área privada de la web de un banco, o un carrito de la compra son dos ejemplos de páginas personalizadas.</li>
</ol>
<p>Es muy importante que entendamos qué contenidos pueden y deben cachearse y cuales no. Si no gestionamos eficientemente el cacheo corremos el riesgo de servir a nuestros usuarios un contenido que no está actualizado o por otro lado saturar nuestro servidor con peticiones innecesarias.
</p>
<h3>Estrategias de cacheo
</h3>
<p>Para optimizar la eficiencia del cacheo de contenidos tanto en el navegador como en los servidores proxy existen una serie de estrategias que podemos tener en cuenta:
</p>
<p><strong>1. Evite utilizar Query String</strong>
</p>
<p>Utilizar Friendly URLs en lugar de query strings facilita el cacheo de los contenidos. Algunos navegadores y muchos proxies cache no cachean contidos que lleven una query string en la URL.
</p>
<p>Recuerde que puede utilizar <em>mod_rewrite</em> en Apache Web Server para implementar friendly urls.
</p>
<p><strong>2. Organice eficientemente sus contenidos</strong>
</p>
<p>Puede organizar sus contenidos en cacheables y no cacheables, ubicándolos en diferentes rutas dentro del servidor.
</p>
<p>Por ejemplo es una práctica habitual ubicar los contenidos no cacheables de una web en <em>/cgi-bin/</em> y configurar el servidor para que informe a los navegadores con las cabeceras HTTP necesarias de que este contenido no sea cacheado.
</p>
<p><strong>3. Envíe la cabecera Last-Modified</strong>
</p>
<p>Incluya en sus documentos la información <em>Last-Modified. </em>De esta manera los navegadores podrán hacer peticiones condicionales del tipo <em>if-Modified-Since</em> (IMS) para que el servidor le entregue el contenido sólo en el caso de que su cache haya caducado.
</p>
<p>Para las páginas estáticas no existen ningún problema ya que existen físicamente el el servidor y tienen un <em>time stamp</em> asociado, pero en el caso una página dinámica donde el contenido no existe fisicamente, es la propia aplicación la que debe preguntar si el contenido ha cambiado.
</p>
<p>Una gestión eficiente de las solicitudes condicionales tiene una repercusión muy positiva en el ahorro de ancho de banda del servidor web.
</p>
<h3>Estratégias de cacheo para páginas personalizadas
</h3>
<p>Aquellas contenidos que se deben mostrar de manera personalizada para cada usuario también pueden ser objeto de cacheo si tenemos en cuenta las siguientes consideraciones:
</p>
<p><strong>1. Evite incluir fragmentos dependientes de la sesión HTTP del usuario</strong>
</p>
<p>Cuando un documento web se crea dinámicamente en el servidor web, evite que alguno de los elementos que componen la página dependa de la sesión HTTP del usuario. De esta manera conseguirá optimizar el cacheo de cada elemento y se podrá integrar más fácilmente en sistemas externos como Akamai que proporcionan gran escalabilidad.
</p>
<p><strong>2.Gestione eficiente la información en Cookies en el navegador</strong>
</p>
<p>Las cookies permiten almacenar de manera local la información personalizable de casa usuario de tal manera que el resto de contenidos de la página pueden ser objeto de cacheo.
</p>
<p>Por ejemplo, si queremos mostrar un mensaje de bienvenida personalizado podríamos almacenar este mensaje un una cookie local de tal manera que el resto del contenido pudiera cachearse.
</p>
<p><strong>3. Muestre el perfil del usuario en la URL</strong>
</p>
<p>Podemos recurrir a técnicas de URL rewriting para mostrar en la url elementos que indiquen el país o el tipo de usuario. Por ejemplo:
</p>
<p>http://www.hellogoogle.com/<strong>es</strong>/<strong>home-user</strong>/welcome/
</p>
<p>Luego por técnicas de url rewriting podrían convertirse en una url dinámica del tipo:
</p>
<p>http://www.hellogoogle.com/welcome/?country=es&amp;usertype=home-user
</p>
<p>Como ya vimos este tipo de friendly urls pueden ser cacheadas por los navegadores de los usuarios.
</p>
<p><strong>4. Gestione de manera independiente la información personalizada</strong>
</p>
<p>Técnicas como <em>AJAX </em>o <em>Adobe Flex</em> nos permiten mostrar al usuario información personalizada mediante peticiones GET o POST una vez cargada la página. Esto nos abre la posibilidad de cachear el documento html sin que ello interfiera con la información que se muestra de manera personalizada a cada usuario.
</p>
<p><strong>5. Utilice la cabecera ETAG para gestionar el cacheo de contenidos dinámicos</strong>
</p>
<p> Como ya vimos anteriormente <em>ETAG (Entity Tag)</em> es un sistema que permite identificar a un contenido de manera unívoca, Los servidores Web pueden realizar validaciones de contenido basándose en esta información al igual que hacen con la información Last-Modified.
</p>
<p>Obtener un ETAG a partir del contenido dinámico es sencillo y pemite minimizar el tiempo de respuesta en las revalidaciones de estos contenidos.
  <br />
  <br /> Dentro del ciclo de vida de la petición dentro del servidor, tras la generación del contenido, la aplicación puede obtener una hash MD5. La MD5 sería el ETAG que representa a esa petición. Si es igual a la ETAG enviada por el navegador, se indica al usuario final que el contenido no ha cambiado para que la cargue de su cache local (HTTP/1.x 304)::
</p>
<p><code>var contenido = response.buffer
  <br /> var path = request.header("PATH")
  <br /> var ETAG = funcion-MD5 (path, contenido) //Obtenemos el ETAG de la petición
  <br /> var request-ETAG = request.header("if-none-match") //Obtenemos el ETAG del navegador
  <br /> Si ETAG = request-ETAG Entonces //Comparamos ambos ETAG
  <br /> response.status = 304 //Si son iguales el contenido no ha variado.
  <br /> response.buffer = ''
  <br /> return
  <br /> Si No
  <br /> response.addheader("ETAG", ETAG)
  <br /> Fin Si</code>
</p>
<p> Utilizar ETAG junto con las directrices de Cache Cache-Control o Expires, permite ahorrar peticiones innecesarias y ancho de banda de nuestro servidor.
</p>
<h3>La cache universal: la solución a todos nuestros males
</h3>
<p>Como hemos podido ver en este artículo de <em>hellogoogle.com</em> la gestión eficiente de la cache es fundamental en el desarrollo y mantenimiento de un Site. Si puliéramos trabajar con una cache nuestra vida sería mucho más sencilla: Por ejemplo, no&nbsp; haría falta pedir cita con el&nbsp; médico, éste quedaría cacheado tras la primera visita del día y cada ciudadano tendríamos un médico en cache a nuestra disposición las 24h del día. Tampoco tendríamos que hacer cola en el autobús o en el cine: una vez que hubiera accedido el primer usuario el resto tendría un autobús y un cine cacheado al instante.
</p>
<p>Me temo que aún queda mucho tiempo para que la ciencia ponga a nuestra disposición un mundo cacheado en el que todos los seres humanos podamos vivir en paz sin necesidad de competir por un puesto de trabajo, una mujer o un trozo de pastel de chocolate. Mientras tanto seguiremos enfrentándonos a la cruda realidad de un mundo con recursos limitados, guerras, muerte y enfermedad.
</p>
<p>¿Quien sabe?, después de todo quiza no sea tan malo tener que esperar un ratito en la cola del dentista, yo al menos, no tengo ninguna prisa.
</p> Powered by HelloGoogle.com

<p>Artículos relacionados:<ol><li><a href='http://www.hellogoogle.com/tutorial_google_analytics_3/' rel='bookmark' title='Permanent Link: Tutorial sobre Google Analytics: 3. Etiquetado o Tagging en campañas de Marketing'>Tutorial sobre Google Analytics: 3. Etiquetado o Tagging en campañas de Marketing</a></li><li><a href='http://www.hellogoogle.com/tutorial_google_analytics_4/' rel='bookmark' title='Permanent Link: Tutorial sobre Google Analytics: 4. Objetivos, Conversiones, Ruta de redireccionamiento y Funnels'>Tutorial sobre Google Analytics: 4. Objetivos, Conversiones, Ruta de redireccionamiento y Funnels</a></li><li><a href='http://www.hellogoogle.com/tutorial_google_analytics_2/' rel='bookmark' title='Permanent Link: Tutorial sobre Google Analytics: 2. La interfaz de Google Analytics'>Tutorial sobre Google Analytics: 2. La interfaz de Google Analytics</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.hellogoogle.com/tutorial-cache-web/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Real Ajax Sexy Curls: Una forma elegante de mostrar el código fuente de nuestra página</title>
		<link>http://www.hellogoogle.com/real-ajax-sexy-curls/</link>
		<comments>http://www.hellogoogle.com/real-ajax-sexy-curls/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 15:24:38 +0000</pubDate>
		<dc:creator>Ignacio Gorostiza</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Desarrollo web]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.hellogoogle.com/real-ajax-sexy-curls-una-forma-elegante-de-mostrar-el-codigo-fuente-de-nuestra-pagina/</guid>
		<description><![CDATA[Recientemente tuve la oportunidad de ver un desarrollo en jquery llamado Sexy Curls que simula el paso de una hoja. Lo cierto es que me pareció un efecto muy interesante pero también muy desaprovechado. La librería se limitaba a mostrar por debajo una imagen que &#34;simulaba&#34; representar el código fuente de una página.
Así que ni [...]


Artículos relacionados:<ol><li><a href='http://www.hellogoogle.com/efecto_ajax_lightbox_javascript_css/' rel='bookmark' title='Permanent Link: Ajax Lightbox: Una ventana emergente 2.0 en su página web'>Ajax Lightbox: Una ventana emergente 2.0 en su página web</a></li><li><a href='http://www.hellogoogle.com/ajax-zoomy-lightbox/' rel='bookmark' title='Permanent Link: Ajax zoomy: Un Ajax lightbox para su galería de imágenes'>Ajax zoomy: Un Ajax lightbox para su galería de imágenes</a></li><li><a href='http://www.hellogoogle.com/ajax-accesible-para-google/' rel='bookmark' title='Permanent Link: AJAX Accesible para Google: Posicionar contenido en Ajax'>AJAX Accesible para Google: Posicionar contenido en Ajax</a></li></ol>]]></description>
			<content:encoded><![CDATA[<div class="caption-full" align="center"><a href="http://www.hellogoogle.com/wp-content/uploads/2009/02/ajax_sexy_curl.jpg" ><img src='http://www.hellogoogle.com/wp-content/uploads/2009/02/ajax_sexy_curl.jpg' alt='Ajax Sexy Curls: Una forma elegante de mostrar el código fuente de nuestra página' title="Real Ajax Sexy Curls: Una forma elegante de mostrar el código fuente de nuestra página" /></a></div>
<p>Recientemente tuve la oportunidad de ver un desarrollo en jquery llamado <a href="http://www.elliottkember.com/sexy_curls.html">Sexy Curls</a> que simula el paso de una hoja. Lo cierto es que me pareció un efecto muy interesante pero también muy desaprovechado. La librería se limitaba a mostrar por debajo una imagen que &quot;simulaba&quot; representar el código fuente de una página.</p>
<p>Así que ni corto ni perezoso me puse manos a la obra para completar el efecto y he desarrollado <a href="http://www.hellogoogle.com//examples/ajax_sexy_curls/ejemplo.htm" target="_blank">Real Ajax Sexy Curl,</a> que añade a la librería el encanto de mostrar por debajo el código fuente <strong>real</strong> de la página. </p>
<p>Una imagen vale más que mil palabras, así que, ¿por qué no echa un vistazo al <a href="http://www.hellogoogle.com//examples/ajax_sexy_curls/ejemplo.htm" target="_blank">ejemplo que he preparado</a>? (Por ahora sólo compatible con firefox <img src='http://www.hellogoogle.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' title="Real Ajax Sexy Curls: Una forma elegante de mostrar el código fuente de nuestra página" />  )</p>
<h3>Como funciona</h3>
<p>Ajax Sexy Curl es una funcionalidad basada el el framework <em>Jquery</em>, para su desarrollo he utilizado dos librerías open source:</p>
<ul>
  <li><em>Sexy Curl</em> escrita por Elliott Kember (http://twitter.com/elliottkember)</li>
  <li><em>Ajax Code Display</em>    escrita por Christian Heilmann (http://wait-till-i.com) </li>
</ul>
<p>La primera - Sexy Curl - simula un efecto de pasar página, para ello escala una imagen Png con transparencias. Como ya comenté antes, la librería original se limitaba a descubir una imagen que simulaba ser el código fuente de la página. </p>
<p>Ajax Code Display es una librería Ajax que muestra el código fuente de una página formateado. Es una librería bastante interesante que admite diferentes parámetros de personalización, Le animo a que visite su página y le eche un vistazo.</p>
<p>El resto ha sido una tarea bastante simple para compatibilizar ambas librerías y ajustar la funcionalidad a los objetivos iniciales del proyecto. Creo que el <a href="http://www.hellogoogle.com//examples/ajax_sexy_curls/ejemplo.htm" target="_blank">resultado es realmente espectacular</a>, ¿No le parece?</p>
<h3>Cómo incluirlo en mi web</h3>
<p>Ajax Sexy Curl puede aplicarse a cualquier web de manera extremadamente sencilla.</p>
<p>1. Incluya las librerías y estilos en la cabecera de la página <em>head</em>:</p>
<p><code>&lt;script type=&quot;text/javascript&quot; src=&quot;jquery1.3min.js&quot;&gt;&lt;/script&gt;<br />
&lt;script type=&quot;text/javascript&quot; src=&quot;jqueryui.js&quot;&gt;&lt;/script&gt;<br />
&lt;script type=&quot;text/javascript&quot; src=&quot;turn.js&quot;&gt;&lt;/script&gt;<br />
&lt;script type=&quot;text/javascript&quot; src=&quot;ajaxcodedisplay.js&quot;&gt;&lt;/script&gt;<br />
&lt;link rel=&quot;stylesheet&quot; href=&quot;turn.css&quot;&gt;</code></p>
<p>2. Por último, incluya en la primera línea del <em>body </em>el siguiente código html:</p>
<p><code>&lt;div id=&quot;target&quot;&gt;&lt;a href=&quot;#&quot; class=&quot;codeexample&quot; &gt;&lt;/a&gt;&lt;/div&gt;<br />
</code></p>
<p>Nada más, el código javascript no intrusivo se encargará del resto.</p>
<h3>Opciones de personalización</h3>
<p>A través de los estilos puede personalizar algunos aspectos de la funcionalidad:</p>
  <code>    var defaults = {      <br />
  directory: 'turn',      // Directorio en el que nos encontramos<br />      
  side: 'left',           // Si lo cambia a &quot;right&quot; la doblez se mostrará a la derecha      <br />
  turnImage: 'fold.png',  // Imagen para mostrar la doblez      <br />
  maxHeight: 400,         // Altura máxima<br />
  startingWidth: 80,     // Altura y anchura inicial    <br />
  startingHeight: 80,    // <br />      
  autoCurl: false         // Si lo ponemos a &quot;true&quot; la transición se inicia con un mouseover</code>
  <p>Por otro lado el código es Open Source con lo que podemos estudiarlo, modificarlo y ampliarlo libremente para que se ajuste perfectamente a nuestras necesidades.</p>
  <h3>Código fuente</h3>
  <p>Puede <a href="http://www.hellogoogle.com//examples/ajax_sexy_curls/real_ajax_sexy_curls.rar">descargarse el código</a> fuente de la librería y utilizarlo libremente en su Site, eso sí, tenga en cuenta las siguientes indicaciones:</p>
  <p>Este pluging se ofree bajo una licencia  <em>MIT </em>, esto significa que puede hacer prácticamente lo que le apetezca con él:</p>
  <ul>
    <li>Puede copiarlo, modificarlo, mezclarlo, publicarlo, distribuirlo, sub-licenliarlo y/o venderlo.</li>
    <li>Además el autor de la librería original y yo mismo, le permitimos imprimirla en una hoja de papel, doblarla y hacerse un sombrero.</li>
    <li>Eso sí, si mantiene los créditos de los autores, le estaremos muy agradecidos.<br />
    </li>
  </ul>
<p>La funcionalidad funciona correctamente en Firefox y <s>a partir de IE7</s> (Próximamente). Nada más, espero que este efecto le haya gustado tanto como a mi.</p> Powered by HelloGoogle.com

<p>Artículos relacionados:<ol><li><a href='http://www.hellogoogle.com/efecto_ajax_lightbox_javascript_css/' rel='bookmark' title='Permanent Link: Ajax Lightbox: Una ventana emergente 2.0 en su página web'>Ajax Lightbox: Una ventana emergente 2.0 en su página web</a></li><li><a href='http://www.hellogoogle.com/ajax-zoomy-lightbox/' rel='bookmark' title='Permanent Link: Ajax zoomy: Un Ajax lightbox para su galería de imágenes'>Ajax zoomy: Un Ajax lightbox para su galería de imágenes</a></li><li><a href='http://www.hellogoogle.com/ajax-accesible-para-google/' rel='bookmark' title='Permanent Link: AJAX Accesible para Google: Posicionar contenido en Ajax'>AJAX Accesible para Google: Posicionar contenido en Ajax</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.hellogoogle.com/real-ajax-sexy-curls/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Cómo enviar información, datos o parámetros con el método POST sin utilizar formulario</title>
		<link>http://www.hellogoogle.com/envio_datos_post_sin/</link>
		<comments>http://www.hellogoogle.com/envio_datos_post_sin/#comments</comments>
		<pubDate>Sat, 29 Nov 2008 09:02:50 +0000</pubDate>
		<dc:creator>Ignacio Gorostiza</dc:creator>
				<category><![CDATA[Desarrollo web]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.hellogoogle.com/envio_datos_post_sin/</guid>
		<description><![CDATA[Tal vez haya necesitado en alguna ocasión enviar datos de una p&#225;gina a otra y se ha visto forzado a enviarlos de manera visible en la URL en forma de querystring. Como sabr&#225; la  forma de enviar informaci&#243;n de manera no visible en la URL es utilizar el m&#233;todo POST pero para ello es [...]


Artículos relacionados:<ol><li><a href='http://www.hellogoogle.com/formularios_xhtml_css_javascript/' rel='bookmark' title='Permanent Link: Cómo mejorar los formularios HTML con Xhtml, Css y Javascript'>Cómo mejorar los formularios HTML con Xhtml, Css y Javascript</a></li><li><a href='http://www.hellogoogle.com/ajax-zoomy-lightbox/' rel='bookmark' title='Permanent Link: Ajax zoomy: Un Ajax lightbox para su galería de imágenes'>Ajax zoomy: Un Ajax lightbox para su galería de imágenes</a></li><li><a href='http://www.hellogoogle.com/tutorial_google_analytics_1/' rel='bookmark' title='Permanent Link: Tutorial sobre Google Analytics: 1. Información básica, configuración e instalación'>Tutorial sobre Google Analytics: 1. Información básica, configuración e instalación</a></li></ol>]]></description>
			<content:encoded><![CDATA[<div class="captionfull" ><center><a href="http://www.hellogoogle.com/wp-content/uploads/2008/11/post_data1.jpg" ><img src='http://www.hellogoogle.com/wp-content/uploads/2008/11/post_data1.jpg' alt='Cómo mandar información, datos o parámetros con el método POST y sin formulario' title="Cómo enviar información, datos o parámetros con el método POST sin utilizar formulario" /></a></center></div>
<p>Tal vez haya necesitado en alguna ocasión enviar datos de una p&aacute;gina a otra y se ha visto forzado a enviarlos de manera visible en la URL en forma de querystring. Como sabr&aacute; la  forma de enviar informaci&oacute;n de manera no visible en la URL es utilizar el m&eacute;todo POST pero para ello es necesario recurrir a un formulario. En el siguiente art&iacute;culo veremos una t&eacute;cnica que nos permite enviar datos por POST sin necesidad de trabajar con un formulario, o al menos, sin la necesidad de manejar un formulario de manera directa.</p>
<h3>El M&eacute;todo POST</h3>
<p>La especificaci&oacute;n de HTML  sitúa  la diferencia entre los m&eacute;todos GET y POST en la forma en la que los datos son enviados: En el caso de GET los datos son incluídos en la URL, mientras que cuando se utiliza el m&eacute;todo Post los datos de un formulario se env&iacute;an a la p&aacute;gina destino inmersos dentro del cuerpo de la petici&oacute;n HTTP.</p>
<p> Adem&aacute;s la especificaci&oacute;n recomienza utilizar el m&eacute;todo GET solamente cuando el procesamiento del formulario es <strong>idempotente </strong>(El env&iacute;o de los datos no va a generar un cambio en ning&uacute;n elemento del sistema salvo en el monitor del usuario), y utilizar el m&eacute;todo POST para el resto de casos. Un ejemplo de formulario idempotente podr&iacute;a ser el de una b&uacute;squeda, ya que tan s&oacute;lo genera una p&aacute;gina de resultados y no implica ning&uacute;n cambio de estado en BBDD.</p>
<p>Sin embargo hay casos en los que estamos obligados a utilizar el m&eacute;todo POST:</p>
<ul>
  <li>Si los datos a enviar contienen car&aacute;cteres que no pueden codificarse en ASCII.</li>
  <li>Si el tama&ntilde;o de los datos a enviar es muy grande. Puede encontrar un documento de Microsoft que habla sobre esta limitaci&oacute;n <a href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;q208427">INFO: Maximum URL Length Is 2,083 Characters in Internet Explorer (Q208427) </a>. </li>
  <li> En el caso de que no queramos hacer visible a los usuarios de manera directa c&oacute;mo se env&iacute;an los datos.</li>
</ul>
<p>Puede encontrar toda la informaci&oacute;n que necesite sobre los m&eacute;todos GET y POST en la siguiente p&aacute;gina <a href="http://www.cs.tut.fi/%7Ejkorpela/forms/methods.html" target="_blank">http://www.cs.tut.fi/~jkorpela/forms/methods.html</a></p>
<h3>Un ejemplo pr&aacute;ctico</h3>
<p>Para exponer de forma clara y sencilla esta t&eacute;cnica he pensado que lo mejor es preparar el siguiente <a href="http://www.hellogoogle.com/examples/post/">ejemplo</a>. </p>
<p>El c&oacute;digo javascript es extremadamente sencillo, en primer lugar accedemos directamente a los servicios del DOM para crear un formulario con un campo de tipo hidden. Existen muchas formas de hacer esto, en este ejemplo hemos optado por utilizar la funci&oacute;n <em>createElement </em>para crear los nodos y la funci&oacute;n <em>appenchild </em>para a&ntilde;adirlos al &aacute;rbol del documento:</p>
<p> <code>var form = document.createElement(&quot;form&quot;); // crear un form<br />
with(form) {<br />
setAttribute(&quot;name&quot;, &quot;myform&quot;); //nombre del form<br />
setAttribute(&quot;action&quot;, &quot;&quot;); // action por defecto<br />
setAttribute(&quot;method&quot;, &quot;post&quot;); // method POST }<br />
<br />

var input = document.createElement(&quot;input&quot;); // Crea un elemento input<br />
with(input) {<br />
setAttribute(&quot;name&quot;, &quot;theInput&quot;); //nombre del input<br />
setAttribute(&quot;type&quot;, &quot;hidden&quot;); // tipo hidden<br />
setAttribute(&quot;value&quot;, &quot;&quot;); // valor por defecto
}</code></p>
<p><code>  form.appendChild(input); // a&ntilde;ade el input al formulario<br />
document.getElementsByTagName(&quot;body&quot;)[0].appendChild(form); // a&ntilde;ade el formulario al documento
</code>
<p>El paso  siguiente y &uacute;ltimo (no le enga&ntilde;e cuando dije que iba a ser sencillo) es esperar a la carga de la pagina para recorrer el DOM del documento e identificar los links cuyo name sea &quot;<em>post</em>&quot;. En este caso recuperaremos el valor del <em>title</em> y se enviar&aacute; por POST a trav&eacute;s del formulario a la p&aacute;gina referenciada en el <em>href</em>.</p>
  <code> 
    window.onload=function(){<br />
    var my_links = document.getElementsByTagName(&quot;a&quot;);<br />
    for (var a = 0; a &lt; my_links.length; a++) {<br />
    if (my_links[a].name==&quot;post&quot;) my_links[a].onclick = function() {<br />
  document.myform.action=this.href;<br />
  document.myform.theInput.value=this.title;<br />
  document.myform.submit();<br />
  return false;}<br />
}</code><code>}</code></p>
<p>Aquellos links en los que queramos enviar algún tipo de información por POST deberán incluir los siguientes atributos:</p>
<ul><li>name="post"</li>
  <li>title=&quot;&lt;valor que queremos enviar&gt;&quot;</li>
  <li>href=&quot;&lt;url a la que se enviar&aacute; la informaci&oacute;n&gt;&quot;</li>
</ul>
<p>Valga el siguiente c&oacute;digo de ejemplo:</p>
<p><code>&lt;a href=&quot;ejemplo_post.php&quot; name=&quot;post&quot; title=&quot;Este valor se enviar&aacute; por post&quot; &gt;Pulsa aqu&iacute;&lt;/a&gt;   Para hacer POST. <br /> 
Tambi&eacute;n puedes &lt;a href=&quot;ejemplo_post.php&quot; name=&quot;post&quot; title=&quot;Este valor tambi&eacute;n se env&iacute;a por post&quot; &gt;pulsar aqu&iacute;&lt;/a&gt; para hacer otro POST.<br />
Esto es un &lt;a href=&quot;ejemplo_post.php&quot;&gt;Esto es un link normal&lt;/a&gt;.</code></p> Powered by HelloGoogle.com

<p>Artículos relacionados:<ol><li><a href='http://www.hellogoogle.com/formularios_xhtml_css_javascript/' rel='bookmark' title='Permanent Link: Cómo mejorar los formularios HTML con Xhtml, Css y Javascript'>Cómo mejorar los formularios HTML con Xhtml, Css y Javascript</a></li><li><a href='http://www.hellogoogle.com/ajax-zoomy-lightbox/' rel='bookmark' title='Permanent Link: Ajax zoomy: Un Ajax lightbox para su galería de imágenes'>Ajax zoomy: Un Ajax lightbox para su galería de imágenes</a></li><li><a href='http://www.hellogoogle.com/tutorial_google_analytics_1/' rel='bookmark' title='Permanent Link: Tutorial sobre Google Analytics: 1. Información básica, configuración e instalación'>Tutorial sobre Google Analytics: 1. Información básica, configuración e instalación</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.hellogoogle.com/envio_datos_post_sin/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Cómo mejorar los formularios HTML con Xhtml, Css y Javascript</title>
		<link>http://www.hellogoogle.com/formularios_xhtml_css_javascript/</link>
		<comments>http://www.hellogoogle.com/formularios_xhtml_css_javascript/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 09:53:33 +0000</pubDate>
		<dc:creator>Ignacio Gorostiza</dc:creator>
				<category><![CDATA[Accesibilidad]]></category>
		<category><![CDATA[Desarrollo web]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.hellogoogle.com/formularios_xhtml_css_javascript/</guid>
		<description><![CDATA[Los formularios son sin duda la forma de interacción más directa con el usuario que puede existir en un Site. El estándar HTML ofrece una serie de componentes nativos que pueden ser ampliados utilizando css y/o javascript. A continuación le muestro una serie de recursos  imprescindibles para mejorar la experiencia del usuario y crear [...]


Artículos relacionados:<ol><li><a href='http://www.hellogoogle.com/un-emulador-de-zx-spectrum-en-javascript/' rel='bookmark' title='Permanent Link: Un emulador de ZX Spectrum en Javascript'>Un emulador de ZX Spectrum en Javascript</a></li><li><a href='http://www.hellogoogle.com/javascript_no_intrusivo_ejemplo/' rel='bookmark' title='Permanent Link: Javascript no intrusivo, un ejemplo mágico.'>Javascript no intrusivo, un ejemplo mágico.</a></li><li><a href='http://www.hellogoogle.com/envio_datos_post_sin/' rel='bookmark' title='Permanent Link: Cómo enviar información, datos o parámetros con el método POST sin utilizar formulario'>Cómo enviar información, datos o parámetros con el método POST sin utilizar formulario</a></li></ol>]]></description>
			<content:encoded><![CDATA[<div class="caption-full"><center><a href="http://www.hellogoogle.com/wp-content/uploads/2008/11/mejorar_formularios_html.jpg" ><img src='http://www.hellogoogle.com/wp-content/uploads/2008/11/mejorar_formularios_html.jpg' alt='Como mejorar los formularios HTML con Xhtml, Css y Javascript' title="Cómo mejorar los formularios HTML con Xhtml, Css y Javascript" /></a></center></div>
<p>Los formularios son sin duda la forma de interacción más directa con el usuario que puede existir en un Site. El estándar HTML ofrece una serie de componentes nativos que pueden ser ampliados utilizando css y/o javascript. A continuación le muestro una serie de recursos  imprescindibles para mejorar la experiencia del usuario y crear formularios interactios, accesibles y muy atractivos. Si conoce algún otro recurso que no haya incluido y quiere compartirlo en hellogoogle.com no dude en comentármelo:</p>
<h3>Botones mejorados</h3>
<ul>
  <li><a href="http://particletree.com/features/rediscovering-the-button-element/" target="_blank">Cómo Incluir un icono en los botones </a></li>
  <li><a href="http://www.oscaralexander.com/tutorials/how-to-make-sexy-buttons-with-css.html" target="_blank">Cómo mejorar los botones con css</a></li>
  <li><a href="http://www.shauninman.com/archive/2007/09/10/styling_file_inputs_with_css_and_the_dom" target="_blank">Como cambiar el estilo a los botones tipo File con css y javascript</a></li>
  <li><a href="http://www.nublue.co.uk/blog/css-hover-button/" target="_blank">Cómo hacer un hover "sexy" con css.</a></li>
</ul>
<h3>Radio Buttons y Checboxes</h3>
<ul>
  <li><a href="http://ryanfait.com/resources/custom-checkboxes-and-radio-buttons/" target="_blank">Cómo cambiar el aspecto a los checkbox y radio buttons</a></li>
  <li><a href="http://www.c82.net/posts.php?id=25" target="_blank">Elemento de formulario: Select Area + Checkbox</a></li>
</ul>
<h3>Mejorar el elemento Input</h3>
<ul><li><a href="http://www.picment.com/articles/css/funwithforms/">Cómo cambiar el aspecto de los elementos input</a></li>
  <li><a href="http://www.brandspankingnew.net/archive/2006/08/ajax_auto-suggest_auto-complete.html">Campos input autocompletables con Ajax</a></li>
</ul>
<h3>Combo box mejorados</h3>
<ul>
  <li><a href="http://particletree.com/features/upgrade-your-select-element-to-a-combo-box/" target="_blank">Elemento de formulario: Input Text + Combo Box</a></li>
</ul>
<h3>Menús de pestañas</h3>
<ul>
  <li><a href="http://www.alistapart.com/articles/slidingdoors/" target="_blank">Menú de pestañas con css</a></li>
</ul>
<h3>Maquetación de elementos de  formulario con CSS </h3>
<ul>
  <li><a href="http://www.formassembly.com/form-garden.php?formId=29&amp;style=/form-builder/css/campground_2" target="_blank">Diseño del layout de un formulario con css</a></li>
  <li><a href="http://www.cssplay.co.uk/menu/form.html" target="_blank">Diseño de forumularios con sss</a></li>
  <li><a href="http://www.skyrocket.be/2006/01/09/semantic-horizontal-forms/" target="_blank">Formularios semánticos horizontales</a></li>
  <li><a href="http://www.badboy.ro/assets/articles/niceforms/niceforms.html" target="_blank">Diseño de formularios</a></li>
  <li><a href="http://www.agavegroup.com/?p=35" target="_blank">Formularios funcionales y bonitos</a></li>
  <li><a href="http://jeffhowden.com/code/css/forms/" target="_blank">Cómo maquetar formularios con css y sin tablas.</a></li>
  <li><a href="http://www.sitepoint.com/article/style-web-forms-css" target="_blank">Aplicar estilo a los formularios con CSS</a></li>
  <li><a href="http://www.aplus.co.yu/css/styling-form-fields/" target="_blank">Aplicar estilo a los campos de formulario</a></li>
</ul>
<h3>Formularios accesibles</h3>
<ul>
  <li><a href="http://www.subtraction.com/archives/2005/0822_free_form_fo.php" target="_blank">Formularios crossbrowser en xhtml + css</a></li>
  <li><a href="http://www.websiteoptimization.com/speed/tweak/forms/" target="_blank">Formularios accesibles con css</a></li>
  <li><a href="http://www.themaninblue.com/writing/perspective/2004/03/24/" target="_blank">Plantillas con CSS para formularioss accesibles </a></li>
  <li><a href="http://www.alistapart.com/articles/prettyaccessibleforms" target="_blank">Formularios accesibles y bonitos</a></li>
  <li><a href="http://juicystudio.com/article/form-help-without-popups.html" target="_blank">Cómo mostrar una ayuda sin recurrir a  Popups</a></li>
  <li><a href="http://www.aplus.co.yu/css/styling-form-fields/" target="_blank"></a><a href="http://www.stuffandnonsense.co.uk/archives/trimming_form_fields.html" target="_blank">Mostrar y ocultar campos no obligatorios de manera accesible</a></li>
</ul>
<h3>Herramientas para crear formularios</h3>
<ul>
  <li><a href="http://www.icebrrg.com" target="_blank">Icebrrg - Herramienta para construir formularios, encuestas e invitaciones</a></li>
  <li><a href="http://www.wufoo.com" target="_blank">Wufoo - Otra herramienta para construir formularios, encuestas e invitaciones</a></li>
  <li><a href="http://www.jotform.com" target="_blank">JotForm - Herramienta online WYSIWYG para crear formularios</a></li>
  <li><a href="http://www.accessify.com/tools-and-wizards/accessibility-tools/form-builder/" target="_blank">Ccessify - Herramienta para construir formularios basados en CSS</a></li>
</ul>
<h3>Frameworks</h3>
<ul>
<li><a href="http://dojotoolkit.org/projects/dijit" target="_blank">Dijit- Framework javascript basado en Dojo realmente flexible y potente.</a>.</li>
  <li><a href="http://jxlib.org/" target="_blank">Framework Jx - Librería JavaScript basada en MooTools para crear interfaces gráficos.</a>. </li>
</ul>
</body> Powered by HelloGoogle.com

<p>Artículos relacionados:<ol><li><a href='http://www.hellogoogle.com/un-emulador-de-zx-spectrum-en-javascript/' rel='bookmark' title='Permanent Link: Un emulador de ZX Spectrum en Javascript'>Un emulador de ZX Spectrum en Javascript</a></li><li><a href='http://www.hellogoogle.com/javascript_no_intrusivo_ejemplo/' rel='bookmark' title='Permanent Link: Javascript no intrusivo, un ejemplo mágico.'>Javascript no intrusivo, un ejemplo mágico.</a></li><li><a href='http://www.hellogoogle.com/envio_datos_post_sin/' rel='bookmark' title='Permanent Link: Cómo enviar información, datos o parámetros con el método POST sin utilizar formulario'>Cómo enviar información, datos o parámetros con el método POST sin utilizar formulario</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.hellogoogle.com/formularios_xhtml_css_javascript/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Redirección 301: Cómo cambiar de nombre de dominio sin perder PageRank ni posicionamiento</title>
		<link>http://www.hellogoogle.com/301_cambiar_dominio_page_rank/</link>
		<comments>http://www.hellogoogle.com/301_cambiar_dominio_page_rank/#comments</comments>
		<pubDate>Tue, 11 Nov 2008 09:42:15 +0000</pubDate>
		<dc:creator>Ignacio Gorostiza</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Webmaster]]></category>

		<guid isPermaLink="false">http://www.hellogoogle.com/301_cambiar_dominio_page_rank/</guid>
		<description><![CDATA[


Artículos relacionados:<ol><li><a href='http://www.hellogoogle.com/como-elegir-un-dominio/' rel='bookmark' title='Permanent Link: Cómo elegir un nombre de dominio: 25 consejos'>Cómo elegir un nombre de dominio: 25 consejos</a></li><li><a href='http://www.hellogoogle.com/anatomia-de-un-dominio/' rel='bookmark' title='Permanent Link: Anatomía de un Dominio: posicionar un dominio en Google'>Anatomía de un Dominio: posicionar un dominio en Google</a></li><li><a href='http://www.hellogoogle.com/posicionar_un_nombre_google/' rel='bookmark' title='Permanent Link: Cómo posicionar un nombre en Google'>Cómo posicionar un nombre en Google</a></li></ol>]]></description>
			<content:encoded><![CDATA[<div class="clear-both" style="text-align:center"><a href="http://www.hellogoogle.com/wp-content/uploads/2008/11/redireccion_301.jpg" ><img src='http://www.hellogoogle.com/wp-content/uploads/2008/11/redireccion_301.jpg'' alt='Cómo cambiar de nombre de dominio sin perder PageRank' title="Redirección 301: Cómo cambiar de nombre de dominio sin perder PageRank ni posicionamiento" /></a></div>
<p>Un cambio de marca puede implicar un cambio de dominio que nos sumergir&aacute; en un oc&eacute;ano de dudas y temores sobre la repercusi&oacute;n que tendr&aacute; este cambio sobre las visitas a nuestra web. Si echamos un ojo al <a href="http://googlewebmastercentral.blogspot.com/2008/04/best-practices-when-moving-your-site.html" target="_blank">m&eacute;todo oficial</a> que recomienda google en estos casos, o incluso el m&eacute;todo no oficial de <a href="http://www.mattcutts.com/blog/moving-to-a-new-web-host/">Matt Cutts</a>, comprobaremos que el n&uacute;mero <strong>301</strong> parece ser la soluci&oacute;n a todos nuestros males. </p>
<p>He de reconocer que yo mismo he tenido que pasar por la experiencia de cambiar el nombre de dominio de mi web y les puedo asegurar que si no queremos acabar al borde de un ataque de nervios es muy recomendable tener muy claro <strong>cu&aacute;ndo </strong> abordar este proyecto, <strong>c&oacute;mo</strong> abordarlo y sobre todo tener claro <strong>cu&aacute;nto</strong> tiempo puede llevarnos volver a tener nuestro n&uacute;mero habitual de visitantes. En este art&iacute;culo les mostrar&eacute; de manera sencilla la mejor estrategia para que este v&iacute;a crucis sea lo m&aacute;s corto posible.</p>
<h3><strong>1. Consideraciones iniciales a tener en cuenta </strong></h3>
<p>El Pagerank se asocia a un <strong>domino</strong> de manera global y a cada una de las <strong>p&aacute;ginas</strong> que conforman el site de manera particular.</p>
<p>Antes de comenzar es importante identificar qué p&aacute;ginas su Site son las que reciben el mayor n&uacute;mero de visitas y realizar su redireccionamiento de manera especialmente minuciosa. Tenga en cuenta que por norma general  el 20% de las p&aacute;ginas de un Site generan el 80% de las visitas del mismo:</p>
<ul>
  <li>Identifique qu&eacute; paginas se encuentran <strong>indexadas</strong> por Google:
    <ul>
      <li>(En Google) <code>site:www.miweb.com</code></li>
    </ul>
  </li>
  <li>Identifique qu&eacute; p&aacute;ginas est&aacute;n siendo <strong>enlazadas</strong> desde los Sites m&aacute;s relevantes: 
    <ul>
      <li>(En Google, s&oacute;lo muestra una lista aleatoria de enlaces)<code> site:www.miweb.com</code></li>
      <li>(En Yahoo<code>) http://siteexplorer.search.yahoo.com/</code>
    <li>(En MSN) <code>linkdomain:www.miweb.com</code></li>
    <li>Tambi&eacute;n puede recurrir a su sistema de gesti&oacute;n de estad&iacute;sticas o a m&uacute;ltiples herramientas online que hay a su disposici&oacute;n para conocer los backlinks de una web (pejm: <a href="http://www.linkvendor.com/seo-tools/site-analysis.html">Link Popularity Analysis</a>, <a href="http://www.linkpopularity.com/">LinkPopularity.com</a>)</li>
  </ul>
  <li>Consulte sus estad&iacute;sticas para identificar qu&eacute; p&aacute;ginas reciben el mayor n&uacute;mero de <strong>visitas.</strong></li>
</ul>
<p>Tenga presente que la transferencia de pagerank no es inmediata. </p>
<p>El <a href="http://www.hellogoogle.com/mejorar-subir-pagerank-google/" target="_blank">pagerank real y el pagerank visible</a> en la barra de google <strong>no coinciden</strong> en n&uacute;mero <strong>ni se actualizan</strong> el mismo tiempo. </p>
<p>Tan importante como no perder pagerank, es no perder<strong> presencia en buscadores,</strong> <strong>ni backlinks.</strong></p>
<h3><strong>2. C&oacute;mo funciona una redirecci&oacute;n 301 </strong></h3>
<p>La comunicaci&oacute;n entre un <em>agente</em> (un navegador, Google, etc) y un <em>servidor web</em> se realiza a trav&eacute;s de peticiones y respuestas HTTP. Cuando un <em>agente</em> solicita un recurso que ya no se encuentra en la url solicitada, el servidor responde con una <strong>cabecera http de redirecci&oacute;n 301</strong>: </p>
<ul>
  <li> La primera l&iacute;nea de la cabecera se llama <em>l&iacute;nea de estado</em> y define la versi&oacute;n del protocolo, el c&oacute;digo de respuesta y una frase explicativa.</li>
  <li>La segunda l&iacute;nea se denomina location y se utiliza para redirigir al receptor a la url donde se ubica realmente su solicitud. </li>
</ul>
<p>Por ejemplo, cuando un <strong>visitante</strong> accede a nuestra web antigua el funcionamiento de una redirecci&oacute;n 301 es el siguiente:</p>
<ul>
  <li>Un visitante solicita al servidor una url del antiguo dominio realizando la siguiente solicitud http:
    <ul>
      <li><code> GET /index.php http/1.1<br /> 
      Host: www.olddomain.com </code></li>
    </ul>
  </li>
  <li> El servidor le devuelve un c&oacute;digo de estado 301.
    <ul>
      <li><code> 301 Moved Permanently<br /> 
      Location: http://www.newdomain.com/index.php </code></li>
    </ul>
  </li>
  <li>El navegador al recibir el c&oacute;digo 301 sabe que debe redirigir al usuario a la nueva url.. </li>
</ul>
<p>En el caso de que sea la ara&ntilde;a de <strong>Google</strong> la que accede a nuestra antigua web, el funcionamiento de la redirecci&oacute;n es similar:</p>
<ul>
  <li>Googlebot solicita al servidor una url del antiguo dominio  realizando la siguiente solicitud http:
    <ul>
        <li><code> GET /index.php http/1.1<br />
        Host: www.olddomain.com </code></li>
    </ul>
  </li>
  <li> El servidor le devuelve un c&oacute;digo de estado 301.
      <ul>
        <li><code> 301 Moved Permanently<br />
        Location: http://www.newdomain.com/index.php </code></li>
      </ul>
  </li>
  <li>GoogleBot  al recibir el c&oacute;digo 301 sabe que la url del documento ha cambiado y que debe actualizar sus &iacute;ndices.</li>
</ul>
<p><u>Nota:</u> Puede ver todos los detalles sobre la naturaleza de las cabeceras http en la <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6">definici&oacute;n del protocolo HTTP/1.1</a>.</p>
<p>Tambi&eacute;n puede conocer <a href="http://www.google.com/support/webmasters/bin/answer.py?answer=40132" target="_blank">como reacciona GoogleBot</a> en funci&oacute;n del c&oacute;digo de respuesta que encuentre.</p>
<h3>3. C&oacute;mo se implementa una redirecci&oacute;n</h3>
<p>No existe una &uacute;nica forma de realizar redirecciones, por un lado podemos asignar redirecciones HTTP configurando nuestro servidor web, tambi&eacute;n podemos incluir en la p&aacute;gina a redireccionar scripting de servidor (PHP, ASP, Perl, etc), incluso podemos realizar redirecciones con scripting de cliente (JavaScrpt, Meta Refresh, etc), aunque estas &uacute;ltimas est&aacute;n <strong>totalmente desaconsejadas</strong> en este caso ya que <strong>no son transparentes</strong> para los visitantes y su utilizaci&oacute;n puede conllevar <strong>penalizaciones</strong> en el posicionamiento del Site.</p>
<p> La elecci&oacute;n de un m&eacute;todo u otro la debe de tomar usted en funci&oacute;n de sus necesidades, vamos a ver unos cu&aacute;ntos ejemplos de implementaci&oacute;n: </p>
<p><strong>I. Realizar la redirecci&oacute;n en los archivos de configuraci&oacute;n del servidor</strong></p>
<p> Para poder indicar la redirecci&oacute;n en los archivos de configuraci&oacute;n debe de tener acceso al archivo <em>httpd.conf</em> de su servidor Apache. A continuaci&oacute;n le muestro a modo de ejemplo el c&oacute;digo necesario para redireccionar todas las urls de olddomain.com a newdomain.com: </p>
<p><code>  RewriteEngine On  </code><code><br />
  RewriteCond %{HTTP_HOST} !^olddomain\.com [NC] </code><code><br />
  RewriteRule (.*) http://newdomain.com/$1 [R=301,L] </code> </p>
<ol>
  <li>Habilita el m&oacute;dulo  mod_rewrite module.</li>
  <li>La segunda l&iacute;nea chequea el nombre del dominio en la cabecera de la petici&oacute;n HTTP. El par&aacute;metro NC indica que la comprobaci&oacute;n no debe ser sensible a may&uacute;sculas.</li>
  <li>La tercera l&iacute;nea realiza la redirecci&oacute;n 301 a la url correcta. El par&aacute;metro &quot;R&quot; establece el c&oacute;digo de respuesta y el par&aacute;metro &quot;L&quot; indica que una vez hecha la redirecci&oacute;n se ignore cualquier otra regla que pueda aparecer en el fichero.</li>
</ol>
<p><strong>II. Redirecci&oacute;n de directorios y ficheros con  .htaccess </strong></p>
<p>La forma m&aacute;s sencilla de redireccionar una p&aacute;gina est&aacute;tica a una direcci&oacute;n es a trav&eacute;s de la <a href="http://httpd.apache.org/docs/2.2/mod/mod_alias.html#redirect" target="_blank">directiva de redirecci&oacute;n de Apache</a>. La redirecci&oacute;n debe indicarse dentro un un archivo <em>.htaccess</em> ubicado en el ra&iacute;z o en el directorio sobre el que se quiera aplicar. Tenga en cuenta que la redirecci&oacute;n se aplicar&aacute; tambi&eacute;n a todos los directorios que cuelguen de este.</p>
<p>Por ejemplo si quisi&eacute;remos redirigir todas las p&aacute;ginas que cuelguen de la carpeta <em>/cat&aacute;logo </em>deber&iacute;a incluir en este directorio un archivo 


  <em>.htacces</em> con la siguiente informaci&oacute;n:</p>
<p><code>Redirect 301 /catalogo http://newdomain.com/catalogo</code></p>
<p>Tambi&eacute;n es posible establecer redirecciones con expresiones regulares y <a href="http://httpd.apache.org/docs/2.2/mod/mod_alias.html#redirectmatch">RedirectMatch</a>. Por ejemplo podríamos redirigir los archivos<em> .gif </em>de oldomaian.com a sus hom&oacute;nimos en <em>.jpg</em> de newdoamin.com con la siguiente expresión: </p>
<p><code> RedirectMatch 301 (.*)\.gif$ http://www.newdomain.com$1.jpg

</code></p>
<p><strong>III. Redirecci&oacute;n en c&oacute;digo de servidor </strong></p>
<p>Otra forma de establecer una redirecci&oacute;n es indicarla de manera program&aacute;tica con c&oacute;digo servidor, la sintaxis var&iacute;a en funci&oacute;n del lenguaje:</p>
<ul>
  <li><strong>PHP<br />
    </strong><code>
&lt;? header("HTTP/1.1 301 Moved Permanently", TRUE, 301); <br />
    @header("Location: http://newdomain.com/"); 


 ?&gt; 
</code></li>
  <li><strong>ColdFusion<br />
    </strong><code>&lt;CFHEADER statuscode="301" statustext="Moved Permanently"&gt; <br />
&lt;CFHEADER name="Location" value="http://newdomain.com/"&gt; </code></li>
  <li><strong>Perl<br />
    </strong><code>#!/usr/bin/perl -w <br />
use strict; <br />
print "Status: 301 Moved Permanently\r\n", "Location: http://newdomain.com/\r\n\r\n"; <br />
exit;</code></li>
  <li><strong>ASP<br />
    </strong><code>&lt;% Response.Buffer = TRUE; <br />
    Response.Status = "301 Moved Permanently" <br />
    Response.AddHeader "Location", &quot;http://www.newdomain.com/&quot;<br />
Response.End %&gt;</code></li>
  <li><strong>ASP .NET</strong><br /> 
    <code>&lt;script runat="server"&gt; <br />
private void Page_Load(object sender, System.EventArgs e) <br />
{ <br />
Response.Status = "301 Moved Permanently"; <br />
Response.AddHeader("Location","http://www.newdomain.com/"); <br />
}&lt;/script&gt; </code></li>
  <li><strong>JSP<br />
  </strong><code>&lt;% 
  response.setStatus(301); <br />
  response.setHeader( "Location", "http://www.newdomain.com/" ); <br />
  response.setHeader( "Connection", "close" );
  %&gt;</code></li>
  <li><strong>Ruby on Rails</strong><br /> 
    <code>def old_action <br />
    headers["Status"] = "301 Moved Permanently" <br />
    redirect_to "http://www.newdomain.com</code>/<code>" <br />
    end </code><br />
  </li>
</ul>
<p><strong>IV. Redirecciones en IIS</strong></p>
<p>Si su servidor web es un IIS puede seguir las siguientes indicaciones para hacer una redirecci&oacute;n 301:</p>
<ul>
  <li>En la consola Internet Services Manager haga click en el archivo o directorio que quiere redireccionar.</li>
  <li>Seleccione la opci&oacute;n "redirection to a URL - Redirigir a una URL&quot;. </li>
  <li>Escriba la direcci&oacute;n a la que quiere redireccionar.</li>
  <li>Marque "The exact url entered above - la url introducida abajo" y "A permanent redirection for this resource - Redirecci&oacute;n permanente para este recurso" </li>
  <li>Haga click en 'Apply - Aplicar'.</li>
</ul>
<p>&nbsp;</p>
<h3>4. Estrategia de redireccionamiento a seguir</h3>
<p>La estrategia a seguir es relativamente sencilla: cada url del antiguo dominio se debe redireccionar a la url correspondiente del nuevo dominio:</p>
<ul>
  <li>Cuanto m&aacute;s <strong>sencillas</strong> sean las redirecciones aplicadas mejor.</li>
  <li><strong>Antes de redireccionar</strong> todo el dominio redireccione un archivo para asegurarse que entiende el proceso y que todo funciona correctamente. </li>
  <li>Si tiene acceso como <em>Root</em> a su servidor realice la redirecci&oacute;n en el <strong>archivo de configuraci&oacute;n del servidor</strong>. </li>
  <li>Si la estructura de directorios se mantiene <strong>id&eacute;ntica</strong> en el nuevo dominio con una s&oacute;la regla es suficiente. </li>
  <li>En el caso de que la estructura de directorios var&iacute;e es necesario crear una regla para cada caso. Si existe un n&uacute;mero elevado de p&aacute;ginas el trabajo puede volverse bastante tedioso por lo que es importante hacerlo con cuidado para evitar <strong>errores</strong>. </li>
  <li>Si a parte del nombre de dominio, tiene previsto realizar un cambio de <strong>dise&ntilde;o</strong>, es recomendable aplicar el redise&ntilde;o en una segunda fase para evitar desorientar a sus visitantes. </li>
  <li>Una vez finalizada la redirecci&oacute;n es importante crear un Google <a href="http://www.google.com/support/webmasters/bin/answer.py?answer=40318">Sitemap </a> con las URLs de su nuevo Site para indicar a Google de manera <strong>explicita</strong> que los contenidos est&aacute;n ahora disponibles en su nuevo Site . </li>
</ul>
<h3>5. Consideraciones finales </h3>
<p>Si la redirecci&oacute;n se ha hecho con &eacute;xito no se debe experimentar<strong> ninguna pérdida de visitas</strong>:</p>
<ul>
  <li>Los <strong>backlinks</strong> existentes deben redirigir ahora a las p&aacute;ginas en el nuevo dominio.</li>
  <li>Los resultados de las b&uacute;squedas en Google todav&iacute;a mostraran el antiguo dominio pero el usuario ser&aacute; redirigido al nuevo Site.</li>
</ul>
<p>Si hemos dado de alta correctamente el Site Map para el nuevo dominio en 2 o 3 semanas deberemos ver como se <strong>actualiza el &iacute;ndice de Google</strong> para mostrar los resultados con el nuevo nombre de dominio.</p>
<p>El <a href="http://www.hellogoogle.com/mejorar-subir-pagerank-google/%20" target="_blank">PageRank p&uacute;blico</a> mostrado en la barra de Google puede tardar <strong>varios meses</strong> en actualizarse con el valor original del antiguo dominio. Esto no debe obsesionarnos pues no tiene una repercusi&oacute;n negativa en el posicionamiento.</p>
<p>Mantenga los Google Site Maps del Site antiguo y nuevo, y revise de manera peri&oacute;dica los <a href="http://www.google.com/support/webmasters/bin/answer.py?answer=35120">errores de indexaci&oacute;n(crawl errors)</a> para asegurarse que las redirecciones est&aacute;n<strong> funcionando correctamente</strong> y que no existen errores del tipo 404 (Documento no encontrado). </p>
<p>En el blog oficial de Google se recomienda mantener el contenido del antiguo Site durante al menos <strong>180 d&iacute;as</strong> una vez hecha la redirecci&oacute;n. Si no queremos perder los backlinks deberemos mantener  el antiguo contenido de manera indefinida o solicitar uno a uno a todos los Sites implicados que actualicen sus enlaces para apuntar a la nueva direcci&oacute;n. </p>
<p>Las redirecciones deben ser tratadas con especial cuidado, tenga en cuenta que algunos webmasters las han utilizado para intentar modificar de manera fraudulenta los rankings de Google en su propio beneficio, puede leer m&aacute;s acerca de esta pr&aacute;ctica en el art&iacute;culo <a href="http://clsc.net/research/google-302-page-hijack.htm%20">302 page Hijack.</a> </p>

<h3>6. Google WebMaster Tools: Herramienta para el Cambio de Dirección</h3>
<p>Ahora también puede indicar a Google de manera explícita que ha cambiado la dirección de su Site. Para ello utilice  la herramienta <strong>"Cambio de Dirección"</strong> que encontrará en su <a href="http://https://www.google.com/webmasters/tools/home?hl=es" target="_blank">panel de control de Google Webmaster Tools</a>. Esto facilitará y agilizará la actualización del indice de su web en Google.</p>
<p>Debe tener en cuenta que la utilización de esta herramienta debe complementarse con todo lo dicho anteiormente:</p>
<ul>
<li>Configure su nueva web.</li>
<li>Redirija el tráfico desde el sitio antiguo al nuevo.</li>
<li>Incluya su nueva web en  las Herramientas para webmasters de Google.</li>
<li>Indique la URL del dominio nuevo.</li></ul>
<p>Tras reportar a Google el cambio de dirección, debe consultar periódicamente su panel de control de Google Webmaster Tools para comprobar si se ha rastreado e indexado correctamente su nueva web.</p>
 Powered by HelloGoogle.com

<p>Artículos relacionados:<ol><li><a href='http://www.hellogoogle.com/como-elegir-un-dominio/' rel='bookmark' title='Permanent Link: Cómo elegir un nombre de dominio: 25 consejos'>Cómo elegir un nombre de dominio: 25 consejos</a></li><li><a href='http://www.hellogoogle.com/anatomia-de-un-dominio/' rel='bookmark' title='Permanent Link: Anatomía de un Dominio: posicionar un dominio en Google'>Anatomía de un Dominio: posicionar un dominio en Google</a></li><li><a href='http://www.hellogoogle.com/posicionar_un_nombre_google/' rel='bookmark' title='Permanent Link: Cómo posicionar un nombre en Google'>Cómo posicionar un nombre en Google</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.hellogoogle.com/301_cambiar_dominio_page_rank/feed/</wfw:commentRss>
		<slash:comments>50</slash:comments>
		</item>
		<item>
		<title>Ajax zoomy: Un Ajax lightbox para su galería de imágenes</title>
		<link>http://www.hellogoogle.com/ajax-zoomy-lightbox/</link>
		<comments>http://www.hellogoogle.com/ajax-zoomy-lightbox/#comments</comments>
		<pubDate>Mon, 03 Nov 2008 16:07:19 +0000</pubDate>
		<dc:creator>Ignacio Gorostiza</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Desarrollo web]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://www.hellogoogle.com/ajax-zoomy-un-ajax-lightbox-para-su-galeria-de-imagenes/</guid>
		<description><![CDATA[Ver demo.
Descargar código.
Podemos encontrar infinidad de librerias para crear en nuestras webs el conocido efecto lightbox que viene a ser la versión 2.0 de los antiguos pop-ups. Me gustaría destacar Zoomy.js que es una librería basada en Prototype y Scriptaculous, desarrollada por Filippo Buratti que permite crear de manera sencilla y rápida una galería de [...]


Artículos relacionados:<ol><li><a href='http://www.hellogoogle.com/efecto_ajax_lightbox_javascript_css/' rel='bookmark' title='Permanent Link: Ajax Lightbox: Una ventana emergente 2.0 en su página web'>Ajax Lightbox: Una ventana emergente 2.0 en su página web</a></li><li><a href='http://www.hellogoogle.com/ajax-accesible-para-google/' rel='bookmark' title='Permanent Link: AJAX Accesible para Google: Posicionar contenido en Ajax'>AJAX Accesible para Google: Posicionar contenido en Ajax</a></li><li><a href='http://www.hellogoogle.com/real-ajax-sexy-curls/' rel='bookmark' title='Permanent Link: Real Ajax Sexy Curls: Una forma elegante de mostrar el código fuente de nuestra página'>Real Ajax Sexy Curls: Una forma elegante de mostrar el código fuente de nuestra página</a></li></ol>]]></description>
			<content:encoded><![CDATA[<div class="captionleft" style="margin:0 10px"><a href="http://www.hellogoogle.com/wp-content/uploads/2008/11/ajax_zoomy.jpg" ><img src='http://www.hellogoogle.com/wp-content/uploads/2008/11/ajax_zoomy.jpg' alt='Ajax lightbox para su galería de imágenes' title="Ajax zoomy: Un Ajax lightbox para su galería de imágenes" /></a></div>
<p><a href="http://www.hellogoogle.com/examples/zoomy/" target="_blank">Ver demo</a>.</p>
<p><a href="http://www.hellogoogle.com/examples/zoomy/zoomy.rar" target="_blank">Descargar código</a>.</p>
<p>Podemos encontrar infinidad de librerias para crear en nuestras webs el conocido efecto lightbox que viene a ser la versión 2.0 de los antiguos pop-ups. Me gustaría destacar <a href="http://www.cssrevolt.com/upload/files/zoomy/" target="_blank">Zoomy.js</a> que es una librería basada en <em>Prototype</em> y <em>Scriptaculous</em>, desarrollada por <a href="http://www.cssrevolt.com/" target="_blank">Filippo Buratti</a> que permite crear de manera sencilla y rápida una galería de imágenes tipo lightbox. Tiene la particularidad de que a pesar de ser un código realmente ligero (menos de 5kb) las imagenes se presentan de manera muy elegante y  los pop-ups pueden ser arrastrados libremente por la pantalla.</p>
<p>Tomando este código como base, he añadido <strong>dos nuevas funcionalidades</strong> que creo pueden serle de mucha utilidad a la hora de desarrollar su propia galería:</p>
<ul>
  <li><strong>Contenido AJax</strong>: Ahora es posible mostrar en la ventana lightbox texto ó html.
    <p><code>&lt;ul class=&quot;<strong>zoomyx</strong>&quot;&gt;<br />
&lt;li&gt;&lt;a href=&quot;<strong>(url del contenido AJAX)</strong>&quot;  style=&quot;background-image: url<strong>(url de la imagen)</strong>&quot; title=&quot;Rubix Cube&quot;&gt;Rubix Cube&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</code></p>
  </li>
  <li><strong>Definir estilos css de la venta lightbox</strong>: Es posible definir en el atributo <em>rel</em> los estilos css (altura, anchura, etc) de la ventana lightbox.    <p><code>&lt;ul class=&quot;<strong>zoomyx</strong>&quot;&gt;<br />
&lt;li&gt;&lt;a href=&quot;<strong>(url del contenido AJAX)</strong>&quot;  rel=&quot;<strong>(estilos css)</strong>' style=&quot;background-image: url<strong>(url de la imágen)</strong>&quot; title=&quot;Rubix Cube&quot;&gt;Rubix Cube&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</code></p>
    <p><u>Nota:</u> A la hora de definir los estilos es necesario seguir la nomenclatura que establece prototype a la hora de utilizar la función <em><a href="http://www.prototypejs.org/api/element/setStyle" target="_blank">setStyle</a>, </em>por ejemplo:</p>
    <p><code>rel=&quot;width:'400px',height:'400px',color:'#fff'&quot;</code></p>
  </li>
</ul>
<p>El resto de funcionalidades de Zoomy se mantienen intactas, puede ver los cambios introducidos comparando la <a href="http://www.cssrevolt.com/upload/files/zoomy/zoomy.js" target="_parent">librería original</a>  con la <a href="http://www.hellogoogle.com/examples/zoomy/zoomy.js">librería ampliada en HelloGoogle.com</a>. Además la nueva librería no sufre ningún incremento de peso (A penas medio kb).</p>
<p>He preparado una <a href="http://www.hellogoogle.com/examples/zoomy/" target="_blank">demo</a> donde puede comprobar online el funcionamiento de la librería con todas sus funcionalidades.</p>
<p>Como siempre, puede <a href="http://www.hellogoogle.com/examples/zoomy/zoomy.rar" target="_blank">descargarse el código completo</a> de la librería y utilizarlo libremente en sus desarrollos. Recuerde que el código es open-source y está protegido por una <a href="http://www.opensource.org/licenses/mit-license.php">Licencia MIT</a>. </p>
<p>Ya no tiene excusa para incluir en su web una verdera galería de imágenes 2.0.</p> Powered by HelloGoogle.com

<p>Artículos relacionados:<ol><li><a href='http://www.hellogoogle.com/efecto_ajax_lightbox_javascript_css/' rel='bookmark' title='Permanent Link: Ajax Lightbox: Una ventana emergente 2.0 en su página web'>Ajax Lightbox: Una ventana emergente 2.0 en su página web</a></li><li><a href='http://www.hellogoogle.com/ajax-accesible-para-google/' rel='bookmark' title='Permanent Link: AJAX Accesible para Google: Posicionar contenido en Ajax'>AJAX Accesible para Google: Posicionar contenido en Ajax</a></li><li><a href='http://www.hellogoogle.com/real-ajax-sexy-curls/' rel='bookmark' title='Permanent Link: Real Ajax Sexy Curls: Una forma elegante de mostrar el código fuente de nuestra página'>Real Ajax Sexy Curls: Una forma elegante de mostrar el código fuente de nuestra página</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.hellogoogle.com/ajax-zoomy-lightbox/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Un emulador de ZX Spectrum en Javascript</title>
		<link>http://www.hellogoogle.com/un-emulador-de-zx-spectrum-en-javascript/</link>
		<comments>http://www.hellogoogle.com/un-emulador-de-zx-spectrum-en-javascript/#comments</comments>
		<pubDate>Wed, 29 Oct 2008 11:07:52 +0000</pubDate>
		<dc:creator>Ignacio Gorostiza</dc:creator>
				<category><![CDATA[Desarrollo web]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.hellogoogle.com/un-emulador-de-zx-spectrum-en-javascript/</guid>
		<description><![CDATA[El único límite es la imaginación, esto es lo que ha debido pensar Matt Westcott  al desarrollar un emulador de ZX Spectrum íntegramente en Javascript. 
Antes de comentar cómo lo ha conseguido, le invito a que lo pruebe,  como verá puede ejecutar algunos juegos, entre ellos el clásico del genial programador español Paco [...]


Artículos relacionados:<ol><li><a href='http://www.hellogoogle.com/formularios_xhtml_css_javascript/' rel='bookmark' title='Permanent Link: Cómo mejorar los formularios HTML con Xhtml, Css y Javascript'>Cómo mejorar los formularios HTML con Xhtml, Css y Javascript</a></li><li><a href='http://www.hellogoogle.com/javascript_no_intrusivo_ejemplo/' rel='bookmark' title='Permanent Link: Javascript no intrusivo, un ejemplo mágico.'>Javascript no intrusivo, un ejemplo mágico.</a></li><li><a href='http://www.hellogoogle.com/real-ajax-sexy-curls/' rel='bookmark' title='Permanent Link: Real Ajax Sexy Curls: Una forma elegante de mostrar el código fuente de nuestra página'>Real Ajax Sexy Curls: Una forma elegante de mostrar el código fuente de nuestra página</a></li></ol>]]></description>
			<content:encoded><![CDATA[<div class="captionleft" style="margin:0 10px"><a href="http://www.hellogoogle.com/wp-content/uploads/2008/10/javascript_zx_spectrum.gif" ><img src='http://www.hellogoogle.com/wp-content/uploads/2008/10/javascript_zx_spectrum.gif' alt='Un emulador de ZX Spectrum en Javascript' title="Un emulador de ZX Spectrum en Javascript" /></a></div><p>El único límite es la imaginación, esto es lo que ha debido pensar <a href="http://matt.west.co.tt/spectrum/jsspeccy/" target="_blank">Matt Westcott</a>  al desarrollar un emulador de ZX Spectrum íntegramente en Javascript. </p>
<p>Antes de comentar cómo lo ha conseguido, le invito a que lo <a href="http://jsspeccy.zxdemo.org/" target="_blank">pruebe</a>,  como verá puede ejecutar algunos juegos, entre ellos el clásico del genial programador español <a href="http://www.meristation.com/v3/des_articulo.php?pic=GEN&amp;id=4824&amp;idj=&amp;idp=&amp;tipo=art&amp;c=1&amp;pos=0">Paco Menéndez</a>, Sir Fred.</p>
<p>¿Sorprendido? Gran parte del secreto, sobre todo en cuanto a lo que la parte gráfica corresponde, reside en las nuevas posibilidades que abre <a href="http://www.w3.org/TR/html5/the-canvas.html" target="_blank">HTML 5</a> ya soportado por algunos navegadores modernos. Si quiere profundizar un poco más en cómo se ha podido desarrollar una idea como ésta en un lenguaje tan limitado, a priori, como javascript, a continuación le muestro  los puntos clave del desarrollo:</p>
<ol>
  <li>Un emulador no es otra cosa que una emulación de un hardware por software. Es decir,  traducir la lógica de un circuito integrado en líneas de código.</li>
  <li>El núcleo o core del emulador ha sido tomado prestado del proyecto <a href="http://fuse-emulator.sourceforge.net/">Fuse</a> que implementa una emulación de la micro ZX80 en el lenguaje C. La sintaxis de C y Javascript es bastante parecida por lo que el trabajo de conversión es relativamente automático.</li>
  <li>Según nos cuenta el propio autor el principal problema lo encontró a la hora de implementar en javascript (que sólo maneja tipos <em>integer</em>) aquellos trozos de código que utilizaban funciones C de bajo nivel para implementar operaciones binarias para emular registros y realizar conversiones entre valores de 8 y 16 bits. </li>
  <li>La interfaz gráfica del Spectrum  se ha emulado en Firefox, Opera y Safari utilizando el <a href="http://en.wikipedia.org/wiki/Canvas_(HTML_element)" target="_blank">elemento <em>Canvas</em> de Javascript</a>.que permite dibujar dinámicamente <em>bitmaps</em> por código. Para el navegador Internet Explore, ya que no soporta <em>Canvas</em>, se ha recurrido a <a href="http://excanvas.sourceforge.net/" target="_blank">ExplorerCanvas</a>.</li>
  <li>Si ya ha probado el emulador, habrá comprobado que el consumo de recursos es muy alto y el rendimiento bastante mejorable. Uno de los principales temas a mejorar es la forma en la que se dibuja cada píxel. Ahora mismo es necesario dibujar un rectángulo de 1x1, pero en un futuro el autor tiene previsto sacar provecho de la interfaz de HTML 5 <em><a href="http://www.w3.org/TR/html5/the-canvas.html#putimagedata" target="_blank">putImageData</a></em>. Este cambio posiblemente permita hacer correr el emulador en tiempo real en un hardware modesto.</li>
</ol>
<p>Por último comentarle que si sus padres (o los reyes magos) en vez de un Spectrum le trajeron un MSX está  de suerte porque también existe <a href="http://jsmsxdemo.googlepages.com/jsmsx.html" target="_blank">un emulador para MSX en javascript</a>. Espero que con este ejemplo  haya sacado conclusiones que pueda poner en práctica en futuros proyectos.</p>


 Powered by HelloGoogle.com

<p>Artículos relacionados:<ol><li><a href='http://www.hellogoogle.com/formularios_xhtml_css_javascript/' rel='bookmark' title='Permanent Link: Cómo mejorar los formularios HTML con Xhtml, Css y Javascript'>Cómo mejorar los formularios HTML con Xhtml, Css y Javascript</a></li><li><a href='http://www.hellogoogle.com/javascript_no_intrusivo_ejemplo/' rel='bookmark' title='Permanent Link: Javascript no intrusivo, un ejemplo mágico.'>Javascript no intrusivo, un ejemplo mágico.</a></li><li><a href='http://www.hellogoogle.com/real-ajax-sexy-curls/' rel='bookmark' title='Permanent Link: Real Ajax Sexy Curls: Una forma elegante de mostrar el código fuente de nuestra página'>Real Ajax Sexy Curls: Una forma elegante de mostrar el código fuente de nuestra página</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.hellogoogle.com/un-emulador-de-zx-spectrum-en-javascript/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Desarrollar y posicionar una tienda web: 1. Elegir la plataforma de e-commerce</title>
		<link>http://www.hellogoogle.com/elegir-la-plataforma-de-e-commerce/</link>
		<comments>http://www.hellogoogle.com/elegir-la-plataforma-de-e-commerce/#comments</comments>
		<pubDate>Mon, 27 Oct 2008 08:39:50 +0000</pubDate>
		<dc:creator>Ignacio Gorostiza</dc:creator>
				<category><![CDATA[Desarrollo web]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[e-commerce]]></category>

		<guid isPermaLink="false">http://www.hellogoogle.com/desarrollar-y-posicionar-una-tienda-web-1-elegir-la-plataforma-de-e-commerce/</guid>
		<description><![CDATA[Éste es el primero de una serie de artículos en los que expondré de manera clara y sencilla todos aquellos puntos que considero clave para  implantar, configurar, desarrollar, optimizar y sacar el máximo rendimiento a una tienda on-line.
Una tienda online además además ser una herramienta de monetización,  puede y debe ser una importante [...]


Artículos relacionados:<ol><li><a href='http://www.hellogoogle.com/foros-opensource/' rel='bookmark' title='Permanent Link: Comparativa de Foros Open Source: Qué foro elegir'>Comparativa de Foros Open Source: Qué foro elegir</a></li><li><a href='http://www.hellogoogle.com/como-elegir-un-dominio/' rel='bookmark' title='Permanent Link: Cómo elegir un nombre de dominio: 25 consejos'>Cómo elegir un nombre de dominio: 25 consejos</a></li><li><a href='http://www.hellogoogle.com/ajax-zoomy-lightbox/' rel='bookmark' title='Permanent Link: Ajax zoomy: Un Ajax lightbox para su galería de imágenes'>Ajax zoomy: Un Ajax lightbox para su galería de imágenes</a></li></ol>]]></description>
			<content:encoded><![CDATA[<div class="caption-full"><a href="http://www.hellogoogle.com/wp-content/uploads/2008/10/e-commerce1.jpg"  target='_blank'><img src='http://www.hellogoogle.com/wp-content/uploads/2008/10/e-commerce1.jpg' alt='Elegir la plataforma de e-commerce' width="720px" title="Desarrollar y posicionar una tienda web: 1. Elegir la plataforma de e commerce" /></a></div><p>Éste es el primero de una serie de artículos en los que expondré de manera clara y sencilla todos aquellos puntos que considero clave para  <strong>implantar</strong>, <strong>configurar</strong>, <strong>desarrollar</strong>, <strong>optimizar</strong> y sacar el máximo <strong>rendimiento </strong>a una tienda on-line.</p>
<p>Una tienda online además además ser una herramienta de monetización,  puede y debe ser una importante <strong>herramienta de promoción</strong> en los buscadores pues permite ofertar a todos nuestros clientes potenciales nuestro catálogo de productos a través de Google.</p>
<p>Como posiblemente ya haya supuesto, hoy en día no es habitual ni práctico acometer un desarrollo de e-commerce desde cero. Existen infinidad de herramientas open-source que nos permiten  montar una tienda on-line en poco tiempo y, además,  de manera gratuita. Tanto en el caso de que usted mismo se encargue de la implantación de la tienda como en el caso de que haya decidido subcontratar su desarrollo, antes de decidirse por una u otra plataforma es recomendable que conocer los<strong> pros y contras</strong> de cada uno de ellas. </p>
<p>Lo más importante a la hora de posicionar la tienda es que la plataforma sea <em>Search Engine Friendly</em> es decir: que trabaje con <em>urls amigables</em>, plantillas en base a <em>xhtml</em> y <em>css</em>, imágenes con información textual alternativa, estructura interna de enlaces robusta, etc. Tenga presente que hay  otros muchos aspectos que debe tener encuenta  como la facilidad de <strong>instalación</strong>, las opciones de <strong>configuración</strong>, los <strong>sistemas se pago</strong>, idiomas y culturas soportadas, documentación y soporte, etc.</p>
<p>A continuación podrá conocer las característica de  las principales plataformas de e-commerce <em>open-source</em>:</p>
<h3>PrestaShop, la tienda 2.0</h3>
<div class="captionfull"><a href="www.prestashop.com/ " target="_blank"><img src="http://www.hellogoogle.com/wp-content/uploads/2008/10/presta.jpg" alt="e-commerce" width="278" height="91"  title="PrestaShop" border="0" /></a></div>
<p><a href="http://www.prestashop.com" target="_blank">Web</a> - <a href="http://www.prestashop.com/en/showcase_demo/" target="_blank">Demo</a> - <a href="http://www.prestashop.com/en/downloads" target="_blank">Descargar</a></p>
<ul>
    <li>Ofrece múltiples funcionalidades propias de Web 2.0 como Ajax, Xhtml, css, etc.</li>
  <li>Menús y navegación muy accesible.</li>
  <li>Es muy sencillo incorporar nuevos módulos para ampliar la plataforma de pago, de envío, encuestas, etc…</li>
  <li>Funcionamiento y manejo de las plantillas similar <strong>Joomla </strong>y a <strong>WordPress</strong>.</li>
  <li>Es <strong>multilenguaje</strong>, permite definir <strong>productos físicos como virtuales</strong> (descargas), también podemos cambiarle los temas, y añadir nuestros propios módulos.</li>
  <li> Los pagos se tramitan de manera segura directamente con tu banco pudiendo seleccionar entre los siguientes <strong>sistemas de pago</strong>: <em>Authorize.net, Tarjeta de Crédito, Contra Reembolso, iPayment, Cheque/Transferencia Bancaria, NOCHEX, PayPal, 2CheckOut, PSiGate, SECPay, Visa Mastercard</em>.</li>
  <li>La instalación y configuración es bastante sencilla, pero la parte de administración puede llegar a ser un poco confusa.</li>
</ul>
<h3>OpenCart, una solución completa para su negocio online</h3>
<div class="captionfull"><img src="http://www.hellogoogle.com/wp-content/uploads/2008/10/logo_open_cart.png" alt="Sistema Para Tiendas En Linea Gratuitos"  class="captionfull" title="Desarrollar y posicionar una tienda web: 1. Elegir la plataforma de e commerce" /></div> 
<p><a href="http://www.opencart.com" target="_blank">Web</a> - <a href="http://www.opencart.com/demonstration/" target="_blank">Demo</a> - <a href="http://www.opencart.com/download/" target="_blank">Descargar</a></p>
<ul>
  <li>Es un carrito de la compra open source implementado en PHP. </li>
  <li>A pesar de ser un sistema bastante reciente cuenta ya con el soporte de una  comunidad importante.<strong></strong></li>
  <li>Ofrece una interfaz intuitiva y fácil de utilizar.</li>
      <li>Optimizado para <strong>buscadores</strong>.</li>
      <li>Es <strong>Multilenguaje</strong>.</li>
      <li>Ofrece Múltiples <strong>sistemas de cobro</strong> como paypal,  Money Order, etc...</li>
      <li>Gestión y envío de <strong>newsletters</strong>.</li>
      <li>Ofrece diversos <strong>reportes</strong>.</li>
      <li>Una característica muy interesante es que los clientes pueden escribir su <strong>opinión</strong> sobre los productos.</li>
</ul>


<h3>VirtueMart, una tienda para Mambo y Joomla</h3>
<div class="captionfull">
<img src="http://www.hellogoogle.com/wp-content/uploads/2008/10/virtuemart1_header.jpg" alt="Sistema Para Carrito de Compras Gratis" width="326" height="81" class="captionfull" title="Desarrollar y posicionar una tienda web: 1. Elegir la plataforma de e commerce" /></div>
<p><a href="http://virtuemart.net/" target="_blank">Web</a> - <a href="http://virtuemart.net/index.php?option=com_content&amp;task=view&amp;id=145&amp;Itemid=97" target="_blank">Demo</a> - <a href="http://virtuemart.net/index.php?option=com_content&amp;task=view&amp;id=54&amp;Itemid=147" target="_blank">Descargar</a></p>
  <ul>
    <li>VirtueMart es una solución de <strong>E-Commerce Open Source</strong> que se integra con los gestores de contenido Joomla y Mambo.</li>
    <li>Desarrollada integramente en  <strong>PHP/MySQL</strong>.</li>
    <li>Es fácil de instalar, configurar y mantener.(Se instala como componente de <a href="http://www.joomla.org" target="_blank">Joomla</a>) </li>
    <li>Puede ser utilizado s&oacute;lo<strong> como un catálogo</strong> y desactivar las funciones de tienda en línea.</li>
    <li> Los productos pueden asignarse a múltiples categorías.</li>
    <li>Productos y Categoría<strong>s ilimitadas</strong></li>
    <li>Posibilidad de vender productos descargables (Mp3, Películas, Videos, etc…)</li>
    <li> Permite aplicar descuentos por productos</li>
    <li>Gesti&oacute;n  de inventario.</li>
    <li>Permite administrar tarifas de envios.</li>
  <li>Ofrece múltiples sistemas de pago: <a href="http://www.2checkout.com/" title="http://www.2checkout.com/" rel="nofollow">2Checkout</a>, <a href="http://www.paypal.com/" title="http://www.paypal.com" rel="nofollow">PayPal (IPN)</a>, <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_payflow-pro-overview-outside" title="https://www.paypal.com/cgi-bin/webscr?cmd=_payflow-pro-overview-outside" rel="nofollow">Payflow Pro</a>, <a href="http://www.authorize.net/" title="http://www.authorize.net/" rel="nofollow">Authorize.net(AIM)</a>, <a href="http://www.authorize.net/solutions/merchantsolutions/merchantservices/echeck/" title="http://www.authorize.net/solutions/merchantsolutions/merchantservices/echeck/" rel="nofollow">eCheck</a>, etc. </li>
  </ul>

<p>&nbsp;</p>
<h3>Magento, una solución e-commerce Flexible y Potente</h3>
<div class="captionfull"><a href="http://www.magentocommerce.com/" title="Magento Open-Source E-Commerce" target="_blank"><img src="http://www.hellogoogle.com/wp-content/uploads/2008/10/magento.gif" alt="e-commerce" width="171" height="47"  title="Magento" border="0" /></a> </div>
<p><a href="http://www.magentocommerce.com/es" target="_blank">Web</a> - <a href="http://www.magentocommerce.com/demo" target="_blank">Demo</a> - <a href="http://www.magentocommerce.com/download" target="_blank">Descargar</a></p>
<ul>
    <li>Soluci&oacute;n open-source  desarrollado en <strong>PHP 5 y MySQL</strong>.</li>
    <li>Es muy flexible y permite m&uacute;ltiples configuraciones.</li>
    <li>Cuenta con el soporte de una gran comunidad de usuarios y por tanto dispone de mucha documentaci&oacute;n y recursos. </li>
    <li>Arquitectura escalar, puede ampliarse f&aacute;cilmente con aplicaciones de terceros. </li>
    <li>Optimizado para buscadores incluyendo friendly URLs. </li>
    <li>Diseño completamente configurable a través de plantillas.</li>
    <li>Solución Enfocada al <strong>Marketing</strong>.</li>
    <li> Gestión de roles y usuarios.</li>
    <li> Ofrece Web Services API para integrarse con aplicaciones third-party. </li>
    <li>Permite definir reglas para aplicar los impuestos.</li>
    <li>Multilenguaje</li>
    <li>Incorpora un gestor de contenido CMS.</li>
  <li>El sistema es muy amigable tanto en la parte front como en la administraci&oacute;n.
  <li>Adaptado a <strong>telefonía móvil (Mobile Commerce)</strong>.  
</ul>
<h3>CubeCart, la elección de más de un millón de usuarios</h3>
<div class="captionfull">
<a href="http://www.cubecart.com/site/home/" title="CubeCart Shopping Cart" target="_blank"><img src="http://www.hellogoogle.com/wp-content/uploads/2008/10/cubecart.gif" alt="e-commerce" width="280" height="55"  title="CubeCart" border="0" /></a></div>
<p><a href="http://www.cubecart.com/" target="_blank">Web</a> - <a href="http://www.cubecart.com/demo/" target="_blank">Demo</a> - <a href="http://www.cubecart.com/downloads/" target="_blank">Descargar</a></p>
<ul>
  <li>Es una soluci&oacute;n muy <strong>popular</strong>.</li>
  <li>La versi&oacute;n V3 es gratuita aunque es necesario incluir un copyright en el pie de la p&aacute;gina. </li>
  <li>La versi&oacute;n de pago V4 incluye funcionalidades extra. </li>
  <li>Existe una gran colecci&oacute;n de plugins con nuevas funcionalidades.</li>
  <li>Incluye un gran n&uacute;mero de formas de pago y env&iacute;o.</li>
  <li>Existe mucha documentaci&oacute;n y foros de debate. </li>
</ul>
<h3>AgoraCart, una solución al alcance de todos</h3>
<div class="captionfull"><a href="http://www.agoracart.com/"><img src="http://www.hellogoogle.com/wp-content/uploads/2008/10/agora-logo-white2.gif" alt="e-commerce" width="286" height="55"  title="AgoraCart" border="0" /></a></div>
<p><a href="http://www.agoracart.com/" target="_blank">Web</a> - <a href="http://www.agoracart.com/demos.htm" target="_blank">Demo</a> - <a href="http://www.agoracart.com/download.htm" target="_blank">Descargar</a></p>
<ul>
  <li>Es un carrito de la compra muy popular desarrollado en Perl/MySQL.</li>
  <li>Dispone de un <strong>gestor de css</strong> para cambiar el aspecto de la tienda f&aacute;cilmente.</li>
  <li>Gran n&uacute;mero de opciones para configurar los productos.</li>
  <li>Gesti&oacute;n de impuestos.</li>
  <li>Ofrece multitud de sustemas de env&iacute;o y pago.</li>
  <li>Permite configurar desde la plantilla base de la tienda como un complejo dise&ntilde;o visual</li>
  <li>Permite modificaciones programáticas.</li>
</ul>
<h3>Zen Cart, la tienda más sencilla de instalar y configurar</h3>
<div class="captionfull"><a href="http://www.zen-cart.com/" title="Zen-Cart The art of E-Commerce" target="_blank"><img src="http://www.hellogoogle.com/wp-content/uploads/2008/10/zen-cart-logo-300x76.jpg" alt="e-commerce" width="300" height="76"  title="Zen-Cart" border="0" /></a> </div>
<p><a href="http://www.zen-cart.com/" target="_blank">Web</a> - <a href="http://www.zen-cart.com/index.php?main_page=showcase&amp;zenid=86377ebff4f0cb59f270e63485ad344f">Demo</a> - <a href="http://sourceforge.net/project/showfiles.php?group_id=83781&amp;package_id=171544" target="_blank">Descargar</a></p>
  <ul>
    <li>Es un carrito de la compra open source, gratuito, muy amigable.</li>
    <li>Est&aacute; desarrollado por un grupo de propietarios de tiendas, programadores y dise&ntilde;adores. </li>
    <li>Orientado al v<strong>endedor y al comprador</strong>, no al desarrollador.</li>
    <li>Gesti&oacute;n de descuentos y cupones. </li>
    <li>Es muy sencillo de  instalar</li>
    <li>Múltiples ventas y descuentos</li>
    <li>Sistema de templates <strong>XHTML</strong></li>
    <li>Incluye un administrador de banners.</li>
    <li>Múltiples opciones de pago y envio.</li>
    <li>Manejo de boletines</li>
</ul>

<h3>OsCommerce, la plataforma más popular</h3>
<div class="captionfull"><a href="http://www.oscommerce.com/" title="osCommerce" target="_blank"><img src="http://www.hellogoogle.com/wp-content/uploads/2008/10/oscommerce.gif" alt="e-commerce" width="211" height="60"  title="osCommerce"  border="0" /></a> </div>
<p><a href="http://www.oscommerce.com/" target="_blank">Web</a> - <a href="http://www.oscommerce.com/shops/demonstration/" target="_blank">Demo</a> - <a href="http://www.oscommerce.com/solutions/downloads" target="_blank">Descargar</a></p>
<ul><li>Este fue uno de los primeros sistemas para tiendas Open Source (<a href="http://es.wikipedia.org/wiki/OsCommerce" target="_blank">nace en el año 2000</a>), esta desarrollando en PHP y bases de datos MySQL.    </li>

  <li>Incluye un gran n&uacute;mero de funcionalidades</li>
<li>Es muy sencillo de instalar y configurar.</li>
<li>Est&aacute; respaldado por una <strong>gran comunidad de usuario</strong>s.</li>
<li>Soporta m&uacute;ltiples accesos concurrentes.</li>
<li>Ofrece a los usuarios la posibilidad de imprimir sus facturas y pedidos. </li>
<li>Permite realizar copias de seguridad de las bases de datos.</li>
<li>El principal problema es que las plantillas est&aacute;n basadas en <strong>tablas</strong>.  </li>
</ul>
<h3>Digistore, una evolución de OsCommerce</h3>
<div class="captionfull"><a href="http://www.oscommerce.com/" title="osCommerce" target="_blank"><img src="http://www.hellogoogle.com/wp-content/uploads/2008/11/digistore.jpg" alt="e-commerce" width="259" height="86"  title="osCommerce"  border="0" /></a> </div>
<p><a href="http://www.digistore.co.nz" target="_blank">Web</a> - <a href="http://www.digistore.co.nz/demo.php" target="_blank">Demo</a> - <a href="http://dashcommerce.org/dashcommerce/featuresmatrix.aspx" target="_blank">Descargar</a></p>
<ul>
  <li>Es una tienda open source <strong>basada en el motor de osCommerce</strong>.</li>
  <li>Incluye mejoras tanto en la administración como en el interfaz público.</li>
  <li>Se configura y administra como un CMS, por lo que no requiere de conocimientos de html ni programación.</li>
  <li> Permite diferentes formas de pago: <a href="http://www.2checkout.com" target="_blank">2checkout</a>, <a href="http://www.paystation.co.nz" target="_blank">Paystation</a>, <a href="http://www.dps.co.nz" target="_blank">DPS</a>, <a href="http://www.paypal.com" target="_blank">Paypal</a>, <a href="http://www.authorize.net" target="_blank">Authorize.net</a></li>
</ul>
<h3>StoreSprite, sencillo y funcional</h3>
<div class="captionfull"><a href="http://www.storesprite.com/" title="StoreSprite" target="_blank"><img src="http://www.hellogoogle.com/wp-content/uploads/2008/10/storesprite.png" alt="e-commerce" width="200" height="52"  title="StoreSprite"  border="0" /></a> </div>
<p><a href="http://www.storesprite.com/" target="_blank">Web</a> - <a href="http://www.storesprite.com/docs/8/storesprite_demonstrations/" target="_blank">Demo</a> - <a href="https://www.storesprite.com/docs/11/storesprite_free_download/" target="_blank">Descargar</a></p>
<ul>
  <li>Carrito de la compra desarrollado en PHP/MySQL.</li>
  <li>La versi&oacute;n gratuita nos obliga a incluir una nota legal en alg&uacute;n lugar de la p&aacute;gina.</li>
  <li>Ofrece un gran n&uacute;mero de opciones como cálculo de impuestos, cálculo autom&aacute;tico de env&iacute;os, valoraci&oacute;n de clientes, y reviews de los productos. </li>
  <li>Tiene la ventaja de ser <strong>muy f&aacute;cil de instalar y configurar</strong>.</li>
</ul>
<h3>Fat.Free.Cart, tan sencillo como copiar y pegar</h3>
<div class="captionfull">
<img src="http://www.hellogoogle.com/wp-content/uploads/2008/10/shopping-cart.gif" alt="Programas Para Tiendas En Linea" title="Desarrollar y posicionar una tienda web: 1. Elegir la plataforma de e commerce" /></div>
<p><a href="http://www.fatfreecart.com/" target="_blank">Web</a> - <a href="http://www.fatfreecart.com/" target="_blank">Demo</a> - <a href="http://www.fatfreecart.com/code.html" target="_blank">Código</a></p>
<ul>
  <li>  <a href="http://www.fatfreecart.com/" target="_blank">FatFreeCart</a> es la versión gratuita del sistema  <a href="http://www.e-junkie.com/ej/shopping-cart.php" target="_blank">E-junkie</a>.  </li>
  <li>Se puede integrar en tu sitio web o blog. </li>
  <li>Tienda<strong> copy-paste</strong>:  No requiere ningún registro,  simplemente es necesario copiar en nuestra web el código que nos proporcionan.. </li>
  <li>Trabaja con dos formas de pago: Paypal y Google Checkout</li>
  <li>Soporta diversas  clases de productos, envíos y tarifas de impuestos.  </li>
</ul>
<h3>SimpleCart, su tienda en 5 minutos</h3>
<div class="captionfull"><div style='background-color:#000;width:290px'><img src='http://www.hellogoogle.com/wp-content/uploads/2008/11/simplecartlogo.png' alt='simpleCart  PayPal' title="Desarrollar y posicionar una tienda web: 1. Elegir la plataforma de e commerce" /></div></div>
<p><a href="http://www.thewojogroup.com/2008/10/simplecartjs-paypal-e-commerce-in-minutes/" target="_blank">Web</a> - <a href="http://thewojogroup.com/simpleCart/" target="_blank">Demo</a> - <a href="http://www.thewojogroup.com/simpleCart/simpleCart.zip" target="_blank">Código</a></p>
<ul>
<li>Es un carrito de la compra realmente ligero (10,5kb) , sencillo y flexible.</li>
<li>Es el sistema idóneo cuando sólo queremos poner a la venta un <strong>pequeño catálogo</strong> de productos de manera rápida.</li>
<li>Está integramente implementado en <strong>javascript</strong>.</li>
<li>Los pagos se gestionan con <strong>Paypal</strong>.</li>
<li>Utiliza cookies para gestionar la persistencia de los elementos del carrito.</li>
<li>No utiliza ningún tipo de bases de datos.</li>
<li>Su instalación y configuración es realmente sencilla, simplemente es necesario tener un conocimiento básico de html.</li>
<li>Es posible ampliar el sistema para que utilice bases de datos y ofrezca funcionalidades extra.</li>
</ul>
<h3>DashCommerce, una tienda OpenSource en ASP .NET</h3>
<div class="captionfull"><img src='http://www.hellogoogle.com/wp-content/uploads/2008/11/dash_commerce.jpg' alt='simpleCart  PayPal' title="Desarrollar y posicionar una tienda web: 1. Elegir la plataforma de e commerce" /></div>
<p><a href="http://dashcommerce.org/" target="_blank">Web</a> - <a href="http://demo.dashcommerce.org/" target="_blank">Demo</a> - <a href="http://dashcommerce.org/files/" target="_blank">Descargar</a></p>
  <ul>
  <li>Es una tienda Open  Source desarrollada en  <strong>ASP.NET  </strong></li>
    <li>Es una solución bastante flexible y robusta.</li>
    <li>Cuenta con el respaldo y soporte de una comunidad open source / .NET</li>
    <li>Incluye todas las funcionalidades que pueden pedírsele a una solución e-commerce: Catálogo de productos, carrito de la compra, gestión de pedidos,múltiples formas de pago, etc.</li>
    <li>Puede ver todas sus características en la siguiente <a href="http://dashcommerce.org/dashcommerce/featuresmatrix.aspx" target="_blank">tabla</a>.</li>
</ul>
<h3>FreeWay, la solución perfecta para vender entradas</h3>
  <div class="captionfull"><img src='http://www.hellogoogle.com/wp-content/uploads/2008/11/logo-freeway.png' alt='simpleCart  PayPal' title="Desarrollar y posicionar una tienda web: 1. Elegir la plataforma de e commerce" /></div>
<p><a href="http://www.openfreeway.org/" target="_blank">Web</a> - <a href="http://www.openfreeway.org/demo.html" target="_blank">Demo</a> - <a href="http://www.openfreeway.org/download.html" target="_blank">Descargar</a></p>
  <ul>
  <li>Plataforma de e-commerce Open Source.</li>
    <li>Permite la integración con Joomla.</li>
    <li>Múltiples funcionalidades como la configuración por descuentos.</li>
    <li>Es una solución perfecta a la hora de vender   <strong>entradas para eventos</strong>, servicios y suscripciones.</li>
  </ul>
  <h3>Oxid, la solución para B2C y B2B</h3>
  <div class="captionfull"><img src='http://www.hellogoogle.com/wp-content/uploads/2008/11/logo-oxid.png' alt='simpleCart  PayPal' title="Desarrollar y posicionar una tienda web: 1. Elegir la plataforma de e commerce" /></div>
<p><a href="http://www.oxid-esales.com/" target="_blank">Web</a> - <a href="http://www.oxid-esales.com/en/products/professional-edition/demo" target="_blank">Demo</a> - <a href="http://www.oxid-esales.com/en/download/open-source-ecommerce-solution-oxid-eshop-community-edition" target="_blank">Descargar</a></p>
  <ul>
  <li>Solución idónea  para <strong>B2C y B2B</strong>. </li>
    <li>Optimizado para <strong>buscadores</strong>: Friendly urls, titulos descriptivos, tags semánticos, etc.</li>
    <li>Ofrece varias  herramientas de  marketing integradas.</li>
    <li> Administración sencilla y amigable.</li>
    <li>Existen varias versiones, las más completas son de pago.</li>
  </ul>
    <h3>WordPress e-Commerce Plugin, una tienda para su blog</h3>
    <div class="captionfull"><img src='http://www.hellogoogle.com/wp-content/uploads/2008/11/wordpress-integration.jpg' alt='simpleCart  PayPal' title="Desarrollar y posicionar una tienda web: 1. Elegir la plataforma de e commerce" /></div>
<p><a href="http://www.instinct.co.nz/e-commerce/" target="_blank">Web</a> - <a href="http://www.orangutan-appeal.org.uk/shop/" target="_blank">Demo</a> - <a href="http://downloads.wordpress.org/plugin/wp-e-commerce.3.6.8RC1.zip" target="_blank">Descargar V3.6.8</a></p>
  <ul>
  <li>Es una solución robusta y contrastada..</li>
    <li>Se instala como un plugin de <strong>WordPress</strong>.</li>
    <li><strong>Redes Sociales</strong>: los productos pueden se importados  en FaceBook MarketPlace y Google Base. </li>
    <li>Puede configurarse el aspecto en base a css y templates.</li>
    <li>Funcionalidad <strong>share this</strong>, para compartir los contenidos en redes sociales y bookmarks.</li>
    <li>Integrado con Google Checkout, Paypal, Authorize.net, Payment Express, y otras formas de pago seguro.</li>
    <li>Cuenta con el respaldo y soporte de una gran comunidad.</li>
  </ul> Powered by HelloGoogle.com

<p>Artículos relacionados:<ol><li><a href='http://www.hellogoogle.com/foros-opensource/' rel='bookmark' title='Permanent Link: Comparativa de Foros Open Source: Qué foro elegir'>Comparativa de Foros Open Source: Qué foro elegir</a></li><li><a href='http://www.hellogoogle.com/como-elegir-un-dominio/' rel='bookmark' title='Permanent Link: Cómo elegir un nombre de dominio: 25 consejos'>Cómo elegir un nombre de dominio: 25 consejos</a></li><li><a href='http://www.hellogoogle.com/ajax-zoomy-lightbox/' rel='bookmark' title='Permanent Link: Ajax zoomy: Un Ajax lightbox para su galería de imágenes'>Ajax zoomy: Un Ajax lightbox para su galería de imágenes</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.hellogoogle.com/elegir-la-plataforma-de-e-commerce/feed/</wfw:commentRss>
		<slash:comments>65</slash:comments>
		</item>
		<item>
		<title>Javascript no intrusivo, un ejemplo mágico.</title>
		<link>http://www.hellogoogle.com/javascript_no_intrusivo_ejemplo/</link>
		<comments>http://www.hellogoogle.com/javascript_no_intrusivo_ejemplo/#comments</comments>
		<pubDate>Fri, 26 Sep 2008 08:35:49 +0000</pubDate>
		<dc:creator>Ignacio Gorostiza</dc:creator>
				<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.hellogoogle.com/javascript_no_intrusivo_ejemplo/</guid>
		<description><![CDATA[
Navegando por Internet he encontrado un curioso ejemplo de javascript no intrusivo que por su sencillez y espectacularidad me gustaría compartir con ustedes. Creo que antes de comenzar con ninguna explicación lo mejor será que lo prueben:


	Para ello vaya a su navegador favorito (google) y accedan a la sección de búsqueda de imágenes.


	Realicen la búsqueda [...]


Artículos relacionados:<ol><li><a href='http://www.hellogoogle.com/un-emulador-de-zx-spectrum-en-javascript/' rel='bookmark' title='Permanent Link: Un emulador de ZX Spectrum en Javascript'>Un emulador de ZX Spectrum en Javascript</a></li><li><a href='http://www.hellogoogle.com/formularios_xhtml_css_javascript/' rel='bookmark' title='Permanent Link: Cómo mejorar los formularios HTML con Xhtml, Css y Javascript'>Cómo mejorar los formularios HTML con Xhtml, Css y Javascript</a></li><li><a href='http://www.hellogoogle.com/ajax-zoomy-lightbox/' rel='bookmark' title='Permanent Link: Ajax zoomy: Un Ajax lightbox para su galería de imágenes'>Ajax zoomy: Un Ajax lightbox para su galería de imágenes</a></li></ol>]]></description>
			<content:encoded><![CDATA[<div class="captionfull"><center><a href="http://www.hellogoogle.com/wp-content/uploads/2008/09/javascript_no_intrusivo.jpg" ><img src='http://www.hellogoogle.com/wp-content/uploads/2008/09/javascript_no_intrusivo.jpg' alt='Javascript no intrusivo, un ejemplo mágico.' title="Javascript no intrusivo, un ejemplo mágico." /></a></center></div>

<p>Navegando por Internet he encontrado un curioso ejemplo de <strong>javascript no intrusivo</strong> que por su sencillez y espectacularidad me gustaría compartir con ustedes. Creo que antes de comenzar con ninguna explicación lo mejor será que lo prueben:</p>

<ul>
	<li>Para ello vaya a su navegador favorito (google) y accedan a la <a href="http://images.google.es/imghp?hl=es&#038;tab=wi" target="_blank">sección de búsqueda de imágenes</a>.</li>


	<li>Realicen la búsqueda que prefieran, por ejemplo "hellogoogle" y pulse en buscar para ver todos los resultados.</li>


	<li>Una vez llegado a este punto copie la siguiente linea de código y péguela en su navegador (Como si se tratara de la dirección de una web):
<p><code>
javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI=document.images; DIL=DI.length; function A(){for(i=0; i-DIL; i++){DIS=DI[ i ].style; DIS.position='absolute'; DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5; DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5}R++}setInterval('A()',5); void(0); </code></p>
</li>

	<li>Pulse enter...¿Sorprendido?</li>
</ul>

<p>Aunque a pesar de su sencillez es un efecto muy espectacular,  no se trata de ningún truco de prestidigitación. La explicación hay que buscarla en el <strong>javascript no intrusivo</strong>, si analizamos el código para ver cómo se consigue este efecto puede sacar algunas conclusiones interesantes:</p>

<ul>
	<li>En primer lugar hay que tener presente que el código javascript se ejecuta <strong>después haber cargado una página web</strong> en el navegador. En nuestro caso era la página de resultados de una búsqueda de imágenes.</li> 
<li>Cuando un navegador web carga una página crea una estructura de objetos en memoria denominada <strong>DOM </strong>(<a href="http://es.wikipedia.org/wiki/DOM" target="_blank">Document Object Model</a>). Esta modelo de objetos puede ser consultado e incluso modificado a través de un lenguaje de scripting como javascript.</li>
<li>Por ejemplo en el array document.images se almacena una referencia a cada imagen del documento:
<code>DI=document.images //Array con las imagenes del DOM</code><li>
<li>Podemos determinar fácilmente la longitud de este Array con el atributo <em>length </em> para poder recorrerlo con un bucle <em>for</em>:
<code> DIL=DI.length
for(i=0; i-DIL; i++)
{
...
}
</code></li>
<li>Los atributos de cada una de las imágenes de la página puede ser modificado con javascript accediendo al DOM:
<code>DIS=DI[ i ].style; // Obtenemos una referencia al atributo style</code> </li>
<li>Así podemos modificar el atributo <em>position</em> que por defecto es <em>block</em> a <em>absolute </em>. Un elemento con posicionamiento <em>absolute </em> puede ser posicionado en cualquier coordinada de la página a través de los atributos <em>top </em>y <em>left</em>:
<code>
DIS.position='absolute'; //Modificamos el posicionamiento a absolute
DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5; //Actualizamos el atributo left
DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5}R++} /Actualizamos el atributo top
</code>
</li>
<li>
Por último se crea de un temporizador con la función <em>setInterval </em>que ejecuta cada 5 milisegundos la <em>función A</em> que es la que realiza el movimiento de las imágenes modificando sus atributos <em>top</em> y <em>left</em>:
<code>setInterval('A()',5); void(0);</code>
</li>
<li>
<u>nota:</u> Aunque no tiene relación directa  con el javascript no intrusivo la función que realiza el movimiento de las imágenes es una función <a href="http://es.wikipedia.org/wiki/H%C3%A9lice_(geometr%C3%ADa)" target="blank">helicoidal</a>. Variando los parámetros de la función podemos conseguir que las imágenes describan otros parábolas:
<code>
javascript:R=0; x1=.01; y1=.005; x2=.025; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300;y5=200;DI=document.getElementsByTagName("img"); DIL=DI.length; function A(){for(i=0; i-DIL; i++){DIS=DI[ i ].style; DIS.position='absolute'; DIS.left=(Math.sin(R*x1+i*x2+x3)*x4+x5)+"px"; DIS.top=(Math.cos(R*y1+i*y2+y3)*y4+y5)+"px"}R++}setInterval('A()',5); void(0);</code>
</li>
</ul>

<p>La utilidad del javascript no intrusivo no se limitan a este tipo de ejemplos curiosos, si no que es una herramienta de gran importancia a la hora de realizar webs accedibles que no dependan de que el navegador del visitante soporte o no javascript. Esto lo veremos sin duda en próximos artículos.</p>

<p>Fuente de la noticia original: This is <a href="http://www.destructoid.com/forum/viewtopic.php?t=1271" target="_blank">freaking insane</a>. </p>

<p>Nota: Este artículo ha sido indexado por Google en 4 minutos, nunca dejarás de sorprenderme baby.</p> Powered by HelloGoogle.com

<p>Artículos relacionados:<ol><li><a href='http://www.hellogoogle.com/un-emulador-de-zx-spectrum-en-javascript/' rel='bookmark' title='Permanent Link: Un emulador de ZX Spectrum en Javascript'>Un emulador de ZX Spectrum en Javascript</a></li><li><a href='http://www.hellogoogle.com/formularios_xhtml_css_javascript/' rel='bookmark' title='Permanent Link: Cómo mejorar los formularios HTML con Xhtml, Css y Javascript'>Cómo mejorar los formularios HTML con Xhtml, Css y Javascript</a></li><li><a href='http://www.hellogoogle.com/ajax-zoomy-lightbox/' rel='bookmark' title='Permanent Link: Ajax zoomy: Un Ajax lightbox para su galería de imágenes'>Ajax zoomy: Un Ajax lightbox para su galería de imágenes</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.hellogoogle.com/javascript_no_intrusivo_ejemplo/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
