{"id":27866,"date":"2021-05-18T22:01:58","date_gmt":"2021-05-18T22:01:58","guid":{"rendered":"http:\/\/automate-social-images-next-puppeteer"},"modified":"2021-05-18T22:01:58","modified_gmt":"2021-05-18T22:01:58","slug":"automate-social-images-next-puppeteer","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/","title":{"rendered":"Automate Social Images with Next.js and Puppeteer"},"content":{"rendered":"<div class=\"wp-block-cloudinary-markdown \"><p>People usually share links and pages through social networks. If we have a blog, an e-commerce platform, or any other website, we want our content to stand out in social media user timelines. To do that, we can take advantage of <a href=\"https:\/\/en.wikipedia.org\/wiki\/Search_engine_optimization\">SEO (Search Engine Optimization)<\/a> and <a href=\"https:\/\/ogp.me\/\">Open Graph<\/a> tools.<\/p>\n<p>One of the ways we can highlight content shared in social networks is by creating social images (or cards). These images are displayed on social networks together with the links to our website. When someone shares a hyperlink to a certain page from our website, we will see that picture displayed on the social network timeline if we used Open Graph protocol and the <code>og:image<\/code> property to set an image URL.<\/p>\n<p>We could create custom images for each one of the pages of our website. We could also use pictures from an image gallery, or a platform like <a href=\"https:\/\/unsplash.com\/\">Unsplash<\/a>. But If we have hundreds or thousands of different pages on our site, and we want to display images with useful information, we will need an automatic way to generate them.<\/p>\n<p>In this article, we will see how to create a web app that generates social images automatically. The service will generate HTML content dynamically, based on a request, generate a \u201csnapshot\u201d of the content, and return it to the requester. In order to do this, we will need to automate the usage of a web browser.<\/p>\n<h2>Browser Automation<\/h2>\n<p>As a premise, we should always try to automate things. We save time. We make things faster. We depend less on human interaction.<\/p>\n<p>Browser automation means simulating and executing actions related to web browsers, in an automatic way. We can fake interactions with a website as if we were using input devices (keyboard, mouse, etc.), or we can check that visual elements are working and displayed correctly. By doing this, we can be fast and efficient at a level that wouldn\u2019t be possible If we depended on human interaction.<\/p>\n<p>There are a number of different tools that execute browser automation, and they each offer a variety of features. For our example app, we will use Puppeteer.<\/p>\n<h2>What is Puppeteer?<\/h2>\n<p><a href=\"https:\/\/pptr.dev\/\">Puppeteer<\/a> is a Node library that provides an API to control Chromium based browsers (Google Chrome, Microsoft Edge), using the <a href=\"https:\/\/chromedevtools.github.io\/devtools-protocol\/\">DevTools Protocol<\/a>. It allows us to automate actions that we can usually do manually in the browser.<\/p>\n<h2>What is Next.js?<\/h2>\n<p><a href=\"https:\/\/nextjs.org\/\">Next.js<\/a> is one of the most popular React frameworks presently. We can use it to create user interfaces, static pages, and server-side rendered pages.<\/p>\n<p>It also allows us to create serverless API routes using Node.js logic, and that\u2019s what we\u2019re going to do in our application.<\/p>\n<h2>Automatic Social Images App<\/h2>\n<p>We will create a serverless web application that receives a plain text message, and an image extension, and returns a social image with a logo and the specified message. We will be able to use the URL in our pages, setting the <code>og:image<\/code> property in the <code>&lt;head&gt;<\/code> element.<\/p>\n<pre class=\"js-syntax-highlighted\"><code>&lt;meta property=&quot;og:image&quot; content=&quot;https:\/\/automatic-social-images.vercel.app\/Test%20Message.jpeg&quot; \/&gt;\n<\/code><\/pre>\n<p>The image will be displayed in social network timelines.<\/p>\n<p>To see the app code, you can take a look at this CodeSandbox<\/p>\n<\/div>\n  \n  <div class=\"wp-block-cloudinary-code-sandbox \">\n    <iframe\n      src=\"https:\/\/codesandbox.io\/embed\/pensive-morning-qtju5?theme=dark&amp;codemirror=1&amp;highlights=&amp;editorsize=50&amp;fontsize=14&amp;expanddevtools=0&amp;hidedevtools=0&amp;eslint=0&amp;forcerefresh=0&amp;hidenavigation=0&amp;initialpath=%2F&amp;module=%2Flib%2Fpuppeteer.js&amp;moduleview=0&amp;previewwindow=&amp;view=editor&amp;runonclick=1\"\n      height=\"500\"\n      style=\"width: 100%;\"\n      title=\"Automate Social Images with Next.js and Puppeteer\"\n      loading=\"lazy\"\n      allow=\"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking\"\n      sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n    ><\/iframe>\n  <\/div>\n\n  <div class=\"wp-block-cloudinary-markdown \"><p>You can also <a href=\"https:\/\/automatic-social-images.vercel.app\/Test%20Message.jpeg\">see the app deployed and working in Vercel<\/a>. Clicking on the previous link will display the resulting image in your browser. You can change the message you want to display directly in the URL.<\/p>\n<p>If you want to use this solution in your web application, edit the code we used today, or make your custom version of the app, you can clone\n<a href=\"https:\/\/github.com\/fgiuliani\/automatic-social-images\">https:\/\/github.com\/fgiuliani\/automatic-social-images<\/a>.\nAfter forking and cloning the repository, switch into the newly created folder <code>automatic-social-images<\/code> in your Terminal and run <code>npm install<\/code> to install the necessary Node packages. Now, you can run the development server with <code>npm run dev<\/code> or <code>yarn dev<\/code>.\nWith the server running, you can start generating images using the URLs <code>http:\/\/localhost:3000\/[message].jpeg<\/code> or <code>http:\/\/localhost:3000\/[message].png<\/code>, depending on which image file type you want to use.<\/p>\n<h2>Summary<\/h2>\n<p>In this article, we learned how to generate automatic images to share on social networks. Using Open Graph protocol, we can set image URLs to our pages that will be displayed whenever users share a link to our website in their timelines.\nWe create a web application to generate automatic images. We use Next.js and Puppeteer, a Node library. From our pages, we set the <code>og:image<\/code> property pointing to our web app and send plain text through the URL, simulating an image filename (i.e. Test.png). The application generates an image using browser automation that will be displayed on social network timelines.<\/p>\n<p>This web application can be extended in different ways. We could grab and manipulate different pictures and mix them in our automatic social images. We could use different data sources for the information we want to display in the images we generate, such as databases or APIs. We could dynamically resize the image, or define the font to use or the logo to display, using querystring parameters.<\/p>\n<h2>External resources<\/h2>\n<ul>\n<li>\n<a href=\"https:\/\/nextjs.org\/docs\/getting-started\">Next.js documentation<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/pptr.dev\/\">Puppeteer official website<\/a>\n<\/li>\n<\/ul>\n<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":41,"featured_media":27867,"comment_status":"","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[134,370,212,371],"class_list":["post-27866","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-guest-post","tag-image","tag-next-js","tag-under-review"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Automate Social Images with Next.js and Puppeteer<\/title>\n<meta name=\"description\" content=\"In this article, we will see how to create a web app that generates social images automatically. The service will generate HTML content dynamically, based on a request, generate a &quot;snapshot&quot; of the content, and return it to the requester as an image.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Automate Social Images with Next.js and Puppeteer\" \/>\n<meta property=\"og:description\" content=\"In this article, we will see how to create a web app that generates social images automatically. The service will generate HTML content dynamically, based on a request, generate a &quot;snapshot&quot; of the content, and return it to the requester as an image.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-05-18T22:01:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926052\/Web_Assets\/blog\/cd4c5d36be7aa86569d4aaf04db74854d214732e-6016x4016-1_2786775411\/cd4c5d36be7aa86569d4aaf04db74854d214732e-6016x4016-1_2786775411.jpg?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"6016\" \/>\n\t<meta property=\"og:image:height\" content=\"4016\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"NewsArticle\",\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"Automate Social Images with Next.js and Puppeteer\",\"datePublished\":\"2021-05-18T22:01:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/\"},\"wordCount\":8,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926052\/Web_Assets\/blog\/cd4c5d36be7aa86569d4aaf04db74854d214732e-6016x4016-1_2786775411\/cd4c5d36be7aa86569d4aaf04db74854d214732e-6016x4016-1_2786775411.jpg?_i=AA\",\"keywords\":[\"Guest Post\",\"Image\",\"Next.js\",\"Under Review\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2021\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/\",\"url\":\"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/\",\"name\":\"Automate Social Images with Next.js and Puppeteer\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926052\/Web_Assets\/blog\/cd4c5d36be7aa86569d4aaf04db74854d214732e-6016x4016-1_2786775411\/cd4c5d36be7aa86569d4aaf04db74854d214732e-6016x4016-1_2786775411.jpg?_i=AA\",\"datePublished\":\"2021-05-18T22:01:58+00:00\",\"description\":\"In this article, we will see how to create a web app that generates social images automatically. The service will generate HTML content dynamically, based on a request, generate a \\\"snapshot\\\" of the content, and return it to the requester as an image.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926052\/Web_Assets\/blog\/cd4c5d36be7aa86569d4aaf04db74854d214732e-6016x4016-1_2786775411\/cd4c5d36be7aa86569d4aaf04db74854d214732e-6016x4016-1_2786775411.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926052\/Web_Assets\/blog\/cd4c5d36be7aa86569d4aaf04db74854d214732e-6016x4016-1_2786775411\/cd4c5d36be7aa86569d4aaf04db74854d214732e-6016x4016-1_2786775411.jpg?_i=AA\",\"width\":6016,\"height\":4016},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Automate Social Images with Next.js and Puppeteer\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"name\":\"Cloudinary Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cloudinary.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\",\"name\":\"Cloudinary Blog\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"width\":312,\"height\":60,\"caption\":\"Cloudinary Blog\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Automate Social Images with Next.js and Puppeteer","description":"In this article, we will see how to create a web app that generates social images automatically. The service will generate HTML content dynamically, based on a request, generate a \"snapshot\" of the content, and return it to the requester as an image.","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:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/","og_locale":"en_US","og_type":"article","og_title":"Automate Social Images with Next.js and Puppeteer","og_description":"In this article, we will see how to create a web app that generates social images automatically. The service will generate HTML content dynamically, based on a request, generate a \"snapshot\" of the content, and return it to the requester as an image.","og_url":"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/","og_site_name":"Cloudinary Blog","article_published_time":"2021-05-18T22:01:58+00:00","og_image":[{"width":6016,"height":4016,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926052\/Web_Assets\/blog\/cd4c5d36be7aa86569d4aaf04db74854d214732e-6016x4016-1_2786775411\/cd4c5d36be7aa86569d4aaf04db74854d214732e-6016x4016-1_2786775411.jpg?_i=AA","type":"image\/jpeg"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/"},"author":{"name":"","@id":""},"headline":"Automate Social Images with Next.js and Puppeteer","datePublished":"2021-05-18T22:01:58+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/"},"wordCount":8,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926052\/Web_Assets\/blog\/cd4c5d36be7aa86569d4aaf04db74854d214732e-6016x4016-1_2786775411\/cd4c5d36be7aa86569d4aaf04db74854d214732e-6016x4016-1_2786775411.jpg?_i=AA","keywords":["Guest Post","Image","Next.js","Under Review"],"inLanguage":"en-US","copyrightYear":"2021","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/","url":"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/","name":"Automate Social Images with Next.js and Puppeteer","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926052\/Web_Assets\/blog\/cd4c5d36be7aa86569d4aaf04db74854d214732e-6016x4016-1_2786775411\/cd4c5d36be7aa86569d4aaf04db74854d214732e-6016x4016-1_2786775411.jpg?_i=AA","datePublished":"2021-05-18T22:01:58+00:00","description":"In this article, we will see how to create a web app that generates social images automatically. The service will generate HTML content dynamically, based on a request, generate a \"snapshot\" of the content, and return it to the requester as an image.","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926052\/Web_Assets\/blog\/cd4c5d36be7aa86569d4aaf04db74854d214732e-6016x4016-1_2786775411\/cd4c5d36be7aa86569d4aaf04db74854d214732e-6016x4016-1_2786775411.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926052\/Web_Assets\/blog\/cd4c5d36be7aa86569d4aaf04db74854d214732e-6016x4016-1_2786775411\/cd4c5d36be7aa86569d4aaf04db74854d214732e-6016x4016-1_2786775411.jpg?_i=AA","width":6016,"height":4016},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/guest_post\/automate-social-images-next-puppeteer\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Automate Social Images with Next.js and Puppeteer"}]},{"@type":"WebSite","@id":"https:\/\/cloudinary.com\/blog\/#website","url":"https:\/\/cloudinary.com\/blog\/","name":"Cloudinary Blog","description":"","publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudinary.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cloudinary.com\/blog\/#organization","name":"Cloudinary Blog","url":"https:\/\/cloudinary.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","width":312,"height":60,"caption":"Cloudinary Blog"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":""}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926052\/Web_Assets\/blog\/cd4c5d36be7aa86569d4aaf04db74854d214732e-6016x4016-1_2786775411\/cd4c5d36be7aa86569d4aaf04db74854d214732e-6016x4016-1_2786775411.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/27866","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=27866"}],"version-history":[{"count":0,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/27866\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/27867"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=27866"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=27866"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=27866"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}