# Generate Sitemap using Umbraco 6 CMS and ASP.NET MVC Razor code
**by:** Shailesh Patel  **in:** [Programming](https://www.systenics.com/blogs/category/programming/)  **tags:**[*ASP.NET MVC*](https://www.systenics.com/blogs/tag/aspnet-mvc/), [*Razor*](https://www.systenics.com/blogs/tag/razor/), [*Umbraco*](https://www.systenics.com/blogs/tag/umbraco/)
Sitemap is still considered one of the most important element of Website development. Google and Bing do provide an option to reference your website sitemap so that their bots can traverse through all the links. But, most developers or website administrators often forget to include it. In this blog post, I will explain the steps to create a Sitemap using Umbraco 6, ASP.NET Partial View and Razor code. This article assumes that you have Umbraco 6 configured to use Mvc as the default rendering engine so that MVC Partial Views can be used.

Our sample Content hierarchy is as below:

```
Content
- Home
- Solutions
- Products
- Contact Us
- Sitemap
```

## Getting Started

We need to include all child items under parent menu item (Home) and create a sitemap dynamically.

In Umbraco CMS administration tool, click on **Settings** section and right-click on **Document Types** to create a new document named as **Sitemap**. Let **Master Document Type** be set to **None…** and **Create matching template** checked. Now click on **Sitemap** document type and go to **Structure** tab and set the checkbox for **Allow at root** option. Make sure that the **Allow at root** is checked on Home document type.

Also, you can add **umbracoNaviHide** property under **Generic properties** tab for base document type used by Home and all child pages within it. If this property is checked then a link to that page will not be included in the sitemap.

Copy-paste the code from Listing 1 to Sitemap template. Refer [Sitemap XML protocol](http://www.sitemaps.org/protocol.html) to understand the format of XML required by search engines.

Listing 1: Sitemap.cshtml

```
@inherits Umbraco.Web.Mvc.UmbracoTemplatePage
@{
Layout = null;
Response.ContentType = "text/xml";
}<?xml version='1.0' encoding='UTF-8'?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
@Html.Partial("GenerateSitemap", @Model.Content)
</urlset>
```

Next step is to right-click on **Partial Views** and create a new partial view named as **GenerateSitemap**. This will bring up an editor. Copy-paste the code from Listing 2 below into the editor and click **Save** icon to save the sitemap partial view.

Listing 2: GenerateSitemap.cshtml

```
@inherits Umbraco.Web.Mvc.UmbracoViewPage<IPublishedContent>
@{
Layout = null;
var parent = Model.Previous().AncestorOrSelf(1);

if(@parent.Name== "Home")
{
<url>
<loc>@GetUrlWithDomainPrefix(parent.Url, parent.Name)</loc>
<lastmod>@(string.Format("{0:s}+00:00", parent.UpdateDate))</lastmod>
</url>
@ListChildNodes(parent);
}
}

@helper ListChildNodes(IPublishedContent startNode)
{
const int maxLevelForSiteMap = 100;

foreach (var node in startNode.Children.Where(x => x.IsVisible()))
{
<url>
<loc>@GetUrlWithDomainPrefix(node.Url, node.Name)</loc>
<lastmod>@(string.Format("{0:s}+00:00", node.UpdateDate))</lastmod>
</url>
if (node.Level <= maxLevelForSiteMap )
{
@ListChildNodes(node)
}
}

}

@functions {
private static string GetUrlWithDomainPrefix(string url, string name) {

if (url.StartsWith("/"))
url = url.Substring(1);

var domainPrefix = string.Format("http://{0}/", HttpContext.Current.Request.ServerVariables["HTTP_HOST"]);

if (url.StartsWith(domainPrefix))
return url;
else
return domainPrefix + url;
}
}
```

By default, partial views in Umbraco 6 inherits from the **Umbraco.Web.Mvc.UmbracoViewPage** class as shown on line 1 above.

The statement on line 4, **var parent = Model.Previous().AncestorOrSelf(1)** allows us to go one node back and traverse through all child items under Content tree-view. This code will work recursively based on the number of level it must traverse to generate the sitemap.

## Create Sitemap Link

Now the final step is to create a content for sitemap from Content section. Right-click on **Content** and click on **Create** to enter name as **Sitemap** and **Choose Document Type** as Sitemap. Click on the Sitemap content to know the link for sitemap. Do remember to submit this link to Google and Bing so that your website gets indexed. You can also include this link in robots.txt file.

I hope you find this blog post helpful in increasing your website page rank.

## Related pages on Systenics

- [AI-powered listing description generation](https://www.systenics.com/auctionworx/ai-enhanced-listings-description-generation/)
- [AuctionWorx development and customization](https://www.systenics.com/auctionworx/development-and-customization/)
- [Excel plugin for listing creation](https://www.systenics.com/auctionworx/listings-creation-excel-plugin/)

## Need help implementing this for your business?

Our team helps plan, build, and scale marketplace and auction workflows. Explore [industry solutions](https://www.systenics.com/solutions/), [platform products](https://www.systenics.com/products/), and [custom development services](https://www.systenics.com/auctionworx/development-and-customization/) tailored to your goals.

[Book a quick consultation](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard).