Escenario
Disponemos de un sitio de publicación y tenemos un WebPart personalizado que realiza una muestra de ciertas páginas del sitio, donde tenemos activada la navegación por metadatos, esto es, “friendly url’s”. El problema surge en que al hacer la consulta, ya sea usando CAML, recorriendo la lista con con Linq to SharePoint, lo que tenemos de forma habitual es la url de acceso a la página, algo similar a “http://mysite/Pages/mypage.aspx” o “http://mysite/mypage.aspx”, lo cuál ya no es “friendly” perdiendo así los beneficios que podríamos obtener de cara al SEO.
Solución
A la hora de consultar la o las páginas, debemos tener en cuenta el objeto TaxonomyNavigation que nos permite acceder a métodos para controlar la navegación por metadatos. Así pues, podemos hacer uso de este objeto para obtener la friendly url de la siguiente forma
1 public string GetFriendlyUrl(SPListItem pageItem) 2 { 3 //pageItem es del tipo ListItem 4 IList<NavigationTerm> terms = TaxonomyNavigation.GetFriendlyUrlsForListItem(pageItem, false); 5 6 string friendlyUrl = string.Empty; 7 8 //comprobar si la página tiene uno o más términos asociados 9 if (terms.Count > 0) { 10 //Obtener la friendly url del término asociado a la página 11 friendlyUrl = terms[0].GetResolvedDisplayUrl(string.Empty); 12 } else { 13 //si no hay términos, devolver la url de la página 14 friendlyUrl = pageItem.File.Url; 15 } 16 17 return friendlyUrl; 18 }
Lo primero que hacemos es, obtener la lista de términos asociados a la página porque, debemos tener en cuenta que una misma página puede estar asociada a varios términos de navegación. Una vez hayamos comprobado que existe al menos un término asociado, podemos recorrerlos en busca del deseado o simplemente, como he puesto en el ejemplo, devolver el primero. En caso de que no hubiera un término asociado y, con el fin de tener siempre una url de acceso a la página, devolveríamos la Url estándar.