Why Your Beautiful Website Is Invisible on Google (And How to Fix It as a Developer)
TL;DR: Google reads your code, not your design. Most developers ship sites that actively hurt their rankings without knowing it. Here are the 7 mistakes I see most often, and how to fix every single one.
You spent weeks perfecting your website. The animations are smooth, the layout is pixel-perfect, the color palette is chef's kiss. You deploy it, share the URL with a few people, and wait for Google to notice.
It doesn't.
Weeks pass. You are still on page 7. Or worse, not indexed at all.
Here is the hard truth: Google does not care how your site looks. It reads your code. And most developers unknowingly write code that makes Google's job harder, or impossible.
I have been building websites for 19+ years and running my own web studio. I see the same SEO mistakes from developers over and over. This article breaks them down and shows you exactly how to fix each one.
1. Your Site Renders Everything in JavaScript
This is the #1 silent killer of developer websites.
If you are building a React, Vue, or Angular SPA without server-side rendering (SSR) or static generation, Googlebot may see a blank <div id="root"></div> and nothing else. Googlebot can render JavaScript, but it is unreliable, slow, and deprioritized.
The fix: Use SSR or static site generation.
| Framework | Approach |
| Next.js | SSR + SSG for React |
| Nuxt | SSR + SSG for Vue |
| Astro | Zero-JS by default, great for content sites |
| Vite + vite-plugin-ssr | Stay close to Vite |
Or at minimum, use dynamic rendering serve pre-rendered HTML to bots, your SPA to users.
# Check what Googlebot actually sees
curl -A "Googlebot" https://yoursite.com
If that returns an empty shell, you have a problem.
Every page on your site should have a unique, keyword-rich <title> and <meta description>. Not the same one. Not a placeholder. Not the app name repeated 10 times.
Bad:
<title>MyApp</title>
<meta name="description" content="Welcome to MyApp.">
Good:
<title>Web Developer in Oslo | React & UI/UX Design - devndespro</title>
<meta name="description" content="Hire a senior web developer in Oslo for fast,
SEO-ready websites and UI/UX design. 19+ years experience. Get a free audit.">
Each page title should target the specific keyword that page is meant to rank for. Think of it as the headline of a newspaper ad. It needs to earn the click.
Quick wins to remember:
- Keep titles under 60 characters
- Keep meta descriptions under 160 characters
- Include your primary keyword naturally in both
3. No Semantic HTML
Google uses your HTML structure to understand what your content means. If everything is a <div>, Google has to guess.
Bad:
<div class="header">
<div class="logo">devndespro</div>
<div class="nav">...</div>
</div>
<div class="content">
<div class="big-title">Web Developer in Norway</div>
<div class="text">We build fast, beautiful websites...</div>
</div>
Good:
<header>
<a href="/" aria-label="devndespro home">
<img src="logo.svg" alt="devndespro logo">
</a>
<nav aria-label="Main navigation">...</nav>
</header>
<main>
<h1>Web Developer in Norway</h1>
<p>We build fast, beautiful websites...</p>
</main>
Key rules to follow:
- Use
<header>, <nav>, <main>, <footer>, <article>, <section>, <aside> correctly
- Only one
<h1> per page it is your primary keyword signal
- Keep a logical heading hierarchy: h1 -> h2 -> h3, never skip levels
4. Slow Core Web Vitals
Google officially uses Core Web Vitals as a ranking signal. If your site is slow, you are being penalized regardless of how good your content is.
The three metrics that matter:
| Metric | What It Measures | Target |
| LCP (Largest Contentful Paint) | How fast the main content loads | Under 2.5s |
| INP (Interaction to Next Paint) | Responsiveness to user input | Under 200ms |
| CLS (Cumulative Layout Shift) | Visual stability | Under 0.1 |
Common mistakes that tank these scores:
- Unoptimized images (no WebP, no lazy loading, no width/height attributes)
- Render-blocking scripts in
<head> without defer or async
- Large unused CSS/JS bundles
- Missing
font-display: swap on custom fonts
- Layout shifts from ads or embeds that load late
Quick code fixes:
<!-- Always set width/height on images to prevent CLS -->
<img
src="hero.webp"
alt="Web developer at work"
width="1200"
height="630"
loading="lazy"
>
<!-- Defer non-critical scripts -->
<script src="analytics.js" defer></script>
<!-- Prevent font layout shift -->
<style>
@font-face {
font-family: 'MyFont';
src: url('font.woff2') format('woff2');
font-display: swap;
}
</style>
Run your site through PageSpeed Insights and aim for 90+ on both mobile and desktop.
5. No Structured Data (Schema Markup)
Structured data tells Google exactly what your content is a business, a product, an article, an FAQ. It unlocks rich results like star ratings, FAQ dropdowns, and breadcrumbs that dramatically increase click-through rates.
LocalBusiness schema (essential if you serve a specific city or region):
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "devndespro",
"description": "Web development and UI/UX design studio in Stavanger, Norway.",
"url": "https://devndespro.com",
"address": {
"@type": "PostalAddress",
"addressLocality": "Stavanger",
"addressCountry": "NO"
}
}
FAQPage schema (great for service pages):
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "How much does a website cost in Norway?",
"acceptedAnswer": {
"@type": "Answer",
"text": "A professional business website in Norway typically costs between 15,000 and 50,000 NOK depending on scope and features."
}
}
]
}
Add these as <script type="application/ld+json"> blocks inside your <head>. Validate with Google's Rich Results Test.
6. Your robots.txt Is Blocking Crawlers
This one is embarrassing when it happens, and it happens more than you would think.
# DO NOT do this on production
User-agent: *
Disallow: /
Also watch for partial blocks that catch more than intended:
# This blocks ALL .html files probably not what you wanted
Disallow: /*.html$
Always check your robots.txt at https://yoursite.com/robots.txt and test it inside Google Search Console under Settings > robots.txt.
7. Not Submitting a Sitemap
Google can discover your pages on its own, but a sitemap tells it exactly what to index and when content was last updated. If you have more than 10 pages, you need one.
Generate it dynamically in Next.js:
// pages/sitemap.xml.js
export async function getServerSideProps({ res }) {
const pages = ['/', '/about', '/services', '/contact'];
const sitemap = `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
${pages.map(page => `
<url>
<loc>https://yoursite.com${page}</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
`).join('')}
</urlset>`;
res.setHeader('Content-Type', 'text/xml');
res.write(sitemap);
res.end();
return { props: {} };
}
Then submit it in Google Search Console > Sitemaps.
The Developer SEO Checklist
Before you ship any website, run through this list:
- [ ] SSR or SSG in place no client-only rendering for content pages
- [ ] Unique
<title> and <meta description> on every single page
- [ ] One
<h1> per page with a logical heading hierarchy below it
- [ ] Semantic HTML throughout (
<header>, <main>, <nav>, etc.)
- [ ] Images in WebP format with width/height attributes and lazy loading
- [ ] Non-critical scripts using
defer or async
- [ ] robots.txt verified with nothing important blocked
- [ ] Sitemap generated and submitted to GSC
- [ ] Schema markup matching your page type (LocalBusiness, FAQ, Article)
- [ ] PageSpeed score 90+ on mobile
Wrapping Up
SEO is not a marketing problem. It is an engineering problem. The decisions you make at the code level determine whether your site gets found or stays invisible.
You do not need to become an SEO expert. You just need to stop writing code that works against search engines.
Fix the fundamentals above and you will outrank 80% of the competition, because most developers never bother to do any of this.
About the author
I am Maha, a full-stack developer and UI/UX designer with 19+ years of experience. I run devndespro, a web development and design studio based in Stavanger, Norway. If you want a free SEO audit of your site, request one here.
Tags: webdev seo javascript beginners