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
- Lavoro
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 № 1Fa 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.