Skip to content
Pattern - Header - Left Pattern - Header - Left

Enabling growth through rapid development

SUEZ has built an e-commerce platform on Mendix, but found out the solution provides no easy way of building SEO-friendly websites. We have solved this problem by developing a custom Mendix plugin.

Pattern - Header - Left Pattern - Header - Left
Case Study Enabling Growth Through Rapid Development 800X400
SUEZ recycling and recovery UK


SUEZ provides solutions that maintain, optimise and secure the resources essential for our future. They supply 92 million people across five continents with drinking water and 65 million with sanitation services. SUEZ also provides nearly 52 million people with waste collection services and recovers more than 14 million tonnes of waste to create valuable new materials and energy.

Industry Water, waste management, energy
Technology Mendix, Java, Freemarker templating engine

Key Achievements

  • Keeping the benefits of a Mendix-based e-commerce platform with a tailor-made plug-in
  • Improved customer experience thanks to better access to the offered products
  • All Mendix users can now build SEO-friendly web pages

The challenge

Business Need

SUEZ built a Mendix-based e-commerce platform to enable their clients to easily order SUEZ’s products (like waste collectors). The challenge the SUEZ faced was building SEO-friendly web pages. Mendix allows its users to build a Single Page Application only, therefore search-engine bots cannot position such a page properly. To help their customers, SUEZ needed to solve this challenge and they chose to partner with us.

The solution

Project Details

To solve the problem, we developed a custom Mendix plugin (available here). It enables SUEZ employees to build web pages that are SEO-friendly and can be easily accessed by their customers. In detail, it allows to:

  • Integrate with a third-party module that allows to create deep links. Our SEO module therefore helps to „break-up” the Single Page Application into SEOfriendly parts.
  • As a later extension, we have integrated our solution with Mendix’s native URL functionality – for the convenience of the configurator.
  • Configure a custom link handler that works with search-engine bots and handles them SEO-friendly pages.
  • Read values from Mendix’s Entity attributes and substitute them into HTML template, through a built-in templating mechanism. This means that our solution can create dynamic pages.
  • Create a sitemap that lists all important parts of the Mendix solution for the bots to create a direct link in the search engine.

All of the above turns the Mendix Single Page Application into a compartmentalised website. This allows the end-customers to easily access through search-engines the SUEZ’s products they wish to purchase.

The results

Business Benefits

In result, Suez can keep using its Mendix solution while ensuring that their customers can easily access the needed products.

Our SEO plugin is accessible in the Medix App Store and can be utilised by all Mendix users (the solution is available here) to solve the problem of a Single Page Application.

Key achievements

  1. SUEZ can keep using its Mendix-based e-commerce platform.
  2. SUEZ’s customers can now easily access and purchase needed products.
  3. All Mendix users can now build SEO-friendly web pages.
System.NullReferenceException: Object reference not set to an instance of an object.
   at Umbraco.Cms.Core.Models.PublishedContent.PublishedContentType..ctor(IContentTypeComposition contentType, IPublishedContentTypeFactory factory)
   at Our.Umbraco.DocTypeGridEditor.Helpers.DocTypeGridEditorHelper.<>c__DisplayClass15_0.<GetContentTypesByAlias>b__0()
   at Umbraco.Extensions.AppCacheExtensions.<>c__DisplayClass5_0`1.<GetCacheItem>b__0()
   at Umbraco.Cms.Core.Cache.SafeLazy.<>c__DisplayClass1_0.<GetSafeLazy>b__0()
--- End of stack trace from previous location ---
   at Umbraco.Cms.Core.Cache.ObjectCacheAppCache.Get(String key, Func`1 factory, Nullable`1 timeout, Boolean isSliding, String[] dependentFiles)
   at Umbraco.Cms.Core.Cache.ObjectCacheAppCache.Get(String key, Func`1 factory)
   at Umbraco.Cms.Core.Cache.DeepCloneAppCache.Get(String key, Func`1 factory)
   at Umbraco.Extensions.AppCacheExtensions.GetCacheItem[T](IAppCache provider, String cacheKey, Func`1 getCacheItem)
   at Our.Umbraco.DocTypeGridEditor.Helpers.DocTypeGridEditorHelper.GetContentTypesByAlias(String contentTypeAlias)
   at Our.Umbraco.DocTypeGridEditor.Helpers.DocTypeGridEditorHelper.ConvertValue(String id, String contentTypeAlias, String dataJson)
   at Our.Umbraco.DocTypeGridEditor.Helpers.DocTypeGridEditorHelper.RenderDocTypeGridEditorItem(IViewComponentHelper helper, IHtmlHelper htmlHelper, Object model)
   at AspNetCoreGeneratedDocument.App_Plugins_DocTypeGridEditor_Render_DocTypeGridEditor.ExecuteAsync()
   at Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageCoreAsync(IRazorPage page, ViewContext context)
   at Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageAsync(IRazorPage page, ViewContext context, Boolean invokeViewStarts)
   at Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderAsync(ViewContext context)
   at Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.RenderPartialCoreAsync(String partialViewName, Object model, ViewDataDictionary viewData, TextWriter writer)
   at Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.PartialAsync(String partialViewName, Object model, ViewDataDictionary viewData)
   at AspNetCore.Views_Partials_grid_editors_base.ExecuteAsync() in C:\home\site\wwwroot\Views\Partials\grid\editors\base.cshtml:line 11

Case studies


Start your project with Objectivity

CTA Pattern - Contact - Middle

We use necessary cookies for the functionality of our website, as well as optional cookies for analytic, performance and/or marketing purposes. Collecting and reporting information via optional cookies helps us improve our website and reach out to you with information regarding our organisaton or offer. To read more or decline the use of some cookies please see our Cookie Settings.