Cómo crear nuestro propio feed RSS

¿Qué es un feed RSS?

Un feed es un tipo de documento utilizado para notificar acerca de actualizaciones en fuentes de información. Estos documentos suelen estar compuestos de una serie de entradas resumidas que hacen referencia a su correspondiente artículo o versión extendida. Se basan generalmente en XML y los dos formatos más comunes sonAtom y RSS (Really Simple Syndication).

Los feeds permiten a los usuarios suscribirse a sus blogs o páginas habituales (a través de un agregador) y obtener notificación de las últimas actualizaciones sin tener que visitar todas esas páginas web varias veces al día.

En este artículo vamos a aprender a crear nuestro propio feed RSS basado en el estándar RSS 2.0 para que nuestros lectores puedan estar al corriente de lss nuevas actualizaciones.

¿Y cómo creamos el documento RSS?

Es muy sencillo crear un documento RSS pero conviene primero que conozcáis más o menos qué es un fichero XML.

  • El fichero debe comenzar indicando la versión de XML y la codificación (línea 1). En este caso yo utilizo codificación «iso-8859-1«.
  • A continuacíon añadimos las etiquetas de apertura y cierre <rss></rss> e indicamos la versión del tipo de documento (línea 2) y después tendremos que crear un canal donde vamos a publicar nuestros contenidos (línea 3).
  • Los tres elementos siguientes son obligatorios en todo feed RSS e identifican a nuestra feed y a nuestro sitio web. En primer lugar indicaremos el título de nuestro sitio (línea 4), a continuación especificamos la url donde se puede encontrar nuestra feed RSS (línea 5) y por último una breve descripción de lo que se puede encontrar en nuestro sitio (línea 6).
  • Después de las tres líneas anteriores añadiremos un elemento item (líneas 7 y 14) por cada entrada que vayamos a incluir en nuestro feed. El feed RSS de este sitio contiene en estos momentos los 50 últimos artículos, pero eso ya es cuestión de gustos, quizás sería suficiente con incluir las 20 últimas entradas.
  • Cada item consta de tres elementos obligatorios:
    • title (línas 8 y 15). Que contiene el título del artículo.
    • link (línas 9 y 16). Que contiene el enlace directo a la versión completa del artículo. De esta forma los suscriptores interesados podrán leer el artículo completo.
    • description (línas 10 y 17). Que contiene un resúmen de lo que encontraremos en el artículo.

    Y varios elementos opcionales, de los cuales yo utilizo únicamente dos:

    • pubDate (línas 11 y 18). Que indica la fecha de publicación del artículo y tienen que tener el formato que véis en el ejemplo para que sea interpretado correctamente por todos los agregadores.
    • category (línas 12 y 19). Que contiene el nombre de la categoría al que pertenece el artículo.
  • Una vez que hemos completado nuestra primera versión del feed deberíamos echarle un vistazo a la especificación del estándar RSS 2.0 (en inglés) por si encontráis alguna etiqueta más que os sea de utilidad.
 1. <?xml version="1.0" encoding="iso-8859-1" ?>
 2. <rss version="2.0">
 3.   <channel>
 4.     <title>El nombre de mi sitio web</title>
 5.     <link>http://www.miweb.es/miRss.rss</link>
 6.     <description>La descripción de mi sitio</description>
 7.     <item>
 8.       <title>El título de mi artículo 1</title>
 9.       <link>http://www.miweb.es/miArticulo1.htm</link>
10.       <description>Resúmen del artículo 1</description>
11.       <pubDate>Sun, 16 Sep 2007 11:56:26 GMT</pubDate>
12.       <category>Mi categoria 1</category>
13.     </item>
14.     <item>
15.       <title>El título de mi artículo 1</title>
16.       <link>http://www.miweb.es/miArticulo2.htm</link>
17.       <description>Resúmen del artículo 2</description>
18.       <pubDate>Sun, 13 Sep 2007 15:36:45 GMT</pubDate>
19.       <category>Mi categoria 2</category>
20.     </item>
21.   </channel>
22. </rss>

¡Ya está! ¿Y ahora qué?

Pues ahora sólo nos queda enlazar a nuestro nuevo y flamante feed RSS desde nuestro sitio web para empezar a captar suscriptores. Seguro que estáis deseando poner un iconito como este en vuestra web.

Icono feed RSS   Icono feed RSS 

La forma más correcta de incluir este enlace en nuestro sitio es la siguiente:

<a type="application/rss+xml" href="miRss.rss">Mi imagen o texto</a>

También deberíamos incluir lo siguiente entre las etiquetas <head> de nuestras páginas:

<link rel="alternate" type="application/rss+xml" title="Locualo RSS Feed" href="miRss.rss" />

De esta forma los navegadores (al menos los más utilizados, Firefox e Internet Explorer, en sus últimas versiones) detectarán que nuestro sitio tiene un feed RSS 2.0 y mostrarán un icono a los visitantes de nuestro sitio en la barra de direcciones para suscribirse directamente.

Cómo posicionar su página web en Google

Frecuentemente se piensa que para indexar una página web en Google basta con recurrir al método oficial: acceder a http://www.google.com/intl/es/addurl.html e introducir la dirección de nuestra página web.

Desafortunadamente, en la práctica este método no suele funcionar, pues como advierte el propio Google, no se asegura en cuánto tiempo se realizará la indexación y ni tan siquiera se nos puede garantizar que se realizará. Google recibe miles de sugerencias de direcciones de sitios web al día y no tiene capacidad para rastrear todas al momento.

Si ha publicado un nuevo Site y aún no ha sido indexado en Google, o si tiene previsto publicarlo y le preocupa que no se indexe correctamente, le interesará leer el siguiente artículo en el que detallo 5 sencillos pasos que le ayudarán a indexar su página en Google de manera segura y rápida.

1. Compruebe que su Site es potencialmente indexable por Google.

Cómo puedo comprobarlo:

Para comprobar si su página puede ser indexada, debe utilizar aplicaciones que visualizan su página tal y como lo haría Google. Una de estas aplicaciones es el navegador textual Lynx, también dispone de una versión on-line. Tenga en cuenta que Google sólo podrá acceder al contenido que Lynx le muestre al analizar su web.

Por qué no podría indexar Google mi página web:

Los principales motivos por los que una página web no puede ser indexada son:

  • La página está desarrollada exclusivamente en flash: Aunque Google es capaz de leer e indexar páginas flash a partir de la versión 8, lo cierto es que la incapcidad de flash a la hora de jerarquizar y marcar semánticamente el contenido sigue siendo un lastre a la hora de alcanzar un posicionamiento eficiente.
  • La página contiene frames: Al utilizar frames en el diseño de una web se pierde el concepto de página como unidad de presentación y Google no será capaz de acceder al contenido de nuestra página.
  • Existen redireccionamientos en javascript: Google sólo recorre los enlaces HTML de una página. Puede verse en la necesidad de hacer una redirección inicial para dirigir al visitante a una u otra página en función de ciertos parámetros como procedencia, idioma,etc. Una simple redirección en javascript en la home puede estar impidiendo a Google acceder. Una solución alternativa válida es realizar la redirección en el servidor.
  • Utiliza funcionalidades en DHTML: el HTML dinámico (menús desplegables, efectos visuales, etc) no es siempre accesible por los buscadores, por tanto debe asegurarse de que el contenido principal de sus páginas sea siempre accesible.
  • Trabaja con un gestor de contenido (cms): Si su empresa utiliza un gestor de contenido para gestionar la información de su web, debe asegurarse de que su sistema puede exportar el contenido de manera que los motores de búsqueda puedan indexarlo.

2. Compruebe que Google es capaz de recorrer todas las páginas que conforman el Site.

Cómo puedo comprobarlo:

Podemos recurrir a herramientas especializadas para comprobar la estructura de enlaces de nuestra web. Yo le recomiendo la aplicación gratuita Xenu’s Link Sleuth que nos permite realizar un exhaustivo estudio de la estructura interna del Site.

Por qué no podría Google recorrer mi página web:

Cuando Google visita nuestro site, comienza a recorrer todos los enlaces que encuentra, aquellas secciones a las que no pueda acceder no serán indexadas. Existen diversos motivos por los que Google no puede recorrer nuestro Site:

  • No se puede acceder a todas las secciones desde la home. Tenga en cuenta que la home es el punto de partida hacia el resto de páginas.
  • Existen links rotos.
  • Se utiliza javascript para enlazar a alguna sección o página.

Cómo puedo solucionarlo:

Una manera sencilla de asegurarnos de que todas las secciones son accesibles es crear un mapa web. El mapa web de un sitio es una lista jerarquizada de vínculos a todas las páginas del Site.

3. Compruebe que su Site no incumple el código para Webmasters de Google.

Si su Site ha sido desarrollado u optimizado por una empresa SEO debería tener especial atención en comprobar que no han utilizado técnicas de posicionamiento fraudulentas.

  • Evite los textos y enlaces ocultos.
  • No cree páginas con contenido irrelevante.
  • No cree páginas ni subdominios con contenidos duplicados.
  • No intente hacer cloaking: ofrecer a los buscadores diferente contenido que a sus visitantes con la intención de mejorar su ranking.
  • Cuide la calidad de sus enlaces, evite aquellos que provengan de webs especializadas en la venta de links y de spamers.
  • No utilice programas para realizar altas masivas en buscadores.
  • Evite realizar Sneaky Redirection: conjunto de entre 10 y 20 páginas sin contenido relevante que enlazan entre si. Al acceder a alguna de ellas redirecciona al usuario a otra página distinta.
  • Evite crear doorways: páginas creadas exclusivamente para los motores de búsqueda
  • En resumen, evite los trucos mágicos para mejorar el posicionamiento web de su página en Google.

Tenga presente que si nuestra web es penalizada por Google, recuperar la indexación será una tarea muy complicada y en acasiones imposible.

4. Consiga varios enlaces externos de calidad.

Conseguir enlaces de calidad hacia nuestra página web es sin duda la manera más rápida para ser indexados en Google:

Dé de alta su site en los principales directorios:

Algunos directorios permiten el alta manual y gratuita por lo que son un buen lugar donde conseguir un enlace de calidad. Es muy importante que dé de alta su Site en los siguientes directorios:

Aunque se tiende a pensar lo contrario, los directorios y los buscadores son completamente distintos. Sus enfoques son completamente diferentes ya que registran y presentan la información de forma distinta. Una de las diferencias principales es que los directorios están estructurados temáticamente y requieren que demos de alta nuesta web en la categoría relacionada con nuestros servicios y productos.

Consiga enlaces en sites que ya estén indexados.

Si es el webmaster de una página ya indexada, puede incluir en la home un enlace hacia su nueva web. Hágalo de manera clara, aprovechando la sección de enlaces o incluyendo un banner. Nunca recurra a los pop-ups pues no son accesibles por Google.

Realice campañas de marketing y PR para informar a todos los Sites que podrían estar interesados en que su página está on-line: centros de prensa, portales especializados, páginas del sector, etc.

Tenga en cuenta que un sólo enlace de calidad puede ser suficiente para conseguir la indexación.

5. Crear y dar de alta un Site Map para Google.

Qué es un Google Site Map:

Es un sistema gratuito que nos ofrece Google para que le indiquemos cuáles son las páginas que conforman mi sitio web. De esta manera nos aseguraremos de que Google puede encontrar todos nuestros contenidos de manera sencilla. Además, también nos proporciona estadísticas y resúmenes de posibles errores de indexación.

Cómo se crea un Google Site Map:

Un Google Site map es un fichero que funciona como índice de todas nuestras páginas. Puede tener diversos formatos pero el más habitual es el basado en el estándar XML. Existen muchas herramientas para generar un site map de manera automática. La aplicación xml sitemaps es un generador online y gratuito para webs con menos de 500 páginas.

El proceso para dar de alta el Site Map es sencillo y dispone de mucha documentación en Internet.

Si ha seguido correctamente estos 5 pasos, ahora sólo le queda esperar a que Google encuentre su web e indexe sus páginas. Tenga en cuenta que Google funciona como una araña (si tiene fobia a estos arácnidos piense en otra cosa) que recorre la inmensa tela de webs que conforman Internet.

El tiempo de indexación depende de muchos factores, pero no debería dilatarse más de 15 días. Usted sabrá que la indexación se ha realizado con éxito si al escribir en el campo de búsqueda de Google: site:www.nombre_su_domino_com, el buscador le devuelve todas las páginas que conforman su site.

Espero que este artículo le haya resultado de interés y a partir de ahora consiga posicionar sus páginas de manera segura y rápida. ¿El siguiente paso?, ahora tal vez le interese posicionar su web para una serie de términos de búsqueda concretos; en este caso le animo a que siga con nosotros y que profundice en el mundo SEO con el siguiente artículo de posicionamiento web en Google.

A continuación expongo unos pequeños snippets o trucos a la hora de trabajar con checkboxes y jQuery. En mi opinión, quizá la forma más adecuada de acceder a los checkboxes mediante jQuery es asignándoles una clase. De esta forma podemos actuar sobre los checkboxes de una manera selectiva. Podremos tener más elementos de este tipo en nuestra página web pero sólo actuaremos sobre los que poseen determinada clase. Algunos ejemplos.

Comprobar si un checkbox está marcado

1
$(".ck").is(":checked");

Devuelve true si está marcado y false en cualquier otro caso.

Marcar un checkbox

1
$(".ck").attr("checked","checked");

Desmarcar un checkbox

1
$(".ck").removeAttr("checked");

Marcar todos los checkboxes

1
$(".ck:checkbox:not(:checked)").attr("checked", "checked");

Desmarcar todos los checkboxes

1
$(".ck:checkbox:checked").removeAttr("checked");

Combinando algunos de lo visto anteriormente podemos realizar fácilmente un check que haga la función de marcar/desmarcar todo y que actue sólo sobre los elementos con la clase «ck»:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script language="javascript">
 $(document).ready(function(){
   $(".check_todos").click(function(event){
     if($(this).is(":checked")) {
        $(".ck:checkbox:not(:checked)").attr("checked", "checked");
     }else{
         $(".ck:checkbox:checked").removeAttr("checked");
     }
   });
 });
</script>
<form>
<p><input name="Todos" type="checkbox" value="1" class="check_todos"/>Seleccionar todos</p>
<p>
  <input name="elemento1" type="checkbox" value="1" class="ck"/>elemento 1<br />
  <input name="elemento2" type="checkbox" value="2" class="ck"/>elemento 2<br />
  <input name="elemento3" type="checkbox" value="3" class="ck"/>elemento 3<br />
  <input name="elemento4" type="checkbox" value="4" class="ck"/>elemento 4<br />
  <input name="elemento5" type="checkbox" value="5" class="ck"/>elemento 5</p>
<p>El siguiente check no se verá afectado</p>
    <input name="elemento5" type="checkbox" value="5" />elemento n
</form>

Ver ejemplo en funcionamiento » »

Información reposteada desde http://www.webintenta.com

Cómo instalar un sistema de control de versiones en Windows

Un sistema de control de versiones es una herramienta que ayuda a los desarrolladores de software a gestionar la elaboración de los códigos fuentes de una forma organizada y clara, teniendo presente todos los cambios que se realicen en ellos, por ejemplo se puede saber que desarrollador del equipo de trabajo realizó tal cambio en tal archivo, y qué había antes de ese cambio, así como saber en qué fecha lo realizó.

Subversion
Uno de los sistemas que permite realizar todo esto se llama Subversion, Subversion puede funcionar tanto en sistemas Windows, Linux o Mac, y cuenta con una gran comunidad de desarrolladores que lo soporta, además de ser gratuito y libre. Existen varias aplicaciones cliente que le ayudan al desarrollador a mantener sus códigos de forma ágil y segura, así como varios plugins que se adaptan a los distintos entornos de trabajo como .NET o eclipse.

Subversion es un sistema de control de versión libre y de código abierto. Subversion maneja archivos y directorios, y los cambios realizados en ellos, todo el tiempo. Esto le permite a usted recuperar versiones viejas de sus datos o examinar la historia de cómo sus datos cambiaron. En este recuadro muchas personas piensan de un sistema de control de versiones como una pequeña “máquina del tiempo”. (Collins-Sussman, 2008)
Algunos sistemas de control de versiones son también sistemas Software para la gestión de Configuración (SCM). Estos sistemas son especialmente diseñados para manejar árboles de código fuente y poseen muchas propiedades que son específicos para el desarrollo de software. Subversion sin embargo no es uno de estos sistemas. Es un sistema general que puede ser usado para manejar cualquier colección de archivos.

VisualSVN Server
VisualSVN Server es un paquete que contiene todo lo necesario para instalar, configurar y administrar el servidor de Subversion para el equipo en la plataforma de Windows. Incluye Subversion, Apache y una consola de gestión.
Permite usar cualquier cliente de Subversion para conectarse al servidor VisualSVN o con un navegador web para navegar rápidamente a través de los repositorios.

Pesa menos de 6 MB y puede ser descargado e instalado en un par de clics y además es completamente gratis. Lo puedes descargar de la siguiente dirección: http://www.visualsvn.com/server/

 

Una vez instalado aparecerá la consola en donde podrás crear fácilmente los repositorios que necesitas, simplemente dando clic derecho en la palabra “Repositories” y seleccionando “Create New Repository…” e ingresas el nombre del repositorio (por ejemplo: “repos”). Si vas a llevar varios proyectos en el mismo repositorio entonces no seleccionas la opción crear la estructura por defecto (Trunk, Branches, Tags), caso contrario lo seleccionas, y presionas aceptar.

Si vas a llevar varios proyectos, debes crear la carpeta con el nombre del proyecto (por ejemplo: http://www.proyecto1.com) y luego creas las carpetas:  trunk, branches, y tags en cada proyecto, dando clic derecho en el item y seleccionando create->New Folder

Puedes acceder al repositorio vía navegador, mediante la URL que muestra la consola en el estado del servidor.
También puedes copiar la URL de un repositorio específico dando clic derecho en el repositorio y seleccionando “Copy URL to Clipboard”, esto es  útil para importar el proyecto al repositorio mediante TortoiseSVN.
Debes establecer una contraseña para tu usuario, el cual es el mismo del de inicio de sesión para Windows. También debes crear a los demás usuarios que harán uso del repositorio, se los puede administrar por grupos, esto es especialmente útil si trabajas en un gran equipo.

TortoiseSVN
TortoiseSVN es un cliente Subversion, implementado como una extensión al shell de Windows. Es un software realmente fácil de usar para la revisión de control, control de versiones o control de código fuente.
TortoiseSVN proporciona una agradable y fácil interfaz de usuario para Subversion. Se desarrolla bajo la GPL. Lo que significa que es completamente gratis, incluyendo el código fuente. TortoiseSVN puede utilizarse sin ningún tipo de restricciones.

Puedes descargar el instalador de la página de TortoiseSVN: http://tortoisesvn.net/downloads

Luego de instalar y de haber reiniciado el sistema puedes proceder a importar los espacios de trabajo de los proyectos en el repositorio. Para ello te ubicas en el directorio del proyecto en el explorador de Windows, das clic derecho en la carpeta principal, te ubicas en la opción TortoiseSVN, y le das clic enImport…, tal como en la figura:

Aparecerá una ventana en donde pondremos la URL del repositorio más el nombre del proyecto y la palabra trunk, que es el lugar en donde se llevara la versión de desarrollo (por ejemplo: https://suki:8443/svn/repos/www.proyecto1.com/trunk), además se debe ingresar una breve descripción de lo que hacemos, lo cual será muy útil en el futuro. Te pedirá que te autentiques, ingresas tu nombre de usuario y contraseña de VisualSVN.

Luego se comenzarán a copiar los archivos, carpetas y subcarpetas al repositorio, al terminar presionas OK, Se repite la tarea para todos los proyectos que vayas a importar en el mismo repositorio.
Ahora los archivos ya están en el repositorio pero para trabajar con ellos necesitas crear una copia de trabajo, para lo cual procedes a borrar las carpetas de los proyectos del directorio (o a renombrarlas si no te sientes seguro) y luego presionas clic derecho y seleccionas SVN Checkout…. El checkout te permitirá copiar los archivos del repositorio al directorio en donde estas ubicado, y trabajar sobre él, luego cualquier cambio que hagas en los códigos se verá reflejado en el repositorio, simplemente dando clic derecho sobre un archivo o carpeta y seleccionando SVN Update para actualizar la copia de trabajo o SVN Commit para actualizar tus cambios de código al repositorio.

Aparecerán unos iconos de color verde, significa que estás sincronizado con el repositorio (que tienen lo mismo), si haces un cambio en algún archivo se tornará rojo, lo cual significa que debes hacer commit para actualizar tus cambios. Si agregas archivos o carpetas debes darle clic derecho al archivo o carpeta y seleccionar TortoiseSVN->Add y luego commit. Y si trabajas en equipo, antes de comenzar a realizar cualquier cambio, siempre as update para traer cualquier cambio que tus compañeros de trabajo hayan realizado al repositorio. Nota: para borrar algún archivo das clic derecho y seleccionas TortoiseSVN->Delete ya no debes borrarlos así nada más ya que cuando hagas update aparecerán nuevamente, igual para renombrar, vas a TorotiseSVN->Rename.

En esta dirección podrás encontrar un manual de uso de TortoiseSVN que te recomiendo te vayas leyendo, te ahorrará muchos problemas en el futuro.

http://tortoisesvn.net/docs/release/TortoiseSVN_es/index.html

Como Proteger tus consultas PHP-MySQL del Sql Injection

RePost- http://askpipe99.blogspot.com/2007/10/como-proteger-tus-consultas-php-mysql.html

Como Proteger tus consultas PHP-MySQL del Sql Injection

El Sql-Injection es una gran preocupación a la hora de crear sitios o sistemas web para los desarrolladores, es una tecnica de hacking en donde el atacante puede obtener informacion importante y llegar a corromper o destruir tu base de datos.

Una practica simple puede ayudarte a proteger tu aplicación y por que no decir hasta tu «negocio» de intrusos que no deseas. En PHP es la manera más fácil de transmitir sus datos a través de la función mysql_real_escape_string. Al escapar los caracteres especiales en los campos donde el usuario puede manipular la base de datos, usted evitar ser vulnerables.

Ejemplo :

// This is a vulnerable query.
$query = "SELECT * FROM products WHERE name='$productname'";
mysql_query($query);

// This query is more secure
$query = sprintf("SELECT * FROM products WHERE name='%s'",
mysql_real_escape_string($productname));
mysql_query($query);
La parte más importante de ti mismo es poner fin a la protección de los usuarios de ser capaces de pasar sin alterar la base de datos de manipulación de los caracteres especiales, como comillas simples.
Gracias a  Felipe  por su Publicación en: http://askpipe99.blogspot.com/; visitenlo… 

Exporta Automaticamente DataTable a Microsoft Excel

Hoy quiero mostrarles un ejemplo que me ha servido durante mucho tiempo y aún lo sigo utilizando.
Haremos un ejemplo para exportar un DataTable completo a Excel sin importar la cantidad de columnas filas que este tenga.

Puede que existan muchas formas de realizar esta tarea, pero encuentro realmente útil este método dado que sirve para cualquier versión de excel. Por cuestiones de compatilidad con las nuevas versiones de Excel solo manejaremos 256 columnas.

Lo primero que necesitamos es agregar una referencia a Microsoft.Office.Interop.Excel y lo hacemos de la siguiente forma:

Importar referencia a ExcelImportar referencia a Excel

Importar referencia ExcelImportar referencia Excel

Luego necesitamos un formulario, un botón, un dataGridView y una barra de progreso. Lo podemos disponer como se ve en la imagen:

Formulario aplicación para exportar dataset a excelFormulario aplicación para exportar dataset a excel

Ahora quiero mostrarles todo el código, realmente es sencillo lo más importante es que se adapta a cualquier tabla. Lo van a poder reutilizar sin problemas.

Imports System.Data
Imports System.Data.SqlClient
Imports Microsoft.Office.Interop

Public Class Form1
    Private ds As New DataSet

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '//////////////////////////////////////////////////
        '// Creamos la conexión y llenamos el DataGridView
        '//////////////////////////////////////////////////
        Dim cnn As New SqlConnection("Data Source=localhost\sqlexpress;Initial Catalog=Northwind; Integrated Security=True")
        Dim da As New SqlDataAdapter("Select * from customers", cnn)
        da.Fill(ds)
        DataGridView1.DataSource = ds.Tables(0)
    End Sub

    Private Sub btnExportar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExportar.Click
        '/////////////////////////////
        '// Creamos el Objeto Excel
        '/////////////////////////////
        Dim m_Excel
        Dim objLibroExcel
        Dim objHojaExcel
        m_Excel = CreateObject("Excel.Application")
        objLibroExcel = m_Excel.Workbooks.Add()
        objHojaExcel = objLibroExcel.Worksheets(1)
        objHojaExcel.Name = "Customers"
        objHojaExcel.Visible = Excel.XlSheetVisibility.xlSheetVisible
        objHojaExcel.Activate()

        '/////////////////////////////////////////////////////////
        '// Definimos dos variables para controlar fila y columna
        '/////////////////////////////////////////////////////////
        Dim fila As Integer = 1
        Dim columna As Integer = 1

        '/////////////////////////////////////////////////
        '// Armamos la linea con los títulos de columnas
        '/////////////////////////////////////////////////
        objHojaExcel.Range("A1").Select()
        For Each dc In ds.Tables(0).Columns
            objHojaExcel.Range(nombreColumna(columna) & 1).Value = dc.ColumnName
            columna += 1
        Next
        fila += 1

        '/////////////////////////////////////////////
        '// Le damos formato a la fila de los títulos
        '/////////////////////////////////////////////
        Dim objRango As Excel.Range = objHojaExcel.Range("A1:" & nombreColumna(ds.Tables(0).Columns.Count) & "1")
        objRango.Font.Bold = True
        objRango.Cells.Interior.ColorIndex = 35

        objRango.Cells.Borders(Excel.XlBordersIndex.xlDiagonalDown).LineStyle = Excel.XlLineStyle.xlLineStyleNone
        objRango.Cells.Borders(Excel.XlBordersIndex.xlDiagonalUp).LineStyle = Excel.XlLineStyle.xlLineStyleNone
        objRango.Cells.Borders(Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Excel.XlLineStyle.xlLineStyleNone
        objRango.Cells.Borders(Excel.XlBordersIndex.xlEdgeRight).LineStyle = Excel.XlLineStyle.xlContinuous
        objRango.Cells.Borders(Excel.XlBordersIndex.xlEdgeTop).LineStyle = Excel.XlLineStyle.xlContinuous
        objRango.Cells.Borders(Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Excel.XlLineStyle.xlContinuous

        '//////////////////////////////////////////
        '// Cargamos todas las filas del datatable
        '//////////////////////////////////////////
        ProgressBar1.Maximum = ds.Tables(0).Rows.Count
        columna = 1
        ProgressBar1.Value = 0
        For Each dr In ds.Tables(0).Rows
            columna = 1
            For Each dc In ds.Tables(0).Columns
                objHojaExcel.Range(nombreColumna(columna) & fila).Value = dr(dc.ColumnName)
                columna += 1
            Next
            fila += 1
            ProgressBar1.Value += 1
        Next

        '//////////////////////////////////////
        '// Ajustamos automaticamente el ancho
        '// de todas las columnas utilizada
        '//////////////////////////////////////
        objRango = objHojaExcel.Range("A1:" & nombreColumna(ds.Tables(0).Columns.Count) & ds.Tables(0).Rows.Count.ToString)
        objRango.Select()
        objRango.Columns.AutoFit()

        '/////////////////////////////////////
        '// Le decimos a Excel que se muestre
        '/////////////////////////////////////
        MsgBox("Exportación a Excel completa", MsgBoxStyle.Information, ".:: solovb.net ::.")
        m_Excel.Visible = True

    End Sub

    Public Function nombreColumna(ByVal numero As Integer) As String
        Dim columna(256) As String

        columna(1) = "A"
        columna(2) = "B"
        columna(3) = "C"
        columna(4) = "D"
        columna(5) = "E"
        columna(6) = "F"
        columna(7) = "G"
        columna(8) = "H"
        columna(9) = "I"
        columna(10) = "J"
        columna(11) = "K"
        columna(12) = "L"
        columna(13) = "M"
        columna(14) = "N"
        columna(15) = "O"
        columna(16) = "P"
        columna(17) = "Q"
        columna(18) = "R"
        columna(19) = "S"
        columna(20) = "T"
        columna(21) = "U"
        columna(22) = "V"
        columna(23) = "W"
        columna(24) = "X"
        columna(25) = "Y"
        columna(26) = "Z"
        columna(27) = "AA"
        columna(28) = "AB"
        columna(29) = "AC"
        columna(30) = "AD"
        columna(31) = "AE"
        columna(32) = "AF"
        columna(33) = "AG"
        columna(34) = "AH"
        columna(35) = "AI"
        columna(36) = "AJ"
        columna(37) = "AK"
        columna(38) = "AL"
        columna(39) = "AM"
        columna(40) = "AN"
        columna(41) = "AO"
        columna(42) = "AP"
        columna(43) = "AQ"
        columna(44) = "AR"
        columna(45) = "AS"
        columna(46) = "AT"
        columna(47) = "AU"
        columna(48) = "AV"
        columna(49) = "AW"
        columna(50) = "AX"
        columna(51) = "AY"
        columna(52) = "AZ"
        columna(53) = "BA"
        columna(54) = "BB"
        columna(55) = "BC"
        columna(56) = "BD"
        columna(57) = "BE"
        columna(58) = "BF"
        columna(59) = "BG"
        columna(60) = "BH"
        columna(61) = "BI"
        columna(62) = "BJ"
        columna(63) = "BK"
        columna(64) = "BL"
        columna(65) = "BM"
        columna(66) = "BN"
        columna(67) = "BO"
        columna(68) = "BP"
        columna(69) = "BQ"
        columna(70) = "BR"
        columna(71) = "BS"
        columna(72) = "BT"
        columna(73) = "BU"
        columna(74) = "BV"
        columna(75) = "BW"
        columna(76) = "BX"
        columna(77) = "BY"
        columna(78) = "BZ"
        columna(79) = "CA"
        columna(80) = "CB"
        columna(81) = "CC"
        columna(82) = "CD"
        columna(83) = "CE"
        columna(84) = "CF"
        columna(85) = "CG"
        columna(86) = "CH"
        columna(87) = "CI"
        columna(88) = "CJ"
        columna(89) = "CK"
        columna(90) = "CL"
        columna(91) = "CM"
        columna(92) = "CN"
        columna(93) = "CO"
        columna(94) = "CP"
        columna(95) = "CQ"
        columna(96) = "CR"
        columna(97) = "CS"
        columna(98) = "CT"
        columna(99) = "CU"
        columna(100) = "CV"
        columna(101) = "CW"
        columna(102) = "CX"
        columna(103) = "CY"
        columna(104) = "CZ"
        columna(105) = "DA"
        columna(106) = "DB"
        columna(107) = "DC"
        columna(108) = "DD"
        columna(109) = "DE"
        columna(110) = "DF"
        columna(111) = "DG"
        columna(112) = "DH"
        columna(113) = "DI"
        columna(114) = "DJ"
        columna(115) = "DK"
        columna(116) = "DL"
        columna(117) = "DM"
        columna(118) = "DN"
        columna(119) = "DO"
        columna(120) = "DP"
        columna(121) = "DQ"
        columna(122) = "DR"
        columna(123) = "DS"
        columna(124) = "DT"
        columna(125) = "DU"
        columna(126) = "DV"
        columna(127) = "DW"
        columna(128) = "DX"
        columna(129) = "DY"
        columna(130) = "DZ"
        columna(131) = "EA"
        columna(132) = "EB"
        columna(133) = "EC"
        columna(134) = "ED"
        columna(135) = "EE"
        columna(136) = "EF"
        columna(137) = "EG"
        columna(138) = "EH"
        columna(139) = "EI"
        columna(140) = "EJ"
        columna(141) = "EK"
        columna(142) = "EL"
        columna(143) = "EM"
        columna(144) = "EN"
        columna(145) = "EO"
        columna(146) = "EP"
        columna(147) = "EQ"
        columna(148) = "ER"
        columna(149) = "ES"
        columna(150) = "ET"
        columna(151) = "EU"
        columna(152) = "EV"
        columna(153) = "EW"
        columna(154) = "EX"
        columna(155) = "EY"
        columna(156) = "EZ"
        columna(157) = "FA"
        columna(158) = "FB"
        columna(159) = "FC"
        columna(160) = "FD"
        columna(161) = "FE"
        columna(162) = "FF"
        columna(163) = "FG"
        columna(164) = "FH"
        columna(165) = "FI"
        columna(166) = "FJ"
        columna(167) = "FK"
        columna(168) = "FL"
        columna(169) = "FM"
        columna(170) = "FN"
        columna(171) = "FO"
        columna(172) = "FP"
        columna(173) = "FQ"
        columna(174) = "FR"
        columna(175) = "FS"
        columna(176) = "FT"
        columna(177) = "FU"
        columna(178) = "FV"
        columna(179) = "FW"
        columna(180) = "FX"
        columna(181) = "FY"
        columna(182) = "FZ"
        columna(183) = "GA"
        columna(184) = "GB"
        columna(185) = "GC"
        columna(186) = "GD"
        columna(187) = "GE"
        columna(188) = "GF"
        columna(189) = "GG"
        columna(190) = "GH"
        columna(191) = "GI"
        columna(192) = "GJ"
        columna(193) = "GK"
        columna(194) = "GL"
        columna(195) = "GM"
        columna(196) = "GN"
        columna(197) = "GO"
        columna(198) = "GP"
        columna(199) = "GQ"
        columna(200) = "GR"
        columna(201) = "GS"
        columna(202) = "GT"
        columna(203) = "GU"
        columna(204) = "GV"
        columna(205) = "GW"
        columna(206) = "GX"
        columna(207) = "GY"
        columna(208) = "GZ"
        columna(209) = "HA"
        columna(210) = "HB"
        columna(211) = "HC"
        columna(212) = "HD"
        columna(213) = "HE"
        columna(214) = "HF"
        columna(215) = "HG"
        columna(216) = "HH"
        columna(217) = "HI"
        columna(218) = "HJ"
        columna(219) = "HK"
        columna(220) = "HL"
        columna(221) = "HM"
        columna(222) = "HN"
        columna(223) = "HO"
        columna(224) = "HP"
        columna(225) = "HQ"
        columna(226) = "HR"
        columna(227) = "HS"
        columna(228) = "HT"
        columna(229) = "HU"
        columna(230) = "HV"
        columna(231) = "HW"
        columna(232) = "HX"
        columna(233) = "HY"
        columna(234) = "HZ"
        columna(235) = "IA"
        columna(236) = "IB"
        columna(237) = "IC"
        columna(238) = "ID"
        columna(239) = "IE"
        columna(240) = "IF"
        columna(241) = "IG"
        columna(242) = "IH"
        columna(243) = "II"
        columna(244) = "IJ"
        columna(245) = "IK"
        columna(246) = "IL"
        columna(247) = "IM"
        columna(248) = "IN"
        columna(249) = "IO"
        columna(250) = "IP"
        columna(251) = "IQ"
        columna(252) = "IR"
        columna(253) = "IS"
        columna(254) = "IT"
        columna(255) = "IU"
        columna(256) = "IV"

        Return columna(numero)
    End Function
End Class

Este método me ha servido mucho y espero que a ustedes también… por favor dejen sus comentarios.

 

TOMADO ORIGINALMENTE DE: http://www.solovb.net/index.php/2009/11/22/exporta-automaticamente-datatable-a-microsoft-excel/

Formato de Fecha y Hora con SQL SERVER 2005

Para dar formato especifico de fecha y hora en sql server se debe hacer una conversion del tipo datetime a varchar, pero no solamente es cuestion hacer la conversion simple si no adicionalmente pasar el parametro del formato que se desea obtener de dicha convercion. Aqui se muestra el cuadro de conversiones para fechas.

 

Sin el siglo (aa) (1) Con el siglo ?(aaaa) Estándar Entrada/salida (3)
0 o 100 (1,2) Valor predeterminado mes dd aaaa hh:mia.m. (o p. m.)
1 101 EE.UU. mm/dd/aaaa
2 102 ANSI aa.mm.dd
3 103 Británico/Francés dd/mm/aaaa
4 104 Alemán dd.mm.aa
5 105 Italiano dd-mm-aa
6 106 (1) dd mes aa
7 107 (1) Mes dd, aa
8 108 hh:mi:ss
9 o 109 (1,2) Valor predeterminado + milisegundos mes dd aaaa hh:mi:ss:mmma.m. (o p. m.)
10 110 EE.UU. mm-dd-aa
11 111 JAPÓN aa/mm/dd
12 112 ISO aammdd

aaaammdd

13 o 113 (1,2) Europeo predeterminado + milisegundos dd mes aaaa hh:mi:ss:mmm(24h)
14 114 hh:mi:ss:mmm(24h)
20 o 120 (2) ODBC canónico aaaa-mm-dd hh:mi:ss(24h)
21 o 121 (2) ODBC canónico (con milisegundos) aaaa-mm-dd hh:mi:ss.mmm(24h)
126 (4) ISO8601 aaaa-mm-ddThh:mi:ss.mmm (sin espacios)
127(6, 7) ISO8601 con zona horaria Z. aaaa-mm-ddThh:mi:ss.mmmZ

(sin espacios)

130 (1, 2) Hijri (5) dd mes aaaa hh:mi:ss:mmma.m.
131 (2) Hijri (5) dd/mm/aa hh:mi:ss:mmma.m.

Ejemplo

SELECT CONVERT(VARCHAR(10), GETDATE(), 103) AS 'FECHA'
-- Muestra la fecha con formato dd/mm/aaaa

SELECT CONVERT(VARCHAR(8), GETDATE(), 108) AS 'HORA'
-- Muestra la fecha con formato hh:mi:ss

Link Oficial
http://technet.microsoft.com/es-es/library/ms187928.aspx

Incrustar fuentes en tu web

con la maravilla que es CSS3 podemos incrustar la tipografía que deseemos en nuestro sitio. Aca el código que debera ir en tu CSS

@font-face {
font-family: «Kimberley»;
src: url(http://www.princexml.com/fonts/larabie/ »
kimberle.ttf) format(«truetype»);
}
h1 { font-family: «Kimberley», sans-serif }

suerte.

Cliente FTP

VB.NET

Con la siguiente clase de ejemplo vamos a poder realizar operaciones de cliente FTP. Podremos hacer los siguientes tipos de petición:

  • Eliminar un fichero
  • Comprobar si existe un objeto
  • Crear un directorio
  • Subir un fichero

El método subirFichero recibe tres argumentos:

  • fichero: Ruta local del fichero
  • destino: Dirección FTP del destino del fichero. Ej: «ftp://direccion_de_ejemplo/directorio/fichero.txt«
  • dir: Dirección FTP del directorio donde se almacenará el fichero. Ej: «ftp://direccion_de_ejemplo/directorio«

El código es el siguiente:

Imports System.Net.FtpWebRequest
Imports System.Net
Imports System.IO
Public Class Ftp

Dim host, user, pass As String

Public Sub New(ByVal host As String, ByVal user As String, ByVal pass As String)
Me.host = host
Me.user = user
Me.pass = pass
End Sub

Public Function eliminarFichero(ByVal fichero As String) As String
Dim peticionFTP As FtpWebRequest

‘ Creamos una petición FTP con la dirección del fichero a eliminar
peticionFTP = CType(WebRequest.Create(New Uri(fichero)), FtpWebRequest)

‘ Fijamos el usuario y la contraseña de la petición
peticionFTP.Credentials = New NetworkCredential(user, pass)

‘ Seleccionamos el comando que vamos a utilizar: Eliminar un fichero
peticionFTP.Method = WebRequestMethods.Ftp.DeleteFile
peticionFTP.UsePassive = False

Try
Dim respuestaFTP As FtpWebResponse
respuestaFTP = CType(peticionFTP.GetResponse(), FtpWebResponse)
respuestaFTP.Close()
‘ Si todo ha ido bien, devolvemos String.Empty
Return String.Empty
Catch ex As Exception
‘ Si se produce algún fallo, se devolverá el mensaje del error
Return ex.Message
End Try
End Function

Public Function existeObjeto(ByVal dir As String) As Boolean
Dim peticionFTP As FtpWebRequest

‘ Creamos una peticion FTP con la dirección del objeto que queremos saber si existe
peticionFTP = CType(WebRequest.Create(New Uri(dir)), FtpWebRequest)

‘ Fijamos el usuario y la contraseña de la petición
peticionFTP.Credentials = New NetworkCredential(user, pass)

‘ Para saber si el objeto existe, solicitamos la fecha de creación del mismo
peticionFTP.Method = WebRequestMethods.Ftp.GetDateTimestamp

peticionFTP.UsePassive = False

Try
‘ Si el objeto existe, se devolverá True
Dim respuestaFTP As FtpWebResponse
respuestaFTP = CType(peticionFTP.GetResponse(), FtpWebResponse)
Return True
Catch ex As Exception
‘ Si el objeto no existe, se producirá un error y al entrar por el Catch
‘ se devolverá falso
Return False
End Try
End Function

Public Function creaDirectorio(ByVal dir As String) As String
Dim peticionFTP As FtpWebRequest

‘ Creamos una peticion FTP con la dirección del directorio que queremos crear
peticionFTP = CType(WebRequest.Create(New Uri(dir)), FtpWebRequest)

‘ Fijamos el usuario y la contraseña de la petición
peticionFTP.Credentials = New NetworkCredential(user, pass)

‘ Seleccionamos el comando que vamos a utilizar: Crear un directorio
peticionFTP.Method = WebRequestMethods.Ftp.MakeDirectory

Try
Dim respuesta As FtpWebResponse
respuesta = CType(peticionFTP.GetResponse(), FtpWebResponse)
respuesta.Close()
‘ Si todo ha ido bien, se devolverá String.Empty
Return String.Empty
Catch ex As Exception
‘ Si se produce algún fallo, se devolverá el mensaje del error
Return ex.Message
End Try
End Function

Public Function subirFichero(ByVal fichero As String, ByVal destino As String, _
ByVal dir As String) As String
Dim infoFichero As New FileInfo(fichero)

Dim uri As String
uri = destino

‘ Si no existe el directorio, lo creamos
If Not existeObjeto(dir) Then
creaDirectorio(dir)
End If

Dim peticionFTP As FtpWebRequest

‘ Creamos una peticion FTP con la dirección del fichero que vamos a subir
peticionFTP = CType(FtpWebRequest.Create(New Uri(destino)), FtpWebRequest)

‘ Fijamos el usuario y la contraseña de la petición
peticionFTP.Credentials = New NetworkCredential(user, pass)

peticionFTP.KeepAlive = False
peticionFTP.UsePassive = False

‘ Seleccionamos el comando que vamos a utilizar: Subir un fichero
peticionFTP.Method = WebRequestMethods.Ftp.UploadFile

‘ Especificamos el tipo de transferencia de datos
peticionFTP.UseBinary = True

‘ Informamos al servidor sobre el tamaño del fichero que vamos a subir
peticionFTP.ContentLength = infoFichero.Length

‘ Fijamos un buffer de 2KB
Dim longitudBuffer As Integer
longitudBuffer = 2048
Dim lector As Byte() = New Byte(2048) {}

Dim num As Integer

‘ Abrimos el fichero para subirlo
Dim fs As FileStream
fs = infoFichero.OpenRead()

Try
Dim escritor As Stream
escritor = peticionFTP.GetRequestStream()

‘ Leemos 2 KB del fichero en cada iteración
num = fs.Read(lector, 0, longitudBuffer)

While (num <> 0)
‘ Escribimos el contenido del flujo de lectura en el
‘ flujo de escritura del comando FTP
escritor.Write(lector, 0, num)
num = fs.Read(lector, 0, longitudBuffer)
End While

         escritor.Close()
fs.Close()
' Si todo ha ido bien, se devolverá String.Empty
Return String.Empty
Catch ex As Exception
' Si se produce algún fallo, se devolverá el mensaje del error
Return ex.Message
End Try
End Function
End Class

El método subirFichero recibe tres argumentos:

Posicionamiento Web: Cómo posicionar una web gratis

Muy a menudo recibo e-mails de empresas solicitando posicionar su página web para un criterio determinado que consideran clave para conseguir visitantes potencialmente interesados en sus productos. Lo cierto es que todavía existen muchas dudas sobre el proceso de posicionamiento web, que erróneamente se considera misterioso, complicado y solamente al alcance de unas pocos expertos. Le aseguro que la realidad es bien distinta y que si sigue los consejos de este artículo, usted mismo podrá posicionar muy fácilmente su página web para todos los criterios que considere relevantes.

¿Por qué criterios me tengo que posicionar?

Una campaña de posicionamiento será muy poco fructífera si previamente no se realizó un estudio de los criterios de búsqueda que queremos abordar. No hace falta ser un experto en posicionamiento para elegir los criterios más relevantes para su web, simplemente debe realizar un ejercicio de imaginación y ponerse por un instante en la piel de sus clientes potenciales.

Si usted es el propietario de una web que vende paraguas pregúntese por ejemplo ¿Qué escribirían en Google mis clientes si quisieran comprar un paraguas? Seguramente su primera opción serían criterios como: “comprar paraguas” o “venta de paraguas”. Ahora piénselo un poco más detenidamente, es un poco extraño que este tipo de términos tan generales atraigan las visitas de clientes verdaderamente potenciales. Una señora que navega por internet en busca del paraguas de sus sueños, no recurrirá a términos tan generales, en cambio sería sensato pensar que optaría por criterios más específicos como: “paraguas de carolina herrera”, “paraguas de firma” o “paraguas de diseño”. Además debe tener en cuenta que posicionar su página web será más sencillo, cuanto menos general sean los criterios elegidos, esto es lo que se denomina “long tail” en el mundo SEO.

Existen herramientas especializadas en el análisis de criterios de búsqueda que le pueden ayudar a tomar una decisión. Una de ellas es la herramienta para palabras clave de Google AddWords. Se trata de una herramienta online que le permite obtener a partir de un criterio conocido nuevas ideas sobre palabras clave relevantes para su negocio. Utiliza la base de conocimientos de Google por lo que le garantiza una gran fiablidad.

¿Y ahora…qué tengo qué hacer para posicionarme?

1. Seo CopyRighting: mime el contenido de su página web.

Tras un pormenorizado estudio hemos decidido que queremos posicionar nuestra página web por el criterio:”Cunas para bebés gordinflones“. Para conseguir un posicionamiento por este término, es imprescindible que contemos con un buen contenido. Es muy importante que mimemos el contenido de nuestra página, sólo es posible alcanzar un posicionamiento óptimo con un contenido de calidad:

  • Cuide la ortografía y la gramática de manera minuciosa.
  • No meta paja: el contenido de su web debe ser conciso y claro, no esriba por escribir. Es preferible disponer de un par de párrafos interesantes que varias páginas.
  • Despierte el interés de la comunidad web: redacte la información de manera amena en las descripciones y sea preciso en los detalles técnicos.
  • Incluya toda la información que sus clientes pueden demandar: precios, imágenes, enlaces relacionados, etc.
  • Cuide la densidad del término a posicionar dentro de la página: Debe procurar que la frase “cunas para bebes gordinflones” aparezca dentro del contenido. No debe meterlo nunca con calzador
  • Utilice sinónimos y palabras relacionadas con el término a posicionar.

2. Tags de cabecera y tags semánticos.

Ahora es el momento de codificar su contenido en HTML para conseguir la mayor repercusión en Google. Google no lee texto plano sino código html, por este motivo es muy importante que conozca la mejor forma de presentarselo:

  • Utilice tags de cabecera H1, H2, H3…Hn para establecer un órden jerárquico en el documento. Google otorga mayor relevancia al texto cuanto menor el orden del tag H que la contiene. De esta manera deberíamos definir el título principal con H1, un subtitular con H2 y utilizar esta metodología para ordenar la información de todo el documento. Un ejemplo sería:<h1>Las nuevas cunas para bebes gordinflones, una nueva manera de entender el descanso</h1><h2>Si su bebe ya no cabe en la cuna que le dejó su hermana, puede que haya llegado el momento de renovarla. Descubra las nuevas cunas ergonómicas desarrolladas con fibra de vidrio y látex que garantizan el descanso de su tocinillo de cielo.</h2>
  • Incluya cada párrafo dentro de un tag <P> y evite los saltos de línea innecesarios.
  • Destaque la información en su página con tags semánticos <STRONG> </EM>. Se denominan tagas semánticos porque otorgan un significado al texto. Strong (Fuerte) y emphasize (Enfatizar) se utiliza para indicar a Google que el texto tienen especial relevancia.
  • Incluya en todas sus imágenes un atributo alt, con su descripción. Debe tener en cuenta que Google no es capaz de reconcer la información visual.
  • Todo lo que dije anteriormente es cierto pero debe aplicarlo con moderación y elegancia. Si después de leer los puntos anteriores tenía la tentanción de llenar su documento de <H1>s y <STRONG>s, olvídelo. Su página será ininteligible y muy posiblemente Google la considere fraudulenta y la ignore completamente. Aquí, como en la mayoría de situaciones de la vida, la virtud se encuentra en utilizar las cosas en su justa medida.

3. Optimice los títulos

El título de la página que va incluido en el tag <TITLE> es la principal fuente de información sobre la página para Google. Debe tratarlo con especial mimo y estudiarlo con detenimiento pues su contenido será la información que encontrarán sus visitantes en la página de resultados de Google (SERP).

En el caso de nuestra página de ejemplo podríamos tener el siguiente título:

<TITLE>Cunas para bebés gordinflones, todos los artículos para el recién nacido.</TITLE>

En el siguiente artículo puede conocer todo lo que necesita para optimizar los títulos de su página web.

4. Optimice la URL de la página web

La ingeniería de urls es una de las piezas claves del posicionamiento web. Una url debe ser descriptiva para ayudar al posicionamiento, pero a la vez escueta y clara pero facilitar su uso por los usuarios. No existe una url perfecta para posicionar un criterio, pero los siguientes consejos le ayudaran a tomar una decisión:

  • Incluya las palabras clave dentro de la url.
  • Puede utilizar los caracteres “_” “-” para separar las palabras. Personalmente prefiero el guión bajo “_”, pues creo que dificulta menos la lectura.
  • Evite urls demasiado largas o demasiado cortas.
  • Puede jerarquizar la url: Incluya en el nombre del directorio el término más genérico (pejm: cunas) y en el nombre del archivo las características (pejm: para bebés gordinflones)pejm: /cunas/bebes_gorninflones.htm
  • Puede trabajar sólo con directorios: Inluya en el nombre del directorio los términos más relevantes del criterio a posicionar y utilice un nombre de archivo genérico:pejm: /cunas_bebes_gorninflones/index.htm
  • No compre un dominio para posicionar una web. El dominio http://www.cunas_para_bebes_gorndinflones.com no le ayudará a posicionar su web antes ni mejor, por el contrario conseguirá que las direcciones de su web sean inmanejables y complicará muchísimo la labor de sus visitantes. En el siguiente artículo encontrará algunos consejos para elegir un buen nombre de dominio.

5. Cuide sus meta contenidos.

Si bien es cierto que el contenido de los META Keywords y Description no tienen especial relevancia en el algoritmo de indexación en Google, no debemos pasar por alto que juegan un papel importante en el desarrollo de nuestra web. Por ejemplo, Google utilizará el contenido del META Description para describir nuestra página en su página de resultados. Puede leer más la información sobre los META Tags en el siguiente artículo.

En el ejemplo que nos ocupa podríamos tener los siguientes METAS:

<meta name="keywords" content="artículos para bebés, cunas, bebes gordinflones, salud del bebe, bienestar del bebe, crecer sano, bebes y sobrepeso" >

<meta name="description" content="En esta página podrá encontrar el mayor catálogo de cunas para bebés gordinflones de Internet"/>

6. Consiga enlaces

Los enlaces deben ser una consecuencia directa de una página web de calidad. Los enlaces son un buen medidor del interés que su página despertó en la comunidad web, y a la vez, los enlaces consiguen que nuestra web llegue a un sector cada vez mayor de gente aumentando su popularidad.

  • Dé de alta su web en los principales buscadores y directorios. En este artículo puede encontrar más información al respecto.
  • Escriba a los webmasters de Sites relacionados con sus productos y servicios para notificarles la existencia de su página.
  • Incluya en su web enlaces hacia webs de calidad que le hayan gustado y que considere interesantes para sus propios visitantes.
  • No compre nunca enlaces y evite los links desde Site poco claros o fraudulentos.

7. Haga accesible su página

Todo el trabajo que hizo hasta ahora será inutil si Google no es capaz de acceder a nuestra página, entender lo que escribimos e indexarlo de manera eficiente:

  • Independice contenido, diseño y funcionalidad: Google sólo indexará el contenido textual de su página, si ubica los estilos en hojas externas y el código javascript en archivos externos, estará facilitando su labor.
  • Maquete sus páginas siempre en base a estilos css: La maquetación en base a estilos le permite minimizar el código HTML destinado a posicionar los elementos en pantalla y maximizar por tanto la relación entre HTML y contenido.
  • Utilice las tablas exclusivamente para mostrar tablas.
  • Evite los frames. Debe tener en cuenta que el contenido de un frame será invisible para Google.
  • Evite las redirecciones, especialmente las realizadas en javascript.
  • Desarrolle su página conforme a los estándares.

8. Sea honesto

Ante todo sea honesto, cuando cree una página hágalo con ilusión y dedicación, tenga siempre presente a sus visitantes y no cree una página exclusivamente pensada para Google.

Hace poco tiempo leí un artículo en el que analizaban varias campañas de posicionamiento realizadas por diversas compañías SEO, todas habían fracasado excepto una. En la exitosa la empresa había contratado a un editor que diariamente escribía un artículo acerca de uno de los servicios de la empresa. Los artículos eran de tanta calidad que al cabo de un tiempo había fidelizadado a una gran cantidad de gente y en consecuencia las visitas y las ventas on-line de la empresa habían aumentado de manera formidable.

¿Eso es todo?

Sí, esto es todo. Si recurre a cualquier empresa SEO para posicionar su web, su trabajo no diferirá mucho de relatado en este artículo. Espero que a partir de ahora vea el posicionamiento web como una tarea mucho más clara, sencilla y, por qué no, divertida.