{"id":3205,"date":"2020-03-19T14:26:34","date_gmt":"2020-03-19T14:26:34","guid":{"rendered":"https:\/\/ionicframework.com\/blog\/?p=3205"},"modified":"2020-10-15T21:38:38","modified_gmt":"2020-10-15T21:38:38","slug":"deploying-an-ionic-pwa-to-vercel","status":"publish","type":"post","link":"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel","title":{"rendered":"Deploying an Ionic PWA to Vercel"},"content":{"rendered":"<p>There&#8217;s no shortage of fantastic hosting providers these days. If you&#8217;re looking to deploy a web app, you really can&#8217;t pick wrong. But there are a few that stand out as being the best hosting solution for Progressive Web Apps. Today we&#8217;re going to look at how to deploy an Ionic React app to <a target=\"_blank\" href=\"https:\/\/vercel.com\/\" rel=\"noopener\">Vercel<\/a> and how simple Vercel makes the whole process.<\/p>\n<p><!--more--><\/p>\n<h2>Why Vercel?<\/h2>\n<p>Vercel provides a fast and scalable solution for static sites, JAMstack based web apps, and Serverless Functions. For our use case, we&#8217;re just going to be utilizing the static hosting, but I highly suggest you take a look at the <a href=\"https:\/\/zeit.co\/docs\/v2\/serverless-functions\/introduction\">Serverless portion of their docs<\/a>, as this could be your one stop shop for all your future apps. The serverless features become very compelling though once you consider SSR with Ionic Angular and Ionic React.<\/p>\n<p>With Vercel, we can simply connect an existing app that is on GitHub, configure the build commands, and we&#8217;ll have our app deployed almost instantly.<\/p>\n<h2>The App itself<\/h2>\n<p>For this demo, I&#8217;ll just use a sidemenu based template and use React for my framework. Vercel itself can support more than React, so if you&#8217;re using Angular, the process will be similar.<\/p>\n<p>I&#8217;ll create my app and connect it to a GitHub repo<\/p>\n<pre><code class=\"language-shell\">ionic start zeit-pwa sidemenu --type react\n\ncd zeit-pwa\n\ngit remote add origin git@github.com:mhartington\/zeit-pwa.git\n\ngit push origin master\n<\/code><\/pre>\n<p>For the app portion, this is all we need, so let&#8217;s move over to Vercel&#8217;s dashboard and connect the app.<\/p>\n<h2>Deploying<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1130\" height=\"591\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.07.22-PM.png\" alt=\"\" class=\"aligncenter size-full wp-image-3210 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.07.22-PM.png 1130w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.07.22-PM-300x157.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.07.22-PM-1024x536.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.07.22-PM-768x402.png 768w\" data-sizes=\"auto, (max-width: 1130px) 100vw, 1130px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 1130px; --smush-placeholder-aspect-ratio: 1130\/591;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1130\" height=\"591\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.07.22-PM.png\" alt=\"\" class=\"aligncenter size-full wp-image-3210\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.07.22-PM.png 1130w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.07.22-PM-300x157.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.07.22-PM-1024x536.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.07.22-PM-768x402.png 768w\" sizes=\"auto, (max-width: 1130px) 100vw, 1130px\" \/><\/noscript><\/p>\n<p>From the dashboard, we&#8217;re presented with the option to import a new project. Once we click on that, we&#8217;re given the option to either start from a new template (a blank slate) or import from a git repository. Since our project is already on GitHub, we&#8217;ll select that and connect our GitHub account.<\/p>\n<p>Once connected, we can click &#8220;Import from GitHub&#8221;, search our repositories for the project, and select it. Once we&#8217;ve confirmed the project import, we&#8217;ll be prompted to enter an app name. By default this will just be the repo name, which will be fine for our test. We&#8217;ll hit continue for this and the next prompt which asks us for the project root. Since<br \/>\nour app is not in a mono-repo setup, the default here works just fine.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1130\" height=\"829\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.10.22-PM.png\" alt=\"\" class=\"aligncenter size-full wp-image-3208 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.10.22-PM.png 1130w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.10.22-PM-300x220.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.10.22-PM-1024x751.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.10.22-PM-768x563.png 768w\" data-sizes=\"auto, (max-width: 1130px) 100vw, 1130px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 1130px; --smush-placeholder-aspect-ratio: 1130\/829;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1130\" height=\"829\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.10.22-PM.png\" alt=\"\" class=\"aligncenter size-full wp-image-3208\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.10.22-PM.png 1130w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.10.22-PM-300x220.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.10.22-PM-1024x751.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.10.22-PM-768x563.png 768w\" sizes=\"auto, (max-width: 1130px) 100vw, 1130px\" \/><\/noscript><\/p>\n<p>The next segment is the one that is the most important. We&#8217;ll need to modify the output directory and development command. Since this is a React project, our output directory will be <code>build<\/code>, and our development command will be <code>npm run start<\/code>. For Angular projects, the output directory would be either WWW or the outputPath value in your angular.json and the development command would be <code>npm run start<\/code>. With this information corrected, we can hit deploy and ship our app.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1130\" height=\"829\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.16.19-PM.png\" alt=\"\" class=\"aligncenter size-full wp-image-3207 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.16.19-PM.png 1130w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.16.19-PM-300x220.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.16.19-PM-1024x751.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.16.19-PM-768x563.png 768w\" data-sizes=\"auto, (max-width: 1130px) 100vw, 1130px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 1130px; --smush-placeholder-aspect-ratio: 1130\/829;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1130\" height=\"829\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.16.19-PM.png\" alt=\"\" class=\"aligncenter size-full wp-image-3207\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.16.19-PM.png 1130w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.16.19-PM-300x220.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.16.19-PM-1024x751.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.16.19-PM-768x563.png 768w\" sizes=\"auto, (max-width: 1130px) 100vw, 1130px\" \/><\/noscript><\/p>\n<p>With our project created, it will take about a minute for our app to be built and deployed to a live URL. For my app, the url is <a target=\"_blank\" href=\"https:\/\/zeit-pwa.now.sh\" rel=\"noopener\">zeit-pwa.now.sh<\/a>. All apps deployed through Vercel will be assigned a <code>.now.sh<\/code> suffix domain. But this can be configured to use a custom domain.<\/p>\n<p>With our app now setup and deployed, any time we commit changes and push them to GitHub, Vercel will automatically trigger a new build. Once the build is completed, our app will be deployed and will be live!<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1130\" height=\"911\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.18.23-PM.png\" alt=\"\" class=\"aligncenter size-full wp-image-3206 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.18.23-PM.png 1130w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.18.23-PM-300x242.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.18.23-PM-1024x826.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.18.23-PM-768x619.png 768w\" data-sizes=\"auto, (max-width: 1130px) 100vw, 1130px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 1130px; --smush-placeholder-aspect-ratio: 1130\/911;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1130\" height=\"911\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.18.23-PM.png\" alt=\"\" class=\"aligncenter size-full wp-image-3206\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.18.23-PM.png 1130w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.18.23-PM-300x242.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.18.23-PM-1024x826.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/Screen-Shot-2020-03-17-at-12.18.23-PM-768x619.png 768w\" sizes=\"auto, (max-width: 1130px) 100vw, 1130px\" \/><\/noscript><\/p>\n<h2>Parting thoughts<\/h2>\n<p>The Vercel product suit is quite a compelling service. Given its easy integration with popular frameworks\/libraries, simple setup with existing Git repositories, and overall speed, it&#8217;s pretty obvious why it&#8217;s starting to look like a premier solution for PWAs. There&#8217;s a lot more that can be done with Vercel, so be sure to check out their documentation. Cheer!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>There&#8217;s no shortage of fantastic hosting providers these days. If you&#8217;re looking to deploy a web app, you really can&#8217;t pick wrong. But there are a few that stand out as being the best hosting solution for Progressive Web Apps. Today we&#8217;re going to look at how to deploy an Ionic React app to Vercel [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":3211,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"publish_to_discourse":"","publish_post_category":"","wpdc_auto_publish_overridden":"","wpdc_topic_tags":"","wpdc_pin_topic":"","wpdc_pin_until":"","discourse_post_id":"","discourse_permalink":"","wpdc_publishing_response":"","wpdc_publishing_error":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1,121,124],"tags":[3,22,33,136,175],"class_list":["post-3205","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-all","category-engineering","category-tutorials","tag-ionic","tag-progressive-web-apps","tag-pwa","tag-react","tag-zeit"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v23.0 (Yoast SEO v23.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Deploying an Ionic PWA to Vercel - Ionic Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Deploying an Ionic PWA to Vercel\" \/>\n<meta property=\"og:description\" content=\"There&#8217;s no shortage of fantastic hosting providers these days. If you&#8217;re looking to deploy a web app, you really can&#8217;t pick wrong. But there are a few that stand out as being the best hosting solution for Progressive Web Apps. Today we&#8217;re going to look at how to deploy an Ionic React app to Vercel [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel\" \/>\n<meta property=\"og:site_name\" content=\"Ionic Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-03-19T14:26:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-10-15T21:38:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/zeit-ionic.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1600\" \/>\n\t<meta property=\"og:image:height\" content=\"880\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Mike Hartington\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mhartington\" \/>\n<meta name=\"twitter:site\" content=\"@ionicframework\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mike Hartington\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. 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:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel#article\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel\"},\"author\":{\"name\":\"Mike Hartington\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/c8c92b04d526adb925ea514c619a267b\"},\"headline\":\"Deploying an Ionic PWA to Vercel\",\"datePublished\":\"2020-03-19T14:26:34+00:00\",\"dateModified\":\"2020-10-15T21:38:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel\"},\"wordCount\":616,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/zeit-ionic.png\",\"keywords\":[\"Ionic\",\"Progressive Web Apps\",\"PWA\",\"react\",\"Zeit\"],\"articleSection\":[\"All\",\"Engineering\",\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel\",\"url\":\"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel\",\"name\":\"Deploying an Ionic PWA to Vercel - Ionic Blog\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel#primaryimage\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/zeit-ionic.png\",\"datePublished\":\"2020-03-19T14:26:34+00:00\",\"dateModified\":\"2020-10-15T21:38:38+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel#primaryimage\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/zeit-ionic.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/zeit-ionic.png\",\"width\":1600,\"height\":880},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ionic.io\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Deploying an Ionic PWA to Vercel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/ionic.io\/blog\/#website\",\"url\":\"https:\/\/ionic.io\/blog\/\",\"name\":\"ionic.io\/blog\",\"description\":\"Build amazing native and progressive web apps with the web\",\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/ionic.io\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/ionic.io\/blog\/#organization\",\"name\":\"Ionic\",\"url\":\"https:\/\/ionic.io\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png\",\"width\":1920,\"height\":854,\"caption\":\"Ionic\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/ionicframework\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/c8c92b04d526adb925ea514c619a267b\",\"name\":\"Mike Hartington\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/08\/mike-headshot-2-smaller-150x150.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/08\/mike-headshot-2-smaller-150x150.png\",\"caption\":\"Mike Hartington\"},\"description\":\"Director of Developer Relations\",\"sameAs\":[\"https:\/\/twitter.com\/mhartington\",\"https:\/\/x.com\/mhartington\"],\"url\":\"https:\/\/ionic.io\/blog\/author\/mike\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Deploying an Ionic PWA to Vercel - Ionic 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:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel","og_locale":"en_US","og_type":"article","og_title":"Deploying an Ionic PWA to Vercel","og_description":"There&#8217;s no shortage of fantastic hosting providers these days. If you&#8217;re looking to deploy a web app, you really can&#8217;t pick wrong. But there are a few that stand out as being the best hosting solution for Progressive Web Apps. Today we&#8217;re going to look at how to deploy an Ionic React app to Vercel [&hellip;]","og_url":"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel","og_site_name":"Ionic Blog","article_published_time":"2020-03-19T14:26:34+00:00","article_modified_time":"2020-10-15T21:38:38+00:00","og_image":[{"width":1600,"height":880,"url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/zeit-ionic.png","type":"image\/png"}],"author":"Mike Hartington","twitter_card":"summary_large_image","twitter_creator":"@mhartington","twitter_site":"@ionicframework","twitter_misc":{"Written by":"Mike Hartington","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel#article","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel"},"author":{"name":"Mike Hartington","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/c8c92b04d526adb925ea514c619a267b"},"headline":"Deploying an Ionic PWA to Vercel","datePublished":"2020-03-19T14:26:34+00:00","dateModified":"2020-10-15T21:38:38+00:00","mainEntityOfPage":{"@id":"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel"},"wordCount":616,"commentCount":0,"publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"image":{"@id":"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/zeit-ionic.png","keywords":["Ionic","Progressive Web Apps","PWA","react","Zeit"],"articleSection":["All","Engineering","Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel","url":"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel","name":"Deploying an Ionic PWA to Vercel - Ionic Blog","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel#primaryimage"},"image":{"@id":"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/zeit-ionic.png","datePublished":"2020-03-19T14:26:34+00:00","dateModified":"2020-10-15T21:38:38+00:00","breadcrumb":{"@id":"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel#primaryimage","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/zeit-ionic.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/zeit-ionic.png","width":1600,"height":880},{"@type":"BreadcrumbList","@id":"https:\/\/ionic.io\/blog\/deploying-an-ionic-pwa-to-vercel#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ionic.io\/blog"},{"@type":"ListItem","position":2,"name":"Deploying an Ionic PWA to Vercel"}]},{"@type":"WebSite","@id":"https:\/\/ionic.io\/blog\/#website","url":"https:\/\/ionic.io\/blog\/","name":"ionic.io\/blog","description":"Build amazing native and progressive web apps with the web","publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ionic.io\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ionic.io\/blog\/#organization","name":"Ionic","url":"https:\/\/ionic.io\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png","width":1920,"height":854,"caption":"Ionic"},"image":{"@id":"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/ionicframework"]},{"@type":"Person","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/c8c92b04d526adb925ea514c619a267b","name":"Mike Hartington","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/08\/mike-headshot-2-smaller-150x150.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/08\/mike-headshot-2-smaller-150x150.png","caption":"Mike Hartington"},"description":"Director of Developer Relations","sameAs":["https:\/\/twitter.com\/mhartington","https:\/\/x.com\/mhartington"],"url":"https:\/\/ionic.io\/blog\/author\/mike"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/zeit-ionic.png","_links":{"self":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/3205","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/comments?post=3205"}],"version-history":[{"count":0,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/3205\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media\/3211"}],"wp:attachment":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media?parent=3205"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/categories?post=3205"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/tags?post=3205"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}