Blog Evolution #1: Redesign, Dual Mode and Optimizations

tr Blogun Evrimi #1: Yeniden Tasarım, Dual Mode ve Optimizasyonlar
Hugo 2

In March 2026, I left the agency where I had been working for 3.5 years, and as a content creator, I began thinking about a website where I could share everything I produce.

Initially, I planned to build a completely tech-focused platform and domain. I even found a pretty sweet domain name and set up its matching social media handles. But then I asked myself, “Why not just continue with my existing personal blog at www.okck.net?" If I ever needed a strict separation or niche specialization down the road, I could always deploy that new domain. At this stage, there was no real reason to build a new infrastructure from scratch. So, I decided to stick with my own name and existing blog.

However, a structural problem arose. Until now, my site had been quite literally “just a blog.” If I was going to showcase the services and solutions I offer in my freelance career, the current setup simply didn’t accommodate that. This forced me to make some critical decisions.

Dual Mode: Life / Work

First, I needed a cover section that briefly introduced me and highlighted my work and expertise. On the other hand, throwing in personal content I’ve been writing since 2004 introduced a serious risk of diluting that professional focus. In the past, I often let work and personal life bleed into each other, and truth be told, I wasn’t very happy with that balance. So I thought, “Why shouldn’t this site have two faces?” That is exactly the point where Life/Work mode was born.

Life/Work mode isn’t just a basic visual theme toggle like Dark/Light mode; it is a complete mental shift. The core intent behind it is to respect the immediate purpose of the visitor. For instance, I didn’t want a potential client or a fellow developer from the ecosystems I’m active in to get distracted by an old vacation memory or a personal opinion piece. Similarly, a visitor who wants to get to know the “human” behind the screen shouldn’t be overwhelmed by codes or technical details.

Right now, when you flip the Life/Work toggle at the top of the site, both the homepage layout and the listed content adapt specifically to that mode. Even the design shifts slightly to support the active context. I plan to add much deeper personalizations to these transitions in the near future.

Multilingual Content

My blog hosts both Turkish and English content. Generally, “Life” mode content leans heavily towards Turkish, while “Work” content is mostly written in English. Making the call to go fully multilingual wasn’t a quick decision.

When brainstorming with AI models, Gemini advised me to “just stick to a single language, ship it, and don’t overcomplicate things.” Claude, on the other hand, referenced Google’s documentation and strongly suggested that I cleanly separate the content based on language context. Digging deeper into the research, I realized that transitioning to a structured multilingual setup was indeed the healthiest path to avoid confusing Google and other search crawlers.

That said, I won’t be publishing every single piece of content in both languages. Translating certain localized posts into English, or global technical deep-dives into Turkish, isn’t always necessary. As my content expands over time, this need will likely disappear entirely. For now, I’ve implemented a simple workaround: if a post doesn’t have a direct equivalent in the other language, I add a clear indicator within the content list along with a link to the alternative language version.

By default, Hugo handles content localization smoothly under respective language subdirectories. However, my custom injection to “show the other language when needed” made the underlying template code a bit messy. As the content pool grows, I will likely refactor this complex logic back to Hugo’s clean, native default behavior.

Restructuring Content

Alongside the Dual Mode rollout, I overhauled my URL architecture and completely stripped out old, date-based link structures. Furthermore, I strictly isolated all content directories from both a Dual Mode and multilingual standpoint.

Behind the scenes, there is now a much better grouped, clean directory architecture. Life content never bleeds into Work spaces, and English posts don’t get lost among Turkish articles. Previously, everything sat in a single root folder. While that didn’t cause issues early on, it was bound to create massive friction as content diversified and frankly, it had already begun flashing early warning signs.

Removing Linked Tags

By default, Hugo comes out of the box with categories and tags taxonomies. When you list an item under these taxonomies, Hugo automatically generates dedicated index pages as links for them.

This blog has been live since 2004. In the older days of the web, stuffing a blog post with a wall of keywords to rank higher on search engines was standard practice. Bloggers used tags much like the hashtag craze that took over social media later on. Naturally, I used this method heavily in the past to group my thoughts.

However, when analyzing my Google Search Console data, I noticed that these tags were creating a massive link graveyard in the background. It was generating a level of clutter that risked triggering duplicate content flags from search engines. These automatic links often led users to low-value pages containing a single archived post. Worse, they forced search crawlers and modern AI agents (LLM bots) to waste crawl budget parsing meaningless index pages. So, I completely disabled linked tag pages.

There are no longer any clickable tag pages on my site. For the old tag URLs already indexed by search engines, I mapped them out in a _redirects file and issued permanent 301 redirects to the most appropriate landing pages. This preserved the site’s SEO health while cutting off unwanted link bloat at the root.

I still tag my posts in the background, but its purpose is strictly internal. If a specific tag reaches a critical mass of high-quality posts in the future, I will deliberately and controlledly graduate that tag into a permanent category.

Of course, I don’t manage this tracking manually. I wrote a custom Python script that runs in the background to govern this entire tag infrastructure, handle cross-language synchronization, and enforce architectural consistency.

What’s Next?

In the upcoming posts of this series, I will analyze my process of stripping Bootstrap out of my blog, how I solved the static site search experience using Pagefind, and the exact steps I took to optimize my PageSpeed scores. Additionally, I’ll share the entire journey step-by-step—ranging from dynamically pulling Google Analytics data to render it on a static Hugo site, to setting up bulletproof redirect automated checks that preserve SEO health, and implementing AI Score optimizations to ensure the site is crawled perfectly by future AI agents.

comments powered by Disqus