← All articles

The 5 Things Your Website Is Probably Missing (That No One Told You About)

Beyond a nice design and clear copy, there are five technical and structural elements that most small business websites are missing — and all of them are quietly costing you visibility, trust, and conversions.

When "Good Enough" Isn't

You've got a website. It looks clean, has your services listed, maybe even a contact form. You're done, right?

Not quite. Most websites — including many built by professional agencies — are missing foundational elements that silently limit their effectiveness. These aren't flashy features. They're infrastructure. And getting them right is what separates a website that works from one that just exists.

1. Structured Data (Schema Markup)

Schema markup is a way of telling search engines — in structured, machine-readable format — exactly what your business is, where it is, what it does, and how to contact it. Without it, Google has to guess. With it, you get rich results in search: star ratings, business hours, FAQs, event dates.

Here's what a LocalBusiness schema looks like in practice. You add this as a <script type="application/ld+json"> tag in your <head>:

{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "Your Business Name",
  "description": "What your business does in one sentence.",
  "url": "https://yourdomain.com",
  "telephone": "+421 900 000 000",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "Hlavná 1",
    "addressLocality": "Bratislava",
    "postalCode": "811 01",
    "addressCountry": "SK"
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "09:00",
      "closes": "17:00"
    }
  ],
  "sameAs": [
    "https://www.linkedin.com/company/your-company",
    "https://www.instagram.com/yourcompany"
  ]
}
SEO and structured data for search engine optimisation

2. A Proper Meta Description Strategy

The meta description is the two lines of text that appear under your page title in Google search results. A good meta description is 130–155 characters, includes a clear value proposition, and is unique to each page:

<!-- ❌ Default / generic — same on every page, no value proposition -->
<meta name="description" content="Welcome to Our Website." />

<!-- ✅ Unique, specific, with a hook -->
<meta
  name="description"
  content="Web design for Slovak businesses that need results, not just a presence. Fast, modern sites built with Next.js. Get a free quote in 24 hours."
/>

3. HTTPS Everywhere

Your website should be accessible only via HTTPS. If you're using Nginx, here's how to force redirect all HTTP traffic to HTTPS:

server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;

    # Redirect all HTTP to HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name yourdomain.com www.yourdomain.com;

    ssl_certificate     /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

    # HSTS: tell browsers to always use HTTPS for this domain
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    # ... rest of your server block
}

4. An XML Sitemap (And Telling Google About It)

An XML sitemap is a file that lists all the important URLs on your website. In Next.js App Router, you can generate one dynamically using a sitemap.ts file:

// app/sitemap.ts
import { MetadataRoute } from 'next';

export default function sitemap(): MetadataRoute.Sitemap {
  const baseUrl = 'https://yourdomain.com';

  return [
    {
      url: baseUrl,
      lastModified: new Date(),
      changeFrequency: 'monthly',
      priority: 1,
    },
    {
      url: `${baseUrl}/blog`,
      lastModified: new Date(),
      changeFrequency: 'weekly',
      priority: 0.8,
    },
    // Add dynamic blog posts:
    // ...posts.map((post) => ({ url: `${baseUrl}/blog/${post.slug}`, ... }))
  ];
}
Web analytics and search console data

5. An Open Graph Image

When someone shares your website on LinkedIn, Twitter, or WhatsApp, what do they see? In Next.js, you can set Open Graph images per page — and even generate them dynamically with ImageResponse:

// app/opengraph-image.tsx
import { ImageResponse } from 'next/og';

export const runtime = 'edge';
export const size = { width: 1200, height: 630 };
export const contentType = 'image/png';

export default function Image() {
  return new ImageResponse(
    (
      <div style={{ background: '#1a1a2e', width: '100%', height: '100%', display: 'flex', flexDirection: 'column', justifyContent: 'center', padding: 80 }}>
        <div style={{ color: '#f7f4ee', fontSize: 64, fontWeight: 700, lineHeight: 1.2 }}>
          Your Brand Name
        </div>
        <div style={{ color: 'rgba(247,244,238,0.6)', fontSize: 28, marginTop: 24 }}>
          Web design for businesses that want results.
        </div>
      </div>
    ),
    { ...size }
  );
}

Infrastructure First, Then Design

The lesson here is that a website is more than what's visible on screen. The technical layer underneath — how it communicates with search engines, how it handles security, how it presents itself across different surfaces — matters enormously for your online performance.

When I build a website, all five of these items are in the initial scope. Not as optional extras. Not as future improvements. As part of what "done" means. Because a beautiful site that nobody can find, that looks broken when shared on social media, or that warns users it's "Not Secure" — isn't really done at all.

Ready to fix these issues on your site?

I build websites that are fast, SEO-optimised, and properly configured from day one. Let's talk about your project.

Start a conversation