TITLE: SEO Insights: A Story of Losing Sight of the Big Picture, and My Fix Today DESCRIPTION: I had configured AI-SEO’s robots.txt and JSON-LD, but missed setting the most important URL keywords and descriptions. BODY:
In “Datafox Project Completion Postscript”, I proudly introduced how I used JSON-LD for AI-SEO, how I embedded Person Schema into extend_head.html to help Perplexity recognize me, and how I made AI search engines understand my technical boundaries. At the time, I thought I was doing something really impressive.
About two months later, I opened Google Analytics and discovered a problem.
Almost all my traffic came from my own promotion. Every time I posted → shared on LinkedIn → shared in groups → traffic would spike briefly → then disappear.
Organic search? Almost zero. I was incredibly sad; when I posted on Medium before, I could attract organic traffic, but here, there’s almost none. Pathetic.
1. What Exactly Did I Miss?
This made me a bit embarrassed, because an SEO article I wrote before was, in some ways, teaching others how to do SEO. But I overlooked a huge problem: I did “advanced SEO for the AI era” but skipped the most basic things.
For example, my article URLs looked like this:
https://datafox.tw/posts/260303_2222/
This string of numbers is meaningless to Google. Google doesn’t know what this article is about, so it can’t push it out when someone searches for relevant keywords. One reason Medium articles are searchable is that Medium’s URLs look like this:
https://datafox-tw.medium.com/datafox-竣工後記-2026-個人網站實戰指南-從-想要一個網站-到真正上線-3ae9d5a615b7
At a glance, you know what it’s about.
Then there’s the article description. I checked, and 17 out of 25 articles had a blank description:
description: ""
This means that when Google crawled my articles, it didn’t know what summary to display in the search results. It had to guess. The guessed summaries usually don’t look good, and naturally, the click-through rate isn’t high.
Furthermore, I never actively told Google that my website existed. I had robots.txt, I had a sitemap, but I never submitted them to Google Search Console. I only knew about GA4 before, but I didn’t use GSC, which left my organic traffic desolate, especially since this task only takes three minutes to complete.
2. Four Things I Did Today
2.1 Make URLs Human-Readable
Add slug to the front matter of each article to make the new canonical URL include keywords:
slug: verbose-ai-agent-financial-risk
aliases: ["/posts/260416_2200/"]
slug is the new URL, and aliases automatically redirects the old date-based URL, preventing 404 errors.
To avoid manually crafting each one, I wrote a script that uses Gemini to read article titles, automatically generate 3-6 English word slugs, and then batch write them into the front matter.
2.2 Complete the Descriptions
Another script. It uses Gemini to read the first 800 characters of each article and generate a 40-120 Chinese character meta description that includes keywords and doesn’t sound as stiff as a machine summary.
This text is the description displayed below the title in search results. Its impact on click-through rate is greater than most people imagine.
2.3 Submit to Google Search Console
Go to Search Console to verify the domain (I used GoDaddy DNS verification), then submit the sitemap:
https://datafox.tw/sitemap.xml
The system reported: Success, 67 pages discovered.
I hadn’t done this step before, meaning Google relied entirely on its own crawling, which was very inefficient and slow. Now, at least Google knows I exist.
2.4 Add Open Graph Cover Images
Without an OG image, when an article is shared on LinkedIn or LINE groups, the preview card will be blank (or randomly grab a strange image).
Add a line in hugo.yaml:
params:
images: ["images/Open_graph_image.png"]
This sets this image as the default for the entire site. If a specific article needs a different image later, just override it in the front matter using cover.image.
3. Reflection: “Impressive-Looking” vs. “Fundamentals”
When I was working on JSON-LD and Person Schema, I had a peculiar sense of accomplishment. Those things looked very professional, very AI-native, very “2026 SEO.”
But I skipped description, URL slug, and Google Search Console—things that seem boring and have been written about everywhere.
I think this is probably a typical bias: because something feels “too basic,” one assumes it’s already done. Then, after going through a long detour to do advanced things, you turn back only to find the foundation wasn’t laid properly.
It’s not entirely wasted, though. JSON-LD is indeed useful for AI search engines, and tools like Perplexity refer to schemas when crawling structured data. But these are “bonus points,” not “baseline requirements.”
If the baseline isn’t met, bonus points are just points added in a place no one sees.
Doing SEO is like writing code: first make it work, then make it work well.
If you’re also running a personal website with Hugo + GitHub Pages, the four things above are the most worthwhile items to check first. I’ve put the scripts in scripts/gen_descriptions.py and scripts/gen_slugs.py; feel free to refer to and adapt them if needed. (Please find the source code on GitHub)