PWA
I stopped calling a site a PWA until I verified Googlebot sees content, not a loading spinner – the app-like shell is useless if it has zero organic traffic.
Start here
- Test rendering in Google Search Console’s URL Inspection Tool before you do anything else – if the HTML is empty, your PWA is invisible.
- Only invest in a PWA if you have returning visitors and a clear use case for offline or push notifications; a static blog does not need one.
- Use server-side rendering or pre-rendering for any page you want indexed; client-side routing without real <a> tags hides content from Google.
- Manage your service worker cache versions carefully – a stale cache serves outdated content to users and Googlebot alike.
- Check iOS Safari limitations separately; push notifications and background sync do not work on iPhones, so plan accordingly.
Plain-English take
A PWA is a website that you can install on your phone like a native app, but underneath it is still HTML, CSS and JavaScript. The SEO trap is that because PWAs rely on JavaScript to function, you can accidentally build a site that looks great in a browser but shows Googlebot a blank page. I would not call a site a PWA until I have verified that Google can render the content without the JavaScript execution – that means server-side rendering, pre-rendering, or at least a solid fallback. The progressive part means it should work as a normal website first, then enhance. If your site works without JavaScript for the initial load, you are half way there. Think of a hotel booking site where the search results page is generated client-side. The HTML Googlebot sees is just <div id="root"></div>. No hotel names, no prices. That page will not rank for anything. My rule: if you cannot make your site function without JavaScript for the first meaningful paint, you are not building a PWA – you are building an app that happens to live on the web.
When it actually matters
A PWA makes sense when you have a high percentage of returning visitors on mobile who would benefit from offline access or push notifications. I worked on a travel booking site where installing the PWA increased return visits by 3.2 times. The offline caching of itinerary pages let users check booking details without a signal. But if your site is a blog with mostly one-time readers from social media, the PWA overhead – the manifest, the service worker, the JavaScript bundle – adds load time and dev cost with little return. There is also a geographic nuance: in markets with expensive or unreliable data, an offline-cached PWA can be a differentiator. The counter-argument is that a well-optimised responsive site can achieve similar load times without the complexity. I would only prioritise a PWA if you have at least 40% returning visitors and a use case for offline or native-like engagement. One edge case: Apple’s Safari still does not support push notifications from PWAs on iOS, so if your audience is iPhone-heavy, do not rely on that feature.
How it shows up
For the user, a PWA appears as an install prompt in the browser after certain criteria are met (a service worker, a manifest, HTTPS, and regular visits). Once installed, it opens in its own window without browser chrome. The manifest.json defines icons, the start URL, and the display mode. The service worker intercepts network requests and caches assets for offline use. For Google, it is still a web page. Googlebot uses a renderer that executes JavaScript, but it has limits: it will not wait indefinitely, and it often skips background tasks. If your service worker caches a loading screen as the first response, Googlebot will see that loading screen for every page. I test three URLs per page type using the URL Inspection Tool. If the rendered text is under 100 characters of actual content, I flag it as an indexing risk. Internal links must be real <a> tags with href attributes; click handlers on <div> elements break crawlability. For more detail on this, read my notes on [JavaScript SEO](/javascript-seo/).
The tradeoffs
The biggest tradeoff is between app-like experience and crawlability. Server-side rendering (SSR) solves indexing but adds server cost and complexity – every request requires Node.js processing. Pre-rendering is simpler: you generate static HTML at build time. But that breaks if your content changes frequently. I pre-rendered a news site once, but the cache was set to 24 hours; any breaking news was outdated after an hour. Dynamic rendering (serving pre-rendered content to Googlebot and client-side pages to users) seems like a middle ground, but it doubles your server cost and debugging effort. The service worker adds another layer of complexity: cache aggressively for offline users, but that same cache can serve stale content if you forget to version it. My decision rule: if content changes less than once a day, use pre-rendering. If it changes hourly, you need SSR or incremental static regeneration. If you cannot commit to any of these, stick with a regular responsive site and focus on [Core Web Vitals](/core-web-vitals/) instead. A PWA is not automatically better for SEO than a fast, mobile-friendly website.
What I got wrong
My first PWA project was a recruitment site. I thought adding a manifest and a service worker made it a PWA. I used create-react-app with no pre-rendering. Googlebot got a shell with a loading spinner. It took me three weeks to realise that my beautiful offline-enabled app had zero organic traffic – every page returned the same empty <div>. I switched to pre-rendering with a static site generator, but then the offline caching broke because the pre-rendered files did not match the client-side routes. I ended up migrating to server-side rendering with Next.js. Another mistake: I set VERSION = '1.0' in the service worker cache key and forgot to increment it for weeks. Users and Googlebot saw stale job listings. I also assumed all browsers support all PWA features equally – Safari on iOS still does not support push notifications or background sync. Now I always run a quick [SEO audit](/seo-audit/) on the rendered output before celebrating any PWA launch.
If this is your problem today, [Technical SEO Audit Service](/technical-seo-audit-service/) and [Performance Optimisation](/performance-optimization/) are the notes I'd open next.
Next step
Quick answers
Does a PWA automatically improve my search rankings?
No, a PWA itself does not give a ranking boost. What matters is user experience signals like page speed, mobile-friendliness, and HTTPS – which a good PWA can improve. But if your PWA is slow to render or hides content, it hurts rankings. Focus on the underlying [performance optimisation](/performance-optimisation/) first.
Can I convert my existing WordPress site into a PWA?
Yes, you can use plugins like PWA for WP or SuperPWA, but be careful. Many plugins add a manifest and service worker without addressing JavaScript rendering. You still need to ensure your pages are crawlable. I recommend running a [mobile SEO](/mobile-seo/) test after installation to check if Googlebot sees real content.
Do I need HTTPS for a PWA?
Yes, service workers require HTTPS on the live site. Localhost is allowed for development, but once deployed, HTTPS is mandatory. If you are on a shared host without SSL, you cannot use a PWA. The manifest file also prefers HTTPS. Check your [sitemap](/what-is-a-sitemap/) to confirm all URLs use the secure protocol.
How do I check if Google is indexing my PWA pages?
Use the URL Inspection Tool in Google Search Console. Enter a PWA URL and click 'Test Live URL'. Then view the rendered HTML. If it shows your content, you are fine. If it shows a blank shell or a loading spinner, you have a rendering problem. Fix it before submitting the URL for indexing.
Sources
Primary documentation is linked directly. Anything commercial is marked nofollow.
- Google Search Central — Official guidance on JavaScript rendering, crawlability, and mobile-friendly behaviour for PWAs.
- web.dev PWA guidance — Explains the core PWA model, installability, offline support, and single-codebase behaviour.
- MDN Web Docs — Clear technical definition of PWAs and the web platform features they rely on, such as service workers.
- Microsoft Learn — Implementation overview from a major browser vendor, useful for understanding cross-browser differences.
Notes from Callum Bennett.