none
Sharepoint 2013 Modificar SEOProperties mediante código RRS feed

  • Pregunta

  • Hola, 

    estoy intentando modificar las propiedades "Meta Keywords" y "Meta Description" de una página de publicación que tiene asignada una friendly URL. Lo quiero hacer mediante código. Lo que hago es coger el item de la lista ( que es una página ), y asignarle directamente el campo 

    item["Meta Description"] = "abla bla bla vla vla bla bla bla";

    item["Meta Keywords"]

    item.update();

    Resulta que no me falla, pero no me lo esta guardando.  También lo he probado con el nombre interno que es SeoKeyword y SeoMetadaDescription.

    En cambio si voy a la página desde la web, edito las seo properties y guardo, luego si que el código me lo recupera, con lo que puedo asegurar que el campo es correcto.

    Alguna idea?

    Gracias de antemano.


    Alfons Martinez

    martes, 5 de febrero de 2013 21:34

Respuestas

  • Lo tengo...

    Para poder modificar las propiedades SEO de un página que no tiene asociada una friendlyURL, se hace accediendo a la libreria de páginas, acceder al item y modificar los campos  

    item["Meta Description"] = "Funciona!!!"

    En cambio si la página tiene asociada una friendlyURL, entonces se tiene que modificar el Termset que la representa. 

    public void setSEOProperties(NavigationTermSetItem friendlyTerm, String metaDescription, String metaKeywords)
            {

                using (SPSite site = new SPSite("nombreSite"))
                {
                    using (SPWeb web = site.OpenWeb())
                    {
                        TaxonomySession taxonomySession = new TaxonomySession(site, updateCache: true);

                        /// Se usa el primer termstore
                        if (taxonomySession.TermStores.Count == 0)
                            throw new InvalidOperationException("The Taxonomy Service is offline or missing");


                        TermStore termStore = taxonomySession.TermStores[0];
                        
                        Term taxonomyTerm = friendlyTerm.Terms[0].GetTaxonomyTerm(taxonomySession);
                        taxonomyTerm.SetLocalCustomProperty("_Sys_Seo_PropKeywords", metaKeywords);
                        taxonomyTerm.SetLocalCustomProperty("_Sys_Seo_PropDescription", metaDescription);

                        termStore.CommitAll();
                    }
                }


            }

    Eso funciona.

    Gracias Adrian.


    Alfons Martinez

    miércoles, 6 de febrero de 2013 11:37

Todas las respuestas

  • Hola Alfons,

    Como estas intentando modificar las propiedades, lo estas intentando haciendo una consulta(CAML) sobre la biblioteca de Paginas o bien lo haces atacando la Pagina directamente?

    Según pone en la documentación de Microsoft, para que te funcione debes de modificarlo directamente desde la pagina y no atraves de la lista, para ello tienes que utilizar estos namespaces Microsoft.SharePoint.Publishing y Microsoft.SharePoint.Publishing.WebControls. y en esta pagina tendras las propiedades seo que necesitas modificar y en teoría te debe de funcionar.

    Cualquier cosa ya me comentas,

    Un saludo,

    Adrián

    miércoles, 6 de febrero de 2013 8:35
  • Hola Adrián, 

    lo estoy directamente sobre la biblioteca de páginas. Si lo hago directamente sobre la Página me dice que la propiedad es "ReadOnly", 

    es un poco raro...

    Gracias.


    Alfons Martinez

    miércoles, 6 de febrero de 2013 8:58
  • La verdad es que si que es raro, esta noche levanto mi entorno de desarrollo y ya te comento algo. Pero no me extraña nada lo que comentas porque a mi me pasaron cosas parecidas utilizando el PerformancePoint por programación.

    Saludos

    miércoles, 6 de febrero de 2013 10:52
  • Lo tengo...

    Para poder modificar las propiedades SEO de un página que no tiene asociada una friendlyURL, se hace accediendo a la libreria de páginas, acceder al item y modificar los campos  

    item["Meta Description"] = "Funciona!!!"

    En cambio si la página tiene asociada una friendlyURL, entonces se tiene que modificar el Termset que la representa. 

    public void setSEOProperties(NavigationTermSetItem friendlyTerm, String metaDescription, String metaKeywords)
            {

                using (SPSite site = new SPSite("nombreSite"))
                {
                    using (SPWeb web = site.OpenWeb())
                    {
                        TaxonomySession taxonomySession = new TaxonomySession(site, updateCache: true);

                        /// Se usa el primer termstore
                        if (taxonomySession.TermStores.Count == 0)
                            throw new InvalidOperationException("The Taxonomy Service is offline or missing");


                        TermStore termStore = taxonomySession.TermStores[0];
                        
                        Term taxonomyTerm = friendlyTerm.Terms[0].GetTaxonomyTerm(taxonomySession);
                        taxonomyTerm.SetLocalCustomProperty("_Sys_Seo_PropKeywords", metaKeywords);
                        taxonomyTerm.SetLocalCustomProperty("_Sys_Seo_PropDescription", metaDescription);

                        termStore.CommitAll();
                    }
                }


            }

    Eso funciona.

    Gracias Adrian.


    Alfons Martinez

    miércoles, 6 de febrero de 2013 11:37
  • Muchas gracias por compartir ese conocimiento con nosotros.

    miércoles, 6 de febrero de 2013 11:51