<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Tinos Web Dev Notes]]></title><description><![CDATA[Tinos Web Dev Notes]]></description><link>https://tinosweb.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Wed, 04 Nov 2026 14:04:41 GMT</lastBuildDate><atom:link href="https://tinosweb.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[A Technical SEO Checklist for Small Multilingual Business Websites]]></title><description><![CDATA[Most of my work is building small-business websites in Tinos, Greece: guesthouses, local shops, professionals and seasonal tourism businesses. These sites…]]></description><link>https://tinosweb.hashnode.dev/a-technical-seo-checklist-for-small-multilingual-business-websites</link><guid isPermaLink="true">https://tinosweb.hashnode.dev/a-technical-seo-checklist-for-small-multilingual-business-websites</guid><category><![CDATA[SEO]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[HTML]]></category><dc:creator><![CDATA[Panagiotis Papoutsis]]></dc:creator><pubDate>Sat, 31 Oct 2026 17:18:06 GMT</pubDate><content:encoded><![CDATA[<p>Most of my work is building <a href="https://tinosweb.gr/en/">small-business websites in Tinos, Greece</a>: guesthouses, local shops, professionals and seasonal tourism businesses. These sites are small, often a handful of pages, but they're almost always <strong>multilingual</strong>, because the visitors are Greek, German, French, Italian and more.</p>
<p>Small multilingual sites have a specific set of technical SEO problems. None of them are hard, but they are easy to get wrong. Here's the checklist I go through before launch.</p>
<h2>1. One protocol, one host, one URL per page</h2>
<p>Pick a single canonical origin (for example <code>https://example.gr</code>) and 301-redirect everything else to it:</p>
<ul>
<li><code>http://example.gr</code> → <code>https://example.gr</code></li>
<li><code>http://www.example.gr</code> → <code>https://example.gr</code></li>
<li><code>https://www.example.gr</code> → <code>https://example.gr</code></li>
</ul>
<p>Test all four variants with <code>curl -I</code>. A surprisingly common failure is that the HTTPS version works perfectly while plain HTTP returns an error, often because a CDN or proxy in front of the server isn't configured to redirect. Old links, printed flyers and some crawlers still hit <code>http://</code>.</p>
<p>Then add a self-referencing canonical on every page:</p>
<pre><code class="language-html">&lt;link rel="canonical" href="https://example.gr/en/"&gt;
</code></pre>
<p>Also watch for duplicate entry points such as <code>/index.php</code> returning <code>200</code> instead of redirecting to <code>/</code>.</p>
<h2>2. Use language subfolders and real hreflang</h2>
<p>For small sites, subfolders (<code>/</code>, <code>/en/</code>, <code>/de/</code>, <code>/fr/</code>) are the simplest structure: one domain, one hosting setup, shared authority.</p>
<p>Every language version should list <strong>all</strong> alternates, including itself, plus an <code>x-default</code>:</p>
<pre><code class="language-html">&lt;link rel="alternate" hreflang="el" href="https://example.gr/"&gt;
&lt;link rel="alternate" hreflang="en" href="https://example.gr/en/"&gt;
&lt;link rel="alternate" hreflang="de" href="https://example.gr/de/"&gt;
&lt;link rel="alternate" hreflang="x-default" href="https://example.gr/"&gt;
</code></pre>
<p>Common mistakes:</p>
<ul>
<li>Alternates that aren't reciprocal (EN points to DE but DE doesn't point back).</li>
<li>Wrong codes (<code>gr</code> is a country, the language is <code>el</code>).</li>
<li>Machine-translated pages with untranslated titles and meta descriptions.</li>
<li>Setting <code>&lt;html lang&gt;</code> incorrectly. Each version needs its own <code>lang="el"</code>, <code>lang="en"</code> and so on.</li>
</ul>
<h2>3. Put hreflang in the sitemap too</h2>
<p>It's optional if the tags are in the HTML, but adding them to the sitemap makes the relationships explicit:</p>
<pre><code class="language-xml">&lt;url&gt;
  &lt;loc&gt;https://example.gr/en/&lt;/loc&gt;
  &lt;xhtml:link rel="alternate" hreflang="el" href="https://example.gr/"/&gt;
  &lt;xhtml:link rel="alternate" hreflang="en" href="https://example.gr/en/"/&gt;
&lt;/url&gt;
</code></pre>
<p>Reference the sitemap in <code>robots.txt</code> and submit it in Google Search Console and Bing Webmaster Tools.</p>
<h2>4. Don't stop at a one-page site</h2>
<p>A single long landing page is fine at launch, but it can only rank for so much. If you offer distinct services, give each one its own URL with its own title, H1 and meta description:</p>
<pre><code>/services/web-design/
/services/local-seo/
/services/hosting/
</code></pre>
<p>Anchor links (<code>/#services</code>) are great for navigation, but search engines index URLs, not page sections. Separate pages also give you something specific to link to when you write articles or build profiles elsewhere.</p>
<h2>5. Get LocalBusiness schema right</h2>
<p>For a local business, JSON-LD structured data helps search engines connect your website with your physical presence:</p>
<pre><code class="language-json">{
  "@context": "https://schema.org",
  "@type": "ProfessionalService",
  "name": "Example Studio",
  "url": "https://example.gr/",
  "telephone": "+30...",
  "address": {
    "@type": "PostalAddress",
    "addressLocality": "Tinos",
    "addressCountry": "GR"
  },
  "sameAs": [
    "https://www.facebook.com/...",
    "https://github.com/..."
  ]
}
</code></pre>
<p>Tips:</p>
<ul>
<li>Use <strong>one</strong> primary business entity rather than several overlapping ones, and give it an <code>@id</code> so other blocks can reference it.</li>
<li>Fill <code>sameAs</code> with your real profiles. An empty array is a missed opportunity.</li>
<li>Only mark up reviews that are genuinely about the entity you're marking up. Testimonials about something else, or reviews collected and displayed on your own site about yourself, are a common reason review rich results get ignored or flagged.</li>
<li>Validate with the Rich Results Test and the Schema.org validator.</li>
</ul>
<h2>6. Write titles and descriptions per language, per page</h2>
<p>Titles should be written for humans in each language, not translated word for word. Keep the brand at the end, keep the separator consistent, and make sure the title tag matches your <code>og:title</code> closely enough that shares look intentional.</p>
<h2>7. Treat mobile performance as a feature</h2>
<p>Small business sites are usually built on themes that load several icon fonts, multiple Google Font families, carousels and animation libraries, often for features the page barely uses. Before launch:</p>
<ul>
<li>Load only the font families and weights you actually use.</li>
<li>Drop unused CSS and JS bundles.</li>
<li>Serve images in modern formats at the displayed size, with <code>width</code>/<code>height</code> set and <code>loading="lazy"</code> below the fold.</li>
<li>Check server response time. A slow TTFB on shared hosting hurts every page.</li>
</ul>
<p>Test with PageSpeed Insights on a mobile profile, and also on a real phone over mobile data.</p>
<h2>8. Make the business verifiable off-site</h2>
<p>Technical SEO doesn't end on your domain. For local businesses, the most valuable step is usually a verified <strong>Google Business Profile</strong> with the same name, phone and address as the website, plus <strong>Bing Places</strong> and the main local directories. Consistent NAP (name, address, phone) data across the web is one of the clearest local signals you can send.</p>
<h2>Wrapping up</h2>
<p>None of this is advanced, but together it's the difference between a site that quietly sits there and one that search engines can understand, trust and show to the right people in the right language. If you want to see how I approach this for local businesses in the Cyclades, <a href="https://tinosweb.gr/">my site</a> is a good place to start.</p>
<hr />
<h2>About the author</h2>
<p><strong>Panagiotis Papoutsis</strong> is a full-stack web developer (PHP, Drupal, Magento, custom builds) with 10+ years of experience and a focus on SEO and web analytics. He runs Tinos Web, building websites and local SEO for small businesses in Tinos and the Cyclades. More at <a href="https://tinosweb.gr/en/">tinosweb.gr</a>.</p>
]]></content:encoded></item></channel></rss>