/ / Como posso obter MVCSiteMap para incluir todas as minhas páginas geradas personalizadas no sitemap.xml - asp.net, asp.net-mvc, asp.net-mvc-5, mvcsitemapprovider

Como faço para que o MVCSiteMap inclua todas as minhas páginas personalizadas geradas no sitemap.xml - asp.net, asp.net-mvc, asp.net-mvc-5, mvcsitemapprovider

Eu vasculhei a documentação, mas não consegui encontrar o que estou procurando. É possível que o que estou procurando não seja possível, este é um novo território para mim.

estou usando MVCSiteMapProvider pela primeira vez. Eu preciso ter certeza de que os motores de busca podem rastrear uma lista de páginas criadas dinamicamente no meu site asp.net mvc.

A visão é criada com base em dois parâmetros: title e id. A url é expulsa é definida em uma rota personalizada como esta:

routes.MapRoute(
"JobResults",                                           // Route name
"JobSearch/{title}-{id}",                            // URL with parameters
new { controller = "JobSearch", action = "Job" },  // Parameter defaults
new[] { "MyApp.Web.Controllers" }
);

Então, quando clico em um link, ele me leva para: localhost: 43736 / JobSearch / chief-talent-officer-1710

Eu configurei o plug-in sitemap e mexi com o arquivo .sitemap para que fique assim:

<?xml version="1.0" encoding="utf-8" ?>
<mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0"
xsi:schemaLocation="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0 MvcSiteMapSchema.xsd">

<mvcSiteMapNode title="Home" controller="Home" action="Index" changeFrequency="Always" updatePriority="Normal">
<mvcSiteMapNode title="About" controller="Home" action="About"/>
<mvcSiteMapNode title="HiringSolutions" controller="Home" action="HiringSolutions"/>
<mvcSiteMapNode title="Privacy Policy" controller="Home" action="Privacy"/>
<mvcSiteMapNode title="Terms" controller="Home" action="Terms" />
<mvcSiteMapNode title="Search" controller="JobSearch" action="Index"  changeFrequency="Always" updatePriority="Normal">
<mvcSiteMapNode title="Job" controller="JobSearch" action="Job" changeFrequency="Always" updatePriority="High" route="JobResults"/>
</mvcSiteMapNode>
</mvcSiteMapNode>
</mvcSiteMap>

Para ver o que surge, eu chamei isso na minha página de índice: @Html.MvcSiteMap().Menu(false, true, true). Isso mostra isso:

  • Casa
  • Sobre
  • ContrataçãoSoluções
  • Política de Privacidade
  • Termos
  • Pesquisa
    • Trabalho

Como posso fazer isso dinamicamente ?:

  • Casa
  • Sobre
  • ContrataçãoSoluções
  • Política de Privacidade
  • Termos
  • Pesquisa
    • Trabalho
      • / JobSearch / chief-talent-officer-1710
      • / JobSearch / another-one-1234
      • / JobSearch / another-one-1235
      • / JobSearch / another-one-1236
      • / JobSearch / another-one-1237

E uma vez que eu tenho isso (se possível), isso cria um arquivo sitemap.xml na raiz do meu site, ou eu preciso fazer algo para torná-lo acessível por bots?

Respostas:

2 para resposta № 1

O DynamicNodeProvider soa como o que você está procurando? O código de exemplo mostra como construir um conjunto de nós de uma consulta de banco de dados.

public class StoreDetailsDynamicNodeProvider
: DynamicNodeProviderBase
{
public override IEnumerable<DynamicNode> GetDynamicNodeCollection(ISiteMapNode node)
{
using (var storeDB = new MusicStoreEntities())
{
// Create a node for each album
foreach (var album in storeDB.Albums.Include("Genre"))
{
DynamicNode dynamicNode = new DynamicNode();
dynamicNode.Title = album.Title;
dynamicNode.ParentKey = "Genre_" + album.Genre.Name;
dynamicNode.RouteValues.Add("id", album.AlbumId);

yield return dynamicNode;
}
}
}
}

1 para resposta № 2

Parece que você precisa criar uma página de manual que lista todos os trabalhos em seu banco de dados, já que o provedor de sitemaps (ou o Google) não pode saber o que colocar como argumentos na página Job ou Search.

Ou isso ou criar um script que gera o sitemap.xml para voce. Em ambos os casos, este é um trabalho você tem que fazer, porque só você conhece a estrutura dos seus dados.