{"id":3124,"date":"2024-11-25T12:43:00","date_gmt":"2024-11-25T12:43:00","guid":{"rendered":"https:\/\/www.skybridgeinfotech.com\/blog\/?p=3124"},"modified":"2024-12-16T17:32:55","modified_gmt":"2024-12-16T17:32:55","slug":"solving-query-string-based-personalization-in-sitecore-jss-with-next-js","status":"publish","type":"post","link":"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/","title":{"rendered":"Solving Query String-Based Personalization in Sitecore JSS with Next.js"},"content":{"rendered":"<div class=\"mceTemp\">\n<p>Recently, I faced an interesting challenge while working on a Sitecore MVC to Headless migration project. The application relied heavily on query string-based personalization to deliver tailored content, and I needed a way to carry over this behaviour into our new Next.js application using Sitecore JSS. Initially, I wasn&#8217;t sure how to handle this with GraphQL, but after a lot of investigation, I devised a solution. Below, I\u2019ll share how I passed query string data into Sitecore\u2019s GraphQL layout service and customized the Next.js app to handle it.<\/p>\n<h3>The Challenge: Query String-Based Personalization<\/h3>\n<p>Query string-based personalization is common in many applications, where different query parameters trigger the display of personalized content. While Sitecore MVC supports this out of the box, migrating to a headless architecture with Sitecore JSS and Next.js required additional logic to replicate this behaviour using GraphQL.<\/p>\n<h3>The Solution: Passing Query Strings to GraphQL Layout Service<\/h3>\n<p>To implement query string-based personalization in the Next.js JSS app, I made custom changes to pass the requested URL\u2019s query string through Sitecore\u2019s GraphQL layout service. Here are the steps I followed, along with code samples.<\/p>\n<h3>1. Modify layout-service-factory.ts to Include Query Strings<\/h3>\n<p>I extended the LayoutServiceFactory to allow for dynamic inclusion of query strings in the GraphQL request URL. This involved creating a createWithQuery() method to append query strings to the layout service request.<\/p>\n<p>createWithQuery(query: string = &#8220;&#8221;): LayoutService {<\/p>\n<p>return new GraphQLLayoutService({<\/p>\n<p>endpoint: `${config.graphQLEndpoint}${query}`,<\/p>\n<p>apiKey: config.sitecoreApiKey,<\/p>\n<p>siteName: config.jssAppName,<\/p>\n<p>});<\/p>\n<p>}<\/p>\n<h3>2. Modify page-props-factory.ts to Inject Query Strings<\/h3>\n<p>The next step was to alter the SitecorePagePropsFactory to detect if the requested URL contains query strings. If query strings were present, I passed them to the createWithQuery() method to ensure the layout service request included them.<\/p>\n<p>\/** Query string-based personalization implementation **\/<\/p>\n<p>constSRRContext: any = context;<\/p>\n<p>constresolvedUrl = SRRContext?.resolvedUrl;<\/p>\n<p>if (resolvedUrl?.includes(&#8220;?&#8221;)) {<\/p>\n<p>constqueryStringIndex = resolvedUrl.indexOf(&#8216;?&#8217;);<\/p>\n<p>constqueryStringPart = resolvedUrl.substring(queryStringIndex);<\/p>\n<p>this.layoutService = layoutServiceFactory.createWithQuery(queryStringPart);<\/p>\n<p>} else {<\/p>\n<p>this.layoutService = layoutServiceFactory.create();<\/p>\n<p>}<\/p>\n<p>Here is the project repo and you will get complete code.<\/p>\n<p><a href=\"https:\/\/github.com\/krithviktrs\/Query-String-Based-Personalization-in-JSS\/tree\/main\">https:\/\/github.com\/krithviktrs\/Query-String-Based-Personalization-in-JSS\/tree\/main<\/a><\/p>\n<p><strong>Benefits of This Approach<\/strong><\/p>\n<ol>\n<li><strong>Preserving Personalization<\/strong>: This solution allows you to maintain query string-based personalization when migrating from Sitecore MVC to a headless architecture using JSS and Next.js.<\/li>\n<li><strong>Flexible Layout Data Fetching<\/strong>: You can pass any query string to the layout service, enabling more flexible personalization and content delivery.<\/li>\n<li><strong>Seamless Migration<\/strong>: By replicating MVC-based behaviour in a headless environment, you avoid the need for significant rewrites of personalization logic.<\/li>\n<\/ol>\n<p>Migrating from Sitecore MVC to a headless solution with Next.js can present challenges, especially when dealing with personalization. By customizing how Next.js interacts with the Sitecore GraphQL layout service, we can maintain important features like query string-based personalization. The solution provided here ensures a smooth transition while leveraging the benefits of a modern headless architecture.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Recently, I faced an interesting challenge while working on a Sitecore MVC to Headless migration project. The application relied heavily [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3133,"comment_status":"closed","ping_status":"open","sticky":false,"template":"blog-details.php","format":"standard","meta":{"_acf_changed":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[16,30],"tags":[863,864,865,34,228,845,866,891,897,893],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\r\n<title>Solving Query String-Based Personalization in Sitecore JSS with Next.js - Skybridge<\/title>\r\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\r\n<link rel=\"canonical\" href=\"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/\" \/>\r\n<meta property=\"og:locale\" content=\"en_US\" \/>\r\n<meta property=\"og:type\" content=\"article\" \/>\r\n<meta property=\"og:title\" content=\"Solving Query String-Based Personalization in Sitecore JSS with Next.js - Skybridge\" \/>\r\n<meta property=\"og:description\" content=\"Recently, I faced an interesting challenge while working on a Sitecore MVC to Headless migration project. The application relied heavily [&hellip;]\" \/>\r\n<meta property=\"og:url\" content=\"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/\" \/>\r\n<meta property=\"og:site_name\" content=\"Skybridge\" \/>\r\n<meta property=\"article:published_time\" content=\"2024-11-25T12:43:00+00:00\" \/>\r\n<meta property=\"article:modified_time\" content=\"2024-12-16T17:32:55+00:00\" \/>\r\n<meta property=\"og:image\" content=\"http:\/\/www.skybridgeinfotech.com\/blog\/wp-content\/uploads\/2024\/11\/it-specialist-checking.jpg\" \/>\r\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\r\n\t<meta property=\"og:image:height\" content=\"742\" \/>\r\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\r\n<meta name=\"author\" content=\"admin\" \/>\r\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\r\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\r\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/www.skybridgeinfotech.com\/blog\/#\/schema\/person\/0f15f3349a8eea9f6c89ae7dac0f3cbc\"},\"headline\":\"Solving Query String-Based Personalization in Sitecore JSS with Next.js\",\"datePublished\":\"2024-11-25T12:43:00+00:00\",\"dateModified\":\"2024-12-16T17:32:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/\"},\"wordCount\":479,\"publisher\":{\"@id\":\"https:\/\/www.skybridgeinfotech.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.skybridgeinfotech.com\/blog\/wp-content\/uploads\/2024\/11\/it-specialist-checking.jpg\",\"keywords\":[\"digital experience software\",\"digital platform solution on Sitecore\",\"marketing automation tools\",\"sitecore CMS\",\"sitecore cms development company\",\"sitecore for healthcare\",\"sitecore healthcare\",\"sitecore mvc\",\"sitecore mvc application architecture\",\"sitecore mvc development\"],\"articleSection\":[\"Sitecore\",\"Sitecore CMS\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/\",\"url\":\"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/\",\"name\":\"Solving Query String-Based Personalization in Sitecore JSS with Next.js - Skybridge\",\"isPartOf\":{\"@id\":\"https:\/\/www.skybridgeinfotech.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.skybridgeinfotech.com\/blog\/wp-content\/uploads\/2024\/11\/it-specialist-checking.jpg\",\"datePublished\":\"2024-11-25T12:43:00+00:00\",\"dateModified\":\"2024-12-16T17:32:55+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/#primaryimage\",\"url\":\"https:\/\/www.skybridgeinfotech.com\/blog\/wp-content\/uploads\/2024\/11\/it-specialist-checking.jpg\",\"contentUrl\":\"https:\/\/www.skybridgeinfotech.com\/blog\/wp-content\/uploads\/2024\/11\/it-specialist-checking.jpg\",\"width\":1800,\"height\":742,\"caption\":\"Solving Query String-Based Personalization in Sitecore JSS with Next.js\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.skybridgeinfotech.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Solving Query String-Based Personalization in Sitecore JSS with Next.js\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.skybridgeinfotech.com\/blog\/#website\",\"url\":\"https:\/\/www.skybridgeinfotech.com\/blog\/\",\"name\":\"Skybridge\",\"description\":\"Skybridge\",\"publisher\":{\"@id\":\"https:\/\/www.skybridgeinfotech.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.skybridgeinfotech.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.skybridgeinfotech.com\/blog\/#organization\",\"name\":\"Skybridge\",\"url\":\"https:\/\/www.skybridgeinfotech.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.skybridgeinfotech.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"http:\/\/www.skybridgeinfotech.com\/blog\/wp-content\/uploads\/2024\/02\/logo.png\",\"contentUrl\":\"http:\/\/www.skybridgeinfotech.com\/blog\/wp-content\/uploads\/2024\/02\/logo.png\",\"width\":197,\"height\":73,\"caption\":\"Skybridge\"},\"image\":{\"@id\":\"https:\/\/www.skybridgeinfotech.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.skybridgeinfotech.com\/blog\/#\/schema\/person\/0f15f3349a8eea9f6c89ae7dac0f3cbc\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.skybridgeinfotech.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/118323199c026a712094dacfeb0b28dc?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/118323199c026a712094dacfeb0b28dc?s=96&d=mm&r=g\",\"caption\":\"admin\"},\"sameAs\":[\"https:\/\/www.skybridgeinfotech.com\/blog\"],\"url\":\"https:\/\/www.skybridgeinfotech.com\/blog\/author\/admin\/\"}]}<\/script>\r\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Solving Query String-Based Personalization in Sitecore JSS with Next.js - Skybridge","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.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/","og_locale":"en_US","og_type":"article","og_title":"Solving Query String-Based Personalization in Sitecore JSS with Next.js - Skybridge","og_description":"Recently, I faced an interesting challenge while working on a Sitecore MVC to Headless migration project. The application relied heavily [&hellip;]","og_url":"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/","og_site_name":"Skybridge","article_published_time":"2024-11-25T12:43:00+00:00","article_modified_time":"2024-12-16T17:32:55+00:00","og_image":[{"width":1800,"height":742,"url":"http:\/\/www.skybridgeinfotech.com\/blog\/wp-content\/uploads\/2024\/11\/it-specialist-checking.jpg","type":"image\/jpeg"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"admin","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/#article","isPartOf":{"@id":"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/"},"author":{"name":"admin","@id":"https:\/\/www.skybridgeinfotech.com\/blog\/#\/schema\/person\/0f15f3349a8eea9f6c89ae7dac0f3cbc"},"headline":"Solving Query String-Based Personalization in Sitecore JSS with Next.js","datePublished":"2024-11-25T12:43:00+00:00","dateModified":"2024-12-16T17:32:55+00:00","mainEntityOfPage":{"@id":"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/"},"wordCount":479,"publisher":{"@id":"https:\/\/www.skybridgeinfotech.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/#primaryimage"},"thumbnailUrl":"https:\/\/www.skybridgeinfotech.com\/blog\/wp-content\/uploads\/2024\/11\/it-specialist-checking.jpg","keywords":["digital experience software","digital platform solution on Sitecore","marketing automation tools","sitecore CMS","sitecore cms development company","sitecore for healthcare","sitecore healthcare","sitecore mvc","sitecore mvc application architecture","sitecore mvc development"],"articleSection":["Sitecore","Sitecore CMS"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/","url":"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/","name":"Solving Query String-Based Personalization in Sitecore JSS with Next.js - Skybridge","isPartOf":{"@id":"https:\/\/www.skybridgeinfotech.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/#primaryimage"},"image":{"@id":"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/#primaryimage"},"thumbnailUrl":"https:\/\/www.skybridgeinfotech.com\/blog\/wp-content\/uploads\/2024\/11\/it-specialist-checking.jpg","datePublished":"2024-11-25T12:43:00+00:00","dateModified":"2024-12-16T17:32:55+00:00","breadcrumb":{"@id":"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/#primaryimage","url":"https:\/\/www.skybridgeinfotech.com\/blog\/wp-content\/uploads\/2024\/11\/it-specialist-checking.jpg","contentUrl":"https:\/\/www.skybridgeinfotech.com\/blog\/wp-content\/uploads\/2024\/11\/it-specialist-checking.jpg","width":1800,"height":742,"caption":"Solving Query String-Based Personalization in Sitecore JSS with Next.js"},{"@type":"BreadcrumbList","@id":"https:\/\/www.skybridgeinfotech.com\/blog\/solving-query-string-based-personalization-in-sitecore-jss-with-next-js\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.skybridgeinfotech.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Solving Query String-Based Personalization in Sitecore JSS with Next.js"}]},{"@type":"WebSite","@id":"https:\/\/www.skybridgeinfotech.com\/blog\/#website","url":"https:\/\/www.skybridgeinfotech.com\/blog\/","name":"Skybridge","description":"Skybridge","publisher":{"@id":"https:\/\/www.skybridgeinfotech.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.skybridgeinfotech.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.skybridgeinfotech.com\/blog\/#organization","name":"Skybridge","url":"https:\/\/www.skybridgeinfotech.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.skybridgeinfotech.com\/blog\/#\/schema\/logo\/image\/","url":"http:\/\/www.skybridgeinfotech.com\/blog\/wp-content\/uploads\/2024\/02\/logo.png","contentUrl":"http:\/\/www.skybridgeinfotech.com\/blog\/wp-content\/uploads\/2024\/02\/logo.png","width":197,"height":73,"caption":"Skybridge"},"image":{"@id":"https:\/\/www.skybridgeinfotech.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.skybridgeinfotech.com\/blog\/#\/schema\/person\/0f15f3349a8eea9f6c89ae7dac0f3cbc","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.skybridgeinfotech.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/118323199c026a712094dacfeb0b28dc?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/118323199c026a712094dacfeb0b28dc?s=96&d=mm&r=g","caption":"admin"},"sameAs":["https:\/\/www.skybridgeinfotech.com\/blog"],"url":"https:\/\/www.skybridgeinfotech.com\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.skybridgeinfotech.com\/blog\/wp-json\/wp\/v2\/posts\/3124"}],"collection":[{"href":"https:\/\/www.skybridgeinfotech.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skybridgeinfotech.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skybridgeinfotech.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skybridgeinfotech.com\/blog\/wp-json\/wp\/v2\/comments?post=3124"}],"version-history":[{"count":1,"href":"https:\/\/www.skybridgeinfotech.com\/blog\/wp-json\/wp\/v2\/posts\/3124\/revisions"}],"predecessor-version":[{"id":3125,"href":"https:\/\/www.skybridgeinfotech.com\/blog\/wp-json\/wp\/v2\/posts\/3124\/revisions\/3125"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.skybridgeinfotech.com\/blog\/wp-json\/wp\/v2\/media\/3133"}],"wp:attachment":[{"href":"https:\/\/www.skybridgeinfotech.com\/blog\/wp-json\/wp\/v2\/media?parent=3124"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skybridgeinfotech.com\/blog\/wp-json\/wp\/v2\/categories?post=3124"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skybridgeinfotech.com\/blog\/wp-json\/wp\/v2\/tags?post=3124"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}