/ / Come posso ottenere MVCSiteMap per includere tutte le mie pagine generate personalizzate nella sitemap.xml - asp.net, asp.net-mvc, asp.net-mvc-5, mvcsitemapprovider

Come faccio a ottenere MVCSiteMap per includere tutte le mie pagine generate personalizzate nella sitemap.xml - asp.net, asp.net-mvc, asp.net-mvc-5, mvcsitemapprovider

Ho sfogliato la documentazione ma non sono riuscito a trovare quello che stavo cercando. È possibile che ciò che sto cercando non sia possibile, questo è un nuovo territorio per me.

sto usando MVCSiteMapProvider per la prima volta. Devo assicurarmi che i motori di ricerca possano eseguire la scansione di un elenco di pagine create dinamicamente nel mio sito mvc asp.net.

La vista è creata sulla base di due parametri: titolo e id. L'url sputa è definito in un percorso personalizzato come questo:

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

Quindi quando clicco su un link mi porterà a: localhost: 43736 / JobSearch / chief-talent-officer-1710

Ho impostato il plug-in Sitemap e ho combinato il file .sitemap in modo che assomigli a questo:

<?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>

Per vedere che cosa esce ho chiamato questo nella mia pagina indice: @Html.MvcSiteMap().Menu(false, true, true). Lo rende questo:

  • Casa
  • Di
  • HiringSolutions
  • politica sulla riservatezza
  • condizioni
  • Ricerca
    • Lavoro

Come posso farlo fare dinamicamente ?:

  • Casa
  • Di
  • HiringSolutions
  • politica sulla riservatezza
  • condizioni
  • Ricerca
    • Lavoro
      • / JobSearch / capo-talent-ufficiale-1710
      • / JobSearch / altro-one-1234
      • / JobSearch / altro-one-1235
      • / JobSearch / altro-one-1236
      • / JobSearch / altro-one-1237

E una volta che ho quello (se possibile), questo crea un file sitemap.xml nella radice del mio sito, o devo fare qualcosa per renderlo raggiungibile dai bot?

risposte:

2 per risposta № 1

Fa il DynamicNodeProvider sembra quello che stai cercando? Il codice di esempio mostra come creare un set di nodi da una query di database.

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 per risposta № 2

Sembra che tu abbia bisogno di creare una pagina di manuale che elenchi tutti i lavori nel tuo database, dal momento che il fornitore di sitemap (o Google) non può sapere cosa mettere come argomenti nella pagina di lavoro o di ricerca.

O quello o crea uno script che genera il sitemap.xml per te. In entrambi i casi questo è un lavoro tu devi fare, perché solo tu conosci la struttura dei tuoi dati.