Aunque ya de todos es sabido que en la nueva versión de SharePoint 2013, el apartado del SEO, del posicionamiento en buscadores y el tener esas url amigables que tanto demandan los departamentos de marketing de las empresas ya viene en el «out of the box» del producto. En versiones anteriores todo esto nos plantea un dolor de cabeza.
La semana pasada mi compañero Simón y yo nos enfrentamos a uno de estos retos, en la que en un cliente con un SharePoint 2010 teníamos que conseguir que su proyecto SharePoint 2010 tuviera Url amigables, con la complejidad de que este sitio era un sitio multiidioma. El requisito que teníamos encima de la mesa es que en la «URL» no debia contener el /Paginas/, /Pages/ o en el idioma que estuviera la variante de la url y ademas quitar la extensión .aspx.
Para afrontar este problema teníamos tres posibilidades:
- Hacer uso del modúlo ReWrite
- Desarrollar un modulo HTTPModule
- Adquirir una solución de terceros que ya se encarga de realizar esto
De las tres soluciones descartamos las dos últimas, una por coste y la otra por el grado de complejidad que tiene desarrollar un HTTPModule. Decidido que la única posibilidad era utilizar el modulo ReWrite (un modulo gratuito) que se instala en el IIS. El uso de este modulo sirve para redirigir direcciones a otras en base a unas reglas, que es justo lo que nosotros queremos es decir cuando un usuario ponga esta dirección http://sitio/ nosotros aunque no lo muestre en el navegador mostramos http://sitio/variante/Paginas/default.aspx.
Para ello el primer paso es descargarnos la aplicación desde el siguiente enlace.
Una vez instalado el modulo Rewrite nos dirigimos al IIS y observamos que tenemos instalado el modulo.
Ahora el paso que tenemos que hacer es introducir una regla para indicar que toda URL que contenga /Paginas que lo reescriba en el navegador eliminando este contenido. Ahora bien tenemos que añadir una condición que esta reescritura solamente la realice cuando estemos en la variente en Español. por lo que la regla que tenemos que configurar queda de la siguiente forma:
– Introducimos el patrón:
-Introducimos la condición de que solo afecte a las variantes en español:
-Reescribimos la url tal y como queremos:
Si navegamos por nuestro sitio y nos dirigimos a la dirección http://sitio observamos que ya no contiene el barra páginas. Pero si intentamos ir a un link esto no funciona, es debido a que tenemos que redirigir a esta página pero con la url amigable que hemos configurado con anterioridad, por lo que tenemos que introducir esta regla:
Primero el Patrón seria este:
– La condición seria la misma que en el anterior caso, es decir, todas las páginas que pertenezcan a la variante en español.
– Finalmente redirigimos la url que contiene el barra /paginas por la Primera regla:
Ahora bien queda el caso de la pagina por defecto que queda muy mal que tengamos una url como http://sitio/es/default no? pues para ello tendremos que añadir dos reglas más en las que tenemos que indicar que si es la página por defecto del sitio pues no mostrar el nombre de la página en el navegador. Para este caso añadiremos las dos reglas anteriores pero indicando la página por defecto, para en el momento en el que se cargue o se redirija esta página no muestre su titulo.
Esta última regla es un tanto compleja debido a que si nosotros tenemos un sitio principal y este sitio principal a su vez tiene 15 subsitios tenemos que introducir estas reglas por cada subsitio. Lo que resulta un tanto engorroso y tedioso. Otro factor que tenemos que tener en cuenta es que tenemos que tener en cuenta el orden en el que se ejecutan las reglas debido a que un patrón puede cumplir varias reglas pero queremos que ejecute una anteriormente a la otra, para que todo esto funcione a la perfección.
Con estas cuatro reglas (en el mejor de los casos) ya tenemos una variante con url amigables, ahora queda el caso base que es cuando se hace una llamada a la dirección http://sitio que al ser un sitio de variantes lo que hace es una llamada a la siguiente dirección http://sitio/variationroot.aspx. El funcionamiento de esta página es obtiene el idioma del navegador y si de este idioma lo tiene como variante pues te redirige a esa variante y sino te envía a la variante marcada por defecto. Si probamos en nuestro ejemplo esto no funciona :-). Lo que tenemos que hacer es añadir otra regla que cuando se llame a la página variationroot.aspx no le aplique ninguna de las reglas indicadas anteriormente.
El introducir estas reglas también impide que cuando un usuario se autentifique contra la aplicación no pueda entrar, por lo que también tenemos que introducir excepciones de que permitir que se pueda introducir a los /_layouts/, etc ..
Por otro lado también conviene recordar que el uso del modulo ReWrite en SharePoint NO esta soportado por Microsoft y que solamente funciona en sitios de publicación y con el acceso anónimo activado, en otra circunstancia no hay que usarlo, ya que los problemas que puede ocasionar son miles y será nuestra responsabilidad utilizarlo.
Conclusión
La principal conclusión que hemos sacado es que el modúlo ReWrite es muy completo y una solución muy potente, pero el uso de este modulo puede ocasionar algunos desperfectos y daños colaterales que hay que saber antes de implantar esta solución e intentar abordarlos antes de ponernos a construir «url» amigables. No es una herramienta dificil pero si que hay que plantearse que una vez que hemos conseguido las url amigables tengamos todo cuanto antes.
Mi opinión es que antes de plantearme este «parche» en 2010, es una oportunidad para plantearme una migración a 2013 a la plataforma superior ya que lo que ahora veo como un gasto, será una inversión porque obtendré un mejor SEO con la nueva versión (y muchas mejoras más) y por lo tanto muchas más oportunidades de obtener rentabilidad a mi negocio.
Referencias
http://blog.mastykarz.nl/friendly-urls-sharepoint-site-4-steps-iis7-url-rewrite-module/
http://johnliu.net/blog/2010/7/23/sharepoint-2010-with-iis-url-rewrite-20.html