Me preguntaba qué, si es que la hay, es la mejor práctica para la inclusión de contenido SEO como meta descripciones y palabras clave en un ASP.NET MVC (yo estoy usando la v3 RC) de la vista. Mi plan inicial es crear un actionfilter, aplica globalmente a las acciones, para tirar de los datos relevantes de un almacén de datos y pasar como viewdata a la vista.

Mis preguntas son:
1) ¿se prevén problemas con este enfoque?
2) ¿hay alguna más adecuado enfoques?
3) ¿qué es un almacén de datos para uso aquí – debo extraer de la base de datos (o caché si los datos están disponibles), el uso de recursos de archivos, archivos de configuración, etc?

Gracias de antemano,

JP

  • Si no me malentiendan, Google no usa los datos de la etiqueta Meta más porque es fácil de fingir. Extraer datos de la realidad con el contenido del usuario y la puso en su algoritmo de indexación.
InformationsquelleAutor JP. | 2010-11-24

5 Comentarios

  1. 23

    Me gustaría utilizar atributos en mi controladora de acciones y agregarlos a la ViewData en mi controlador de la base en el método de OnExecutingAction.

    La motivación para poner en el controlador y no la vista es que es realmente más información acerca de la acción real que sobre la vista. Y se puede utilizar cuando la devolución de los diferentes tipos de formatos como json o xml.

    Controlador de

    class MyController
    {
    
      [MetaKeywords("hello,world,something,else")]
      [MetaDescription("Tells you how to greet the world")]
      ActionResult Hello()
      {
          return View();
      }
    }

    Siempre se puede usar un archivo de recursos en lugar de las cadenas simples.

    en el controlador de la base:

        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var keywords = filterContext.ActionDescriptor.GetCustomAttributes(typeof(MetaKeywordsAttribute), false);
            if (keywords.Length == 1)
                ViewData["MetaKeywords"] = keywords.Value;
    
            var description = filterContext.ActionDescriptor.GetCustomAttributes(typeof(MetaDescriptionAttribute), false);
            if (description.Length == 1)
                ViewData["MetaDescription"] = description.Value;
    
            base.OnActionExecuting(filterContext);
        }

    En su diseño

    <meta name="keywords" value="@View.MetaKeywords" />

    Y aquí las respuestas a sus preguntas: =)

    1) ¿se prevén problemas con este enfoque?

    Nope. Es un buen método.

    2) Son más adecuados enfoques?

    Acabo de dar una alternativa.

    3) ¿qué es un almacén de datos para uso aquí – debo extraer de la base de datos (o caché si los datos están disponibles), el uso de recursos de archivos, archivos de configuración, etc?

    Sería ponerlo en texto plano (si no tienes para el soporte de múltiples idiomas), más en un archivo de recursos. Esta información no suele ser cambiado a menos que la vista o el controlador cambia (donde una recompilación de todos modos se requiere). Por lo tanto no hay necesidad de un mayor dinamismo de la fuente.

    • Yo no recomiendo para revisión de palabras clave y la descripción en el atributo porque es difícil modificar o config. Usted necesita para reconstruir y volver a implementar sitio web para la actualización de la misma.
    • No se si las cadenas están en un archivo de recursos. Y cuán a menudo puede cambiar sin modificar otras cosas en el proyecto?
    • Podría dar por favor un enlace o una explenation acerca de lo que es un «controlador de base»?
    • Crear un nuevo controlador que todos los demás controladores de heredar.
    • ¿este enfoque todavía si mi camino es como este: http://www.mywebsite.com/team/roster/{rosterid}/{rostername}
    • sí. No tiene nada que ver con el enrutamiento.
    • gotcah, así que no puedo/no debemos poner mi {rostername} en la descripción del meta?
    • no, no traducido a menos que modificar manualmente los metadatos en el OnActionExecuting.
    • A la derecha, que es lo que quiero decir. Si yo NO uso su enfoque, y envía los datos de metadatos de vuelta en el viewmodel. La razón es porque hay 1000 páginas que seguir a esa plantilla, y me pregunto si mi SEO calificación de ir ABAJO en el puesto de 1000 páginas tienen la misma meta descripción
    • No. Me refiero a este: gist.github.com/jgauffin/55b1ce86c7e5fc5cced8. Se podría generar los metadatos de la base de la información de la ruta demasiado.
    • ah, gotcha, se perdió la función de reemplazar, gracias!

  2. 15

    Otro enfoque podría ser, simplemente, el uso en _Layout.cshtml:

        <html>
        <head>
             <title>@ViewBag.Title</title>
             <meta name="description" content="@ViewBag.MetaDescription" />
             <meta name="keywords" content="@ViewBag.MetaKeywords" />
        </head>
        <body>

    Y en sus puntos de vista usted mismo podrá definir por separado para cada vista el correspondiente título/descripción/palabras clave:

    Por ejemplo en Home/Index.cshtml uso:

    @{
        ViewBag.Title = "Home page title | samplePage.com";
        ViewBag.MetaDescription = "Home page meta description";
        ViewBag.MetaKeywords = "meta keywords keyword home page";
    }
    • Tan simple. Esta es realmente la mejor solución. No estoy de acuerdo con todo el mundo diciendo que usted debe poner estas cosas en el controlador. Como SEO y un programador puedo decir que este es el más manejable manera de hacerlo. Que quiere recomplile cada vez que retocar una descripción de meta. Esto hace que sea más fácil de probar y actualizar. Kudos.
    • También estoy de acuerdo con Dani, esta es la mejor manera de hacerlo. Yo es fácilmente manejable y una solución elegante.
    • He añadido @if (!String.IsNullOrWhiteSpace(ViewBag.MetaDescription)) { <meta name="description" content="@ViewBag.MetaDescription" /> } @if (!String.IsNullOrWhiteSpace(ViewBag.MetaKeywords)) { <meta name="keywords" content="@ViewBag.MetaKeywords" /> } para que yo no tenga que poner datos de metadatos de cada página.
    • Gracias Chris estaba buscando una manera de implementar defecto metas.
  3. 13

    Agregar sección opcional para su diseño de página:

    <!DOCTYPE html>
    <html>
    <head>
      @RenderSection("ExtraHeadContent", required: false)
    </head>
    <body>

    Ahora usted puede definir etiquetas meta en cualquier página de contenido con @sección:

    @{
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    
    @section ExtraHeadContent {
        <meta name="description" content="My super page">
    }
    
    <div>The main content</div>

    Ver Opcional de Afeitar Secciones con Contenido Predeterminado por Marcin Doboz.

  4. 6

    Si se utiliza una página principal, puede crear marcadores de posición de contenido a la casa de las palabras clave y la descripción, que se representan en la vista de datos en el Modelo. Los datos en el Modelo pueden venir directamente de un campo de base de datos o de un auxiliar que se genera se basa en otras cosas!

    Página Maestra:

    <asp:contentplaceholder id="MetaTags" runat="server" />

    Vista:

    <asp:Content ID="Content1" ContentPlaceHolderID="MetaTags" runat="server">
        <meta name="keywords" content="<%= Model.Keywords %>">
        <meta name="description" content="<%= Model.Description %>">
    </asp:Content>
    • Estoy de acuerdo con esta respuesta. Mantener siempre limpio y fácil de modificar. Es verdaderamente concepto de MVC.
    • Me gustaría realmente el uso de la maquinilla de Afeitar, equivalente a la presente en estos días (Pavel Chuchuva la respuesta ya tiene la maquinilla de Afeitar de la versión) – pero sí, yo no soy un fan de ViewBag en el todo, y yo definitivamente no duro cadenas de código en atributos como estos deben cambiar a menudo a permanecer en sincronización con el contenido real de la página.
  5. 5

    1) ¿se prevén problemas con este enfoque?

    No.

    2) Son más adecuados enfoques?

    Me gustaría escribir un método auxiliar para este o el uso de un niño de acción junto con el de Html.La acción helper porque va a ser la extracción de datos de la base de datos.

    3) ¿qué es un almacén de datos para uso aquí – debo extraer de la base de datos (o caché si los datos están disponibles), el uso de recursos de archivos, archivos de configuración, etc?

    Esto dependerá de lo que su sitio está haciendo, cómo está organizada, donde es almacenada la información, …

    • verificar este solución simple a partir de Darin

Dejar respuesta

Please enter your comment!
Please enter your name here