{"id":619,"date":"2021-11-23T19:17:37","date_gmt":"2021-11-23T19:17:37","guid":{"rendered":"https:\/\/www.naveedulhaq.com\/?p=619"},"modified":"2023-02-21T22:45:22","modified_gmt":"2023-02-21T22:45:22","slug":"optimizely-page-type-block-type-and-content-area-restrictions","status":"publish","type":"post","link":"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-page-type-block-type-and-content-area-restrictions\/","title":{"rendered":"Optimizely: Page type, Block type and Content area restrictions"},"content":{"rendered":"\n<p>As CMS or Commerce developers we work a lot with page types, block types and different in-built properties like content area etc. Sometimes we just create our Page Type, Block Types and properties and a lot of times we need to add restrictions such as what block types are allowed in this content area. Which specific blocks are not allowed in this content area and Sometimes which block\/page can only be used under certain types or permission of users.<\/p>\n\n\n\n<p>All these scenarios are discussed in Optimizely forums and in blogs. I just want to put them together and create a cheat sheet for my convenience and hopefully other benefits from it as well. <\/p>\n\n\n\n<p>Let&#8217;s discuss different scenarios<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Restrict block type or page to a be created by certain user\/group<\/li>\n\n\n\n<li>Restrict page type allowed under certain page types in content tree<\/li>\n\n\n\n<li>Content area: Restrict all block types and allow a few block types<\/li>\n\n\n\n<li>Content area: Restrict a few block types and allow rest of block types<\/li>\n\n\n\n<li>Restrict block in all conntent areas<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span style=\"font-size: revert; color: initial;\">Restrict page type allowed under certain page types under content tree<\/span> <\/h2>\n\n\n\n<p>The following examples only allow specific page types to be added under a page in the content tree.<\/p>\n\n\n\n<p>For example, you have created a parent settings page that holds all website setting pages. Or a Blog Home page that can only hold article  pages etc<\/p>\n\n\n\n<pre><code>&#91;ContentType(\n        DisplayName = \"Settings Page\",\n        GUID = \"4c453b87-eca9-4766-a5b7-ff2bfc6d3922\", \n        Description = \"All site-wide settings.\",\n        GroupName = Constants.StringConstants.PageTypes.SettingsPages)]\n    &#91;AvailableContentTypes(Include = new&#91;] {\n       typeof(EmailSettingsPage),\n        typeof(BlogSettingsPage),\n        typeof(UserAccountSettingsPage),\n        \n    })]\n    \n    public class SettingsPage : PageData\n    {\n    }<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span style=\"font-size: revert; color: initial;\">Restrict block type or page to a be created by certain user\/group<\/span> <\/h2>\n\n\n\n<p>Taking the above example if you want the Setting page to be created by users with Administrator permissions<\/p>\n\n\n\n<pre><code>    &#91;ContentType(\n        DisplayName = \"Settings Page\",\n        GUID = \"4c453b87-eca9-4766-a5b7-ff2bfc6d3922\", \n        Description = \"All site-wide settings.\",\n        GroupName = Constants.StringConstants.PageTypes.SettingsPages), Access(Roles = \"Administrators\")]<\/code><\/pre>\n\n\n\n<p>You can add similar settings in blocks as well<\/p>\n\n\n\n<pre><code>&#91;ContentType(DisplayName = \"Editorial Block\", GUID = \"0d881c79-2a10-4be3-8792-bee335cc7cf7\", Description = \"Editorial block\"), Access(Roles = \"Administrators\") ]\n    public class EditorialBlock : EditorialBaseBlock<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span style=\"font-size: revert; color: initial;\">Content area: Restrict all block types and allow a few block types<\/span><\/h2>\n\n\n\n<p>Following code only allow Page type of Standard Page in the content area<\/p>\n\n\n\n<pre ><code>&#91;AllowedTypes(AllowedTypes = new &#91;] { typeof(StandardPage) })]\npublic virtual ContentArea RelatedContentArea { get; set; }<\/code><\/pre>\n\n\n\n<p> Following code only allow Page type of Standard Page and Block type of EditorialBlock in the content area<\/p>\n\n\n\n<pre><code>&#91;AllowedTypes(new &#91;] {typeof(StandardPage), typeof(EditorialBlock)})]  public virtual ContentArea RelatedContentArea { get; set; } <\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span style=\"font-size: revert; color: initial;\">Content area: Restrict a few block types and allow the <\/span>rest of the <span style=\"font-size: revert; color: initial;\">block types<\/span> <\/h2>\n\n\n\n<p>Following code restrict EditorialBlock but allow all other page\/block type<\/p>\n\n\n\n<pre><code>&#91;AllowedTypes(RestrictedTypes = new &#91;] { typeof(EditorialBlock) })]\npublic virtual ContentArea RelatedContentArea { get; set; }<\/code><\/pre>\n\n\n\n<p>Following code allow Standard page and restrict EditorialBlock<\/p>\n\n\n\n<pre><code>&#91;AllowedTypes(AllowedTypes = new &#91;] { typeof(StandardPage) }, RestrictedTypes = new &#91;] { typeof(EditorialBlock) })]\npublic virtual ContentArea RelatedContentArea { get; set; }<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span style=\"font-size: revert; color: initial;\">Restrict a block in all content areas<\/span><\/h2>\n\n\n\n<p>A lot of times we create a block but we do not want the content editor to use it. We probably auto-generate instances this block instances or we might want to obsolete this block in future.<\/p>\n\n\n\n<pre><code>&#91;ContentType(DisplayName = \"Editorial Block\", AvailableInEditMode =false, GUID = \"0d881c79-2a10-4be3-8792-bee335cc7cf7\", Description = \"Editorial block\")]\n    public class EditorialBlock : BlockData\n    {\n      .......\n      }<\/code><\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>As CMS or Commerce developers we work a lot with page types, block types and different in-built properties like content area etc. Sometimes we just&#8230;<\/p>\n","protected":false},"author":1,"featured_media":599,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[10,68,32,13,63,90],"class_list":["post-619","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-episerver","tag-cms","tag-content-cloud","tag-developer","tag-episerver","tag-optimizely","tag-optimizely-cms"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Optimizely: Page type, Block type and Content area restrictions<\/title>\n<meta name=\"description\" content=\"Optimizely: Page type, Block type and Content area restrictions - Naveed Ul-Haq&#039;s blog\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-page-type-block-type-and-content-area-restrictions\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Optimizely: Page type, Block type and Content area restrictions\" \/>\n<meta property=\"og:description\" content=\"Optimizely: Page type, Block type and Content area restrictions - Naveed Ul-Haq&#039;s blog\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-page-type-block-type-and-content-area-restrictions\/\" \/>\n<meta property=\"og:site_name\" content=\"Naveed Ul-Haq&#039;s blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-11-23T19:17:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-02-21T22:45:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.naveedulhaq.com\/wp-content\/uploads\/2021\/08\/optimizely.png\" \/>\n\t<meta property=\"og:image:width\" content=\"232\" \/>\n\t<meta property=\"og:image:height\" content=\"235\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Naveed Ul-Haq\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Naveed Ul-Haq\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/index.php\\\/episerver\\\/optimizely-page-type-block-type-and-content-area-restrictions\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/index.php\\\/episerver\\\/optimizely-page-type-block-type-and-content-area-restrictions\\\/\"},\"author\":{\"name\":\"Naveed Ul-Haq\",\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/#\\\/schema\\\/person\\\/dd6db5980b965fcae41e096d357c65c9\"},\"headline\":\"Optimizely: Page type, Block type and Content area restrictions\",\"datePublished\":\"2021-11-23T19:17:37+00:00\",\"dateModified\":\"2023-02-21T22:45:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/index.php\\\/episerver\\\/optimizely-page-type-block-type-and-content-area-restrictions\\\/\"},\"wordCount\":399,\"commentCount\":3,\"publisher\":{\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/#\\\/schema\\\/person\\\/dd6db5980b965fcae41e096d357c65c9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/index.php\\\/episerver\\\/optimizely-page-type-block-type-and-content-area-restrictions\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.naveedulhaq.com\\\/wp-content\\\/uploads\\\/2021\\\/08\\\/optimizely.png\",\"keywords\":[\"cms\",\"content cloud\",\"developer\",\"episerver\",\"Optimizely\",\"Optimizely Content cloud\"],\"articleSection\":[\"Optimizely\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.naveedulhaq.com\\\/index.php\\\/episerver\\\/optimizely-page-type-block-type-and-content-area-restrictions\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/index.php\\\/episerver\\\/optimizely-page-type-block-type-and-content-area-restrictions\\\/\",\"url\":\"https:\\\/\\\/www.naveedulhaq.com\\\/index.php\\\/episerver\\\/optimizely-page-type-block-type-and-content-area-restrictions\\\/\",\"name\":\"Optimizely: Page type, Block type and Content area restrictions\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/index.php\\\/episerver\\\/optimizely-page-type-block-type-and-content-area-restrictions\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/index.php\\\/episerver\\\/optimizely-page-type-block-type-and-content-area-restrictions\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.naveedulhaq.com\\\/wp-content\\\/uploads\\\/2021\\\/08\\\/optimizely.png\",\"datePublished\":\"2021-11-23T19:17:37+00:00\",\"dateModified\":\"2023-02-21T22:45:22+00:00\",\"description\":\"Optimizely: Page type, Block type and Content area restrictions - Naveed Ul-Haq&#039;s blog\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/index.php\\\/episerver\\\/optimizely-page-type-block-type-and-content-area-restrictions\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.naveedulhaq.com\\\/index.php\\\/episerver\\\/optimizely-page-type-block-type-and-content-area-restrictions\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/index.php\\\/episerver\\\/optimizely-page-type-block-type-and-content-area-restrictions\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.naveedulhaq.com\\\/wp-content\\\/uploads\\\/2021\\\/08\\\/optimizely.png\",\"contentUrl\":\"https:\\\/\\\/www.naveedulhaq.com\\\/wp-content\\\/uploads\\\/2021\\\/08\\\/optimizely.png\",\"width\":232,\"height\":235,\"caption\":\"optimizely (Episerver)\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/index.php\\\/episerver\\\/optimizely-page-type-block-type-and-content-area-restrictions\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.naveedulhaq.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Optimizely: Page type, Block type and Content area restrictions\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/#website\",\"url\":\"https:\\\/\\\/www.naveedulhaq.com\\\/\",\"name\":\"Naveed Ul-Haq's blog\",\"description\":\"AI, Optimizely, Azure &amp; more\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/#\\\/schema\\\/person\\\/dd6db5980b965fcae41e096d357c65c9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.naveedulhaq.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/#\\\/schema\\\/person\\\/dd6db5980b965fcae41e096d357c65c9\",\"name\":\"Naveed Ul-Haq\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/362536aba6cc66917d7558cacd015a81c7cdf1a69b9a28c994764847c487b692?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/362536aba6cc66917d7558cacd015a81c7cdf1a69b9a28c994764847c487b692?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/362536aba6cc66917d7558cacd015a81c7cdf1a69b9a28c994764847c487b692?s=96&d=mm&r=g\",\"caption\":\"Naveed Ul-Haq\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/362536aba6cc66917d7558cacd015a81c7cdf1a69b9a28c994764847c487b692?s=96&d=mm&r=g\"},\"description\":\"I lead engineering delivery teams for digital commerce and digital experience platforms, combining hands-on architecture experience with strong delivery governance. Over 20+ years, I\u2019ve built and led cross\u2011functional teams (engineering, BA, QA) delivering modern cloud solutions on Azure, microservices, APIs and eCommerce\\\/CMS platforms. My recent focus includes AI-enabled commerce automation: product ingestion and enrichment workflows, content optimisation for SEO and shopping feeds, and agentic tooling to improve marketing and accessibility workflows. I\u2019m passionate about building high-performing teams, establishing quality\\\/release standards, and delivering measurable outcomes across performance, reliability, and speed of change.\",\"sameAs\":[\"https:\\\/\\\/www.naveedulhaq.com\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/naveedulhaq\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Optimizely: Page type, Block type and Content area restrictions","description":"Optimizely: Page type, Block type and Content area restrictions - Naveed Ul-Haq&#039;s blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-page-type-block-type-and-content-area-restrictions\/","og_locale":"en_GB","og_type":"article","og_title":"Optimizely: Page type, Block type and Content area restrictions","og_description":"Optimizely: Page type, Block type and Content area restrictions - Naveed Ul-Haq&#039;s blog","og_url":"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-page-type-block-type-and-content-area-restrictions\/","og_site_name":"Naveed Ul-Haq&#039;s blog","article_published_time":"2021-11-23T19:17:37+00:00","article_modified_time":"2023-02-21T22:45:22+00:00","og_image":[{"width":232,"height":235,"url":"https:\/\/www.naveedulhaq.com\/wp-content\/uploads\/2021\/08\/optimizely.png","type":"image\/png"}],"author":"Naveed Ul-Haq","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Naveed Ul-Haq","Estimated reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-page-type-block-type-and-content-area-restrictions\/#article","isPartOf":{"@id":"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-page-type-block-type-and-content-area-restrictions\/"},"author":{"name":"Naveed Ul-Haq","@id":"https:\/\/www.naveedulhaq.com\/#\/schema\/person\/dd6db5980b965fcae41e096d357c65c9"},"headline":"Optimizely: Page type, Block type and Content area restrictions","datePublished":"2021-11-23T19:17:37+00:00","dateModified":"2023-02-21T22:45:22+00:00","mainEntityOfPage":{"@id":"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-page-type-block-type-and-content-area-restrictions\/"},"wordCount":399,"commentCount":3,"publisher":{"@id":"https:\/\/www.naveedulhaq.com\/#\/schema\/person\/dd6db5980b965fcae41e096d357c65c9"},"image":{"@id":"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-page-type-block-type-and-content-area-restrictions\/#primaryimage"},"thumbnailUrl":"https:\/\/www.naveedulhaq.com\/wp-content\/uploads\/2021\/08\/optimizely.png","keywords":["cms","content cloud","developer","episerver","Optimizely","Optimizely Content cloud"],"articleSection":["Optimizely"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-page-type-block-type-and-content-area-restrictions\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-page-type-block-type-and-content-area-restrictions\/","url":"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-page-type-block-type-and-content-area-restrictions\/","name":"Optimizely: Page type, Block type and Content area restrictions","isPartOf":{"@id":"https:\/\/www.naveedulhaq.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-page-type-block-type-and-content-area-restrictions\/#primaryimage"},"image":{"@id":"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-page-type-block-type-and-content-area-restrictions\/#primaryimage"},"thumbnailUrl":"https:\/\/www.naveedulhaq.com\/wp-content\/uploads\/2021\/08\/optimizely.png","datePublished":"2021-11-23T19:17:37+00:00","dateModified":"2023-02-21T22:45:22+00:00","description":"Optimizely: Page type, Block type and Content area restrictions - Naveed Ul-Haq&#039;s blog","breadcrumb":{"@id":"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-page-type-block-type-and-content-area-restrictions\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-page-type-block-type-and-content-area-restrictions\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-page-type-block-type-and-content-area-restrictions\/#primaryimage","url":"https:\/\/www.naveedulhaq.com\/wp-content\/uploads\/2021\/08\/optimizely.png","contentUrl":"https:\/\/www.naveedulhaq.com\/wp-content\/uploads\/2021\/08\/optimizely.png","width":232,"height":235,"caption":"optimizely (Episerver)"},{"@type":"BreadcrumbList","@id":"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-page-type-block-type-and-content-area-restrictions\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.naveedulhaq.com\/"},{"@type":"ListItem","position":2,"name":"Optimizely: Page type, Block type and Content area restrictions"}]},{"@type":"WebSite","@id":"https:\/\/www.naveedulhaq.com\/#website","url":"https:\/\/www.naveedulhaq.com\/","name":"Naveed Ul-Haq's blog","description":"AI, Optimizely, Azure &amp; more","publisher":{"@id":"https:\/\/www.naveedulhaq.com\/#\/schema\/person\/dd6db5980b965fcae41e096d357c65c9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.naveedulhaq.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":["Person","Organization"],"@id":"https:\/\/www.naveedulhaq.com\/#\/schema\/person\/dd6db5980b965fcae41e096d357c65c9","name":"Naveed Ul-Haq","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/362536aba6cc66917d7558cacd015a81c7cdf1a69b9a28c994764847c487b692?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/362536aba6cc66917d7558cacd015a81c7cdf1a69b9a28c994764847c487b692?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/362536aba6cc66917d7558cacd015a81c7cdf1a69b9a28c994764847c487b692?s=96&d=mm&r=g","caption":"Naveed Ul-Haq"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/362536aba6cc66917d7558cacd015a81c7cdf1a69b9a28c994764847c487b692?s=96&d=mm&r=g"},"description":"I lead engineering delivery teams for digital commerce and digital experience platforms, combining hands-on architecture experience with strong delivery governance. Over 20+ years, I\u2019ve built and led cross\u2011functional teams (engineering, BA, QA) delivering modern cloud solutions on Azure, microservices, APIs and eCommerce\/CMS platforms. My recent focus includes AI-enabled commerce automation: product ingestion and enrichment workflows, content optimisation for SEO and shopping feeds, and agentic tooling to improve marketing and accessibility workflows. I\u2019m passionate about building high-performing teams, establishing quality\/release standards, and delivering measurable outcomes across performance, reliability, and speed of change.","sameAs":["https:\/\/www.naveedulhaq.com","https:\/\/www.linkedin.com\/in\/naveedulhaq\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.naveedulhaq.com\/index.php\/wp-json\/wp\/v2\/posts\/619","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.naveedulhaq.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.naveedulhaq.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.naveedulhaq.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.naveedulhaq.com\/index.php\/wp-json\/wp\/v2\/comments?post=619"}],"version-history":[{"count":0,"href":"https:\/\/www.naveedulhaq.com\/index.php\/wp-json\/wp\/v2\/posts\/619\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.naveedulhaq.com\/index.php\/wp-json\/wp\/v2\/media\/599"}],"wp:attachment":[{"href":"https:\/\/www.naveedulhaq.com\/index.php\/wp-json\/wp\/v2\/media?parent=619"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.naveedulhaq.com\/index.php\/wp-json\/wp\/v2\/categories?post=619"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.naveedulhaq.com\/index.php\/wp-json\/wp\/v2\/tags?post=619"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}