{"id":23050864,"url":"https://github.com/geta/seo.sitemaps","last_synced_at":"2025-08-15T03:31:43.036Z","repository":{"id":4871907,"uuid":"6026966","full_name":"Geta/SEO.Sitemaps","owner":"Geta","description":"Search engine sitemaps.xml for EPiServer CMS","archived":false,"fork":false,"pushed_at":"2022-09-01T00:46:24.000Z","size":142297,"stargazers_count":26,"open_issues_count":46,"forks_count":42,"subscribers_count":30,"default_branch":"master","last_synced_at":"2023-04-10T16:50:56.674Z","etag":null,"topics":["cms","commerce","marketing"],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"ServiceStackV3/ServiceStack.Logging","license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Geta.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-10-01T08:06:15.000Z","updated_at":"2023-03-09T16:50:50.000Z","dependencies_parsed_at":"2023-01-11T16:37:01.686Z","dependency_job_id":null,"html_url":"https://github.com/Geta/SEO.Sitemaps","commit_stats":null,"previous_names":[],"tags_count":13,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Geta%2FSEO.Sitemaps","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Geta%2FSEO.Sitemaps/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Geta%2FSEO.Sitemaps/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Geta%2FSEO.Sitemaps/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Geta","download_url":"https://codeload.github.com/Geta/SEO.Sitemaps/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":229890100,"owners_count":18140042,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cms","commerce","marketing"],"created_at":"2024-12-15T23:38:58.089Z","updated_at":"2024-12-15T23:38:58.515Z","avatar_url":"https://github.com/Geta.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SEO.Sitemaps\r\n\r\n* Master\u003cbr\u003e\r\n![](http://tc.geta.no/app/rest/builds/buildType:(id:GetaPackages_GetaSeoSitemaps_00ci),branch:master/statusIcon)\r\n* Develop\u003cbr\u003e\r\n![](http://tc.geta.no/app/rest/builds/buildType:(id:GetaPackages_GetaSeoSitemaps_00ci),branch:develop/statusIcon)\u003cbr\u003e\r\n[![Platform](https://img.shields.io/badge/Platform-.NET%204.6.1-blue.svg?style=flat)](https://msdn.microsoft.com/en-us/library/w0x726c2%28v=vs.110%29.aspx)\r\n[![Platform](https://img.shields.io/badge/Episerver-%2011-orange.svg?style=flat)](http://world.episerver.com/cms/)\r\n\r\nSearch engine sitemaps.xml for EPiServer CMS 11 and Commerce 13\r\n\r\n## Description\r\n\r\nThis tool allows you to generate xml sitemaps for search engines to better index your EPiServer sites. Although there are several EPiServer sitemap tools available like [SearchEngineSitemaps](https://www.coderesort.com/p/epicode/wiki/SearchEngineSitemaps) and [EPiSiteMap](http://episitemap.codeplex.com/) which have inspired this project this tool gives you some additional specific features.\r\n\r\n## Features\r\n\r\n- sitemap generation as a scheduled job\r\n- filtering pages by virtual directories\r\n- ability to include pages that are in a different branch than the one of the start page\r\n- ability to generate sitemaps for mobile pages\r\n- it also supports multi-site and multi-language environments\r\n\r\nSee the [editor guide](docs/editor-guide.md) for more information.\r\n\r\n## Latest release\r\n\r\nThe latest version is available on the EPiServer NuGet feed. You can find it by searching the term Geta.SEO.Sitemaps.\r\n\r\n## Download\r\n\r\nFrom nuget.episerver.com feed.\r\n\r\n## How to get started?\r\n\r\n1. Install Sitemap plugin via NuGet in Visual Studio. Ensure that you also install the required dependencies.\r\n\r\n```\r\n  Install-Package Geta.SEO.Sitemaps\r\n  Install-Package Geta.SEO.Sitemaps.Commerce\r\n```\r\n\r\n2. Rebuild your solution.\r\n3. Configure sitemap settings and schedule the sitemap generation process. Configuration available at CMS -\u003e Admin Mode -\u003e Search engine sitemap settings. See the [editor guide](docs/editor-guide.md)\r\n\r\n#### Enabling multi language support\r\n\r\nAdd this to your web.config file:\r\n\r\n```xml\r\n\u003cconfiguration\u003e\r\n\u003cconfigSections\u003e\r\n\u003csection name=\"Geta.SEO.Sitemaps\" type=\"Geta.SEO.Sitemaps.Configuration.SitemapConfigurationSection, Geta.SEO.Sitemaps\"/\u003e\r\n\u003c/configSections\u003e\r\n\r\n  \u003cGeta.SEO.Sitemaps\u003e\r\n    \u003csettings enableLanguageDropDownInAdmin=\"true\" /\u003e\r\n  \u003c/Geta.SEO.Sitemaps\u003e\r\n\u003c/configuration\u003e\r\n```\r\n\r\n### Dynamic property for specific pages\r\n\r\nYou can specify page specific sitemap properties (like change frequency, priority or include/disinclude the specific page in any sitemap) for each EPiServer page by defining a dynamic property with type SEOSitemaps (and the same name):\r\n![Create dynamic property](docs/images/SitemapDynamicPropertyDefine.png?raw=true)\r\n\r\nand specify values for the dynamic property:\r\n![Set value for the dynamic property](docs/images/SitemapDynamicPropertyOnPage.PNG?raw=true)\r\n\r\n### Adding Sitemap Properties to all content pages\r\n\r\nCredits to [jarihaa](https://github.com/jarihaa) for [contributing](https://github.com/Geta/SEO.Sitemaps/pull/87) this.\r\n\r\n```\r\n[UIHint(\"SeoSitemap\")]\r\n[BackingType(typeof(PropertySEOSitemaps))]\r\npublic virtual string SEOSitemaps { get; set; }\r\n```\r\n\r\n#### Set default value\r\n\r\n```\r\npublic override void SetDefaultValues(ContentType contentType)\r\n{\r\n    base.SetDefaultValues(contentType);\r\n    var sitemap = new PropertySEOSitemaps\r\n    {\r\n        Enabled = false\r\n    };\r\n    sitemap.Serialize();\r\n    this.SEOSitemaps = sitemap.ToString();\r\n}\r\n```\r\n\r\n### Ignore page types\r\n\r\nImplement the `IExcludeFromSitemap` interface to ignore page types in the sitemap.\r\n\r\n```\r\npublic class OrderConfirmationPage : PageData, IExcludeFromSitemap\r\n```\r\n\r\n### Exclude content\r\n\r\nIf you need more control to exclude content from the sitemap you can make your own implementation of IContentFilter. Make sure to inherit from ContentFilter and call the `ShouldExcludeContent` method of the base class. \r\n\r\n```\r\npublic class SiteContentFilter : ContentFilter\r\n    {\r\n        public override bool ShouldExcludeContent(IContent content)\r\n        {\r\n            if (base.ShouldExcludeContent(content))\r\n            {\r\n                return true;\r\n            }\r\n\r\n            // Custom logic here\r\n\r\n            return false;\r\n        }\r\n    }\r\n```\r\n\r\nRegister in your DI container.\r\n\r\n```services.AddTransient\u003cIContentFilter, SiteContentFilter\u003e();```\r\n\r\n## Limitations\r\n\r\n- Each sitemap will contain max 50k entries (according to [sitemaps.org protocol](http://www.sitemaps.org/protocol.html#index)) so if the site in which you are using this plugin contains more active pages then you should split them over multiple sitemaps (by specifying a different root page or include/avoid paths for each).\r\n\r\n## Local development setup\r\n\r\nSee description in [shared repository](https://github.com/Geta/package-shared/blob/master/README.md#local-development-set-up) regarding how to setup local development environment.\r\n\r\n### Docker hostnames\r\n\r\nInstead of using the static IP addresses the following hostnames can be used out-of-the-box.\r\n\r\n- http://sitemaps.getalocaltest.me\r\n- http://manager-sitemaps.getalocaltest.me\r\n\r\n### QuickSilver login\r\n\r\nUse the default admin@example.com user for QuickSilver, see [Installation](https://github.com/episerver/Quicksilver).\r\n\r\n## Contributing\r\n\r\nSee [CONTRIBUTING.md](./CONTRIBUTING.md)\r\n\r\n## Package maintainer\r\n\r\nhttps://github.com/frederikvig\r\n\r\n## Changelog\r\n\r\n[Changelog](CHANGELOG.md)\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeta%2Fseo.sitemaps","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgeta%2Fseo.sitemaps","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeta%2Fseo.sitemaps/lists"}