Technology & AI

  • How My Small Personal Blog Hit 100K Impressions—And the Strange Posts That Made It Happen

    How My Small Personal Blog Hit 100K Impressions—And the Strange Posts That Made It Happen

    Got another year working and learning on the side while keeping my day job. I will write an annual recap later but for now, I want to go back to the first project that I created, michaelshoe.com/.

    I started this personal site aka blog in January 2025 (or maybe Feb. 2025, can’t be sure) as a learning project. Since then, I’ve written over 100 articles (107 at this point) in nearly 2 years. This project has two folds of meanings:

    1. I was going through transitions in life and I wanted to use writing to clear my head
    2. I wanted to get better at using tech

    TL; DR

    Learnings summary:

    1. The biggest lesson: 10% of the product drives 90% of the results. 
    2. An even bigger lesson: you don’t know where results will come from beforehand; often they show up in the most surprising and unexpected place. For example, the biggest contributor to my site’s traffic is a series of solutions to Code in Place problems which I didn’t really expect too much from. 
    3. Search engine favors SOLUTION. If you want to leverage search as a discovery mechanism, create SOLUTIONS to peoples problems. This can mean in the most literal sense – like solutions to test problems!
    4. Other than SOLUTIONS, people also want RESOURCES – like transcripts of stories. For example, if you have a voice transcribe AI company you might create thousands of transcripts to different types of stories to drive traffic.
    5. A field such as finance is searched a lot and Google will try to serve as many relevant pages to a keyword as possible. However, this field is so competitive that your chance to rank high is very low.
    6. Search engine is an intent-solution matching entity in nature. Looking from a different perspective, the relationship between the site showing up on a SERP and the user clicking it is very transactional. After solving the problem, the user will quickly forget who you are and may never come back. This is where other types of platforms/ channels such as social media come in if you want to cultivate a parasocial relationship.

    Intro

    Before I started the blog, things just appeared so difficult in my head, and I just couldn’t push myself to even thinking about creating a site of my own. After I started, things were definitely unfamiliar to me, but I managed to navigate the unknowns by Googling and watching a lot of Youtube tutorials. 

    Until now (Dec. 2025), michaelshoe.com/ has generated close to 109K impressions from Google Search and over 1400 clicks. 

    Aside from all the small learnings here and there, the biggest lesson from this project really comes down to this:

    10% of the product drives 90% of the results.

    The imbalance between my input and output is beyond me. And this is what I mean: a handful of articles drive the bulk of clicks to my blog. It’s not like anything I’ve done before where things are just – “linear” in nature. 

    84 of the 124 posts have 0 clicks.

    In other words, 68% of my writing has never been read by anybody other than me. Well, even I don’t read them after the writing. Only 40 posts have generated traffic and most are extremely low (think low single digitals).

    1 post is responsible for almost half of the site’s traffic.

    48% to be exact. Just from this one post: https://www.michaelshoe.com/checkerboard-karel-solution/

    The post (as well as five other posts) were solutions to coding problems from Code in Place – a free online coding course provided by Stanford University. I participated in Code in Place in 2024, and published these solutions on my personal blog.

    This checkerboard karel solution gets a total of 8620 impressions from Google Search Result Pages, and around 8% of those impressions results into actual clicks to the post, or a total of 692 clicks.

    In addition, it takes time for Google to trust you.

    I wrote the Checkerboard Karel Solution (and other solutions) around May 2024 but it took a year until Code in Place 2025 for the posts to get traffic. This was when Code in Place was held again and probably many learners started to Google the solutions.

    The top 2 posts is responsible for 70% of traffic, and the top 10 posts for 93%.

    Outside of the top 10 posts, page traffic soon gets down to below 10. Posts 28 and beyond all have exactly ONE page visit each. 

    There are not only 1, but 5 ‘Code in Place’ solutions in the top 10 posts.

    I have marked all Code in Place solutions in red and as you can see, 5 of the top 10 posts belong to this category and all top 4 are occupied by it. 

    Each of the top 4 posts ranks as the first for its main keyword. For example, my checkerboard karel solution post is currently ranking just below the Google search bar, and before the Youtube results. Here is its SERP in incognito mode:

    My other series – the Financial Analysis – have huge impressions with close-to-nothing traffic

    The post that generates the most impressions among all is this: https://www.michaelshoe.com/how-to-understand-cash-inflow-and-outflow/

    Which has over 25,000 impressions but because its average position is so far below, it never gets clicked, generating a grand total of 0 traffic.

    I have written many posts in this series and seeing that none got read definitely doesn’t excite me. However it doesn’t really surprise me that much. 

    An unexpected surprise – my Matthew Dicks transcript series have some of the highest click through rate

    I learned storytelling by reading Matthew Dicks’ book “Storyworthy” and got really fascinated by the subject. I went on to watch some of Matthew telling the stories on Youtube and then created transcripts of the stories for further studying. 

    Even though this series of posts don’t have lots of impressions – like the one post with the most impressions only has 345 ranking at 31st – the CTRs are all surprisingly high. 11 of the 20 highest CTR posts are from this storytelling series.

    What to do with all the analysis

    Moving forward, I think it is important to understand all the learnings but I shouldn’t revolve all my writing around it. Like only write about solutions or create resources for people to find. We humans do have the drive to create things and writing can be just purely therapeutic. 

    However, I also have sites that I want to promote via writing, and these learnings can be very useful. This way I won’t waste time writing things with low traffic potential.

  • Should You Noindex Archive Pages in GeoDirectory? (Thin Content & SEO Tips)

    Should You Noindex Archive Pages in GeoDirectory? (Thin Content & SEO Tips)

    Intro

    While working on my TutorLounge project, I started worrying about archive pages with thin content in GeoDirectory.

    For example:

    • Category archives like /student-levels/early-childhood/
    • City archives like /new-york/white-plains/

    Some of these pages had very little content, and I wasn’t sure if they might hurt my SEO.

    So I asked GeoDirectory support: “Should I set certain archive pages as noindex, or just leave them?”

    Here’s what I learned.


    Problem

    GeoDirectory generates a lot of location and category archive pages. But not every city or category has enough listings to justify its own page.

    Result: you end up with thin pages (basically empty archives). The big question:

    • Do thin pages hurt SEO?
    • Should I noindex them?

    Solution

    The answer depends on your setup.

    1. Use an SEO Plugin (Yoast or Rank Math)

    Both Yoast and Rank Math let you easily control indexing:

    • You can noindex specific categories, tags, or CPT archives.
    • Or you can go page by page and mark thin archives as noindex.

    2. How Google Sees Thin Pages

    According to GeoDirectory support:

    • A few thin pages among strong ones are usually ignored by Google.
    • Having too many thin pages may hurt overall site quality.
    • If you’re unsure, it’s safer to noindex thin or low-value pages.

    3. Decide What to Keep Indexed

    • Keep indexed: important cities, strong categories with good listings.
    • Set noindex: small cities or categories with little/no content.

    Extra Notes

    • Sometimes Google automatically doesn’t rank thin pages — so you don’t always need to panic.
    • But manually setting noindex gives you more control and keeps your sitemap cleaner.
    • If you later add more listings to those thin pages, you can always remove the noindex tag.

    Conclusion

    Thin archive pages are common in GeoDirectory sites, but they don’t have to ruin your SEO.

    👉 Rule of thumb:

    • Keep high-value archives indexed.
    • Noindex thin/empty ones using Yoast or Rank Math.

    This way, you keep Google focused on your best content while still building out your site’s structure.

  • Fixing Sticky Columns on Mobile in GeoDirectory (Blockstrap)

    Fixing Sticky Columns on Mobile in GeoDirectory (Blockstrap)

    Intro

    After setting up my sticky sidebar column in GeoDirectory, it looked great on desktop.

    But when I checked on mobile, things broke — instead of stacking nicely under the main content, the sidebar turned into a slim, squished column.

    Here’s how I fixed it.


    Problem

    On desktop: sidebar = 25% width, content = 75%.
    On mobile: sidebar stayed at 25%, instead of expanding to 100%. This caused an ugly layout.


    Solution

    The trick is to use Blockstrap’s responsive column widths.

    1. Select the parent columns in Blockstrap editor.
    2. In Column Width settings:
      1. On Desktop:
        1. Left content column = 3/12 (25%).
        2. Right sidebar column = 9/12 (75%).
      2. On Mobile:
      3. Both columns = 12/12 (full width).
    3. For the child sticky column inside, always keep it at 12/12 (100% of parent).

    Use the device selector in the column width settings to apply different widths per device.


    Extra Notes

    • This is one of those small Blockstrap features I didn’t realize existed — you can toggle between desktop, tablet, and mobile column widths right in the editor.
    • Once I set them, the sticky sidebar stacked perfectly under the content on mobile.

    Conclusion

    Sticky sidebars don’t have to break your responsive layout. Just set column widths per device (desktop vs. mobile) in Blockstrap, and your design will look great everywhere.

  • How to Make a Sticky Sidebar Column in GeoDirectory (Blockstrap)

    How to Make a Sticky Sidebar Column in GeoDirectory (Blockstrap)

    Intro

    When I was customizing my GeoDirectory search results page, I wanted the right-hand sidebar (with filters) to stay fixed while scrolling — basically a sticky column.

    It’s not obvious how to do this in the Blockstrap editor, but GeoDirectory support showed me the trick.


    Problem

    By default, columns just scroll away with the page. I needed the search filters column to remain visible while the listing results scrolled.


    Solution

    Here’s the simple way to make a column sticky:

    1. In the Blockstrap editor, wrap the sidebar column inside a new BS > Container (col).
      1. Example: Right column → wrap it in its own parent container.
    2. Select that new parent container.
    3. In the Block settings (right panel):
      1. Set Position → sticky-top.
      2. Adjust Sticky offset (in pixels) to control how far from the top it “sticks” when scrolling.

    This keeps the sidebar fixed in place while the main content scrolls.


    Extra Notes

    • In my case, the “old column” was the one containing the GD > Search template part and the GD > Locations widget.
    • The offset is useful if you have a fixed header (so the sticky column doesn’t overlap it).

    Conclusion

    That’s it! Just wrap your sidebar column, set it to sticky-top, and you’ve got yourself a sticky filter column in GeoDirectory.

  • Fix: GeoDirectory Location and Archive Pages Missing from Rank Math Sitemaps

    Fix: GeoDirectory Location and Archive Pages Missing from Rank Math Sitemaps

    Introduction

    I ran into an issue where my GeoDirectory location pages and archive pages weren’t showing up in Rank Math’s sitemaps. This was a problem because without them, Google couldn’t properly crawl my directory site.

    Here’s how I fixed it.


    The Problem

    • Rank Math was only generating sitemaps for my listings, not for my location pages or archive pages.
    • I had added new regions and cities after Rank Math initially created the sitemap, which I suspect was the cause.

    The Solution

    The fix came down to enabling the correct settings with GeoDirectory’s Location Manager addon.

    1. Make sure the Location Manager addon is installed and activated.
    2. Go to: GeoDirectory → Settings → Locations → Settings
    3. Click Show Advanced.
    4. Under Rank Math Sitemaps, select the locations and CPTs (custom post types) you want included.
    5. Rank Math will now generate:
      1. locations/{city} → one sitemap for each city.
      2. businesses/{city} → one sitemap for each CPT in that city.
      3. Plus additional sitemaps for taxonomy archives.

    After enabling this, my missing sitemaps finally appeared.


    Extra Notes

    • If you added new regions or cities after Rank Math already generated the sitemaps, you may need to refresh the cache.
    • This setup ensures each location has its own sitemap, which is great for SEO.

    Conclusion

    If your GeoDirectory location and archive pages aren’t showing up in Rank Math, don’t panic. Just enable them under Location Manager → Rank Math Sitemaps, and they’ll start appearing correctly.