SEO & AEO: Is Your Blog Technically Optimized for AI and Search Engine?

SEO & AEO: Is Your Blog Technically Optimized for AI and Search Engine?
Amice Wong
2 weeks, 4 days ago
4 min read
SEO & AEO: Is Your Blog Technically Optimized for AI and Search Engine?

Why I chose MDX for Next.js over Django and Blocknote.

You write a blog? Great. You add your favorite keywords. Ideally, both Google search and AI agents will love it.

We used to only talk about SEO (Search Engine Optimization). Today, we have to cater AEO (Answer Engine Optimization) we well. Bots from OpenAI, Google Gemini, and Perplexity are crawling your site to decide if you are an authority worth citing.

AI bots and Google Search Engine don't have eyes. They have parsers. And if your technical setup is "noisy," your message gets lost in the static.

Here is how the four most common blogging methods compare under the "Chrome Inspect" microscope.

The Comparison: Signal vs. Noise

1. MDX (The Choice for Closmore)

  • SEO/AEO Strength: ⭐⭐⭐⭐⭐
  • HTML Cleanliness: Ultra Clean. It produces pure, semantic HTML (like <section> and <p>). (as follow)
  • The Logic: This is the "Gold Standard." It allows me to write like a human (Markdown) but render like a pro. There is zero "junk code." Every byte of data sent to the crawler is pure content.


2. Blocknote (The Choice for Insprana)

  • SEO/AEO Strength: ⭐⭐⭐
  • HTML Cleanliness: Messy. Because these are "Block Editors" (like Notion), they wrap every single sentence in 5 or 6 layers of <div> tags like bn-block-outer and bn-inline-content. (as follow)
  • The Logic: Great for a personal "Notes" app where user experience is the only goal. But for a public blog? The "Signal-to-Noise" ratio is poor. You are making the AI bot work too hard to find your keywords


3. Standard HTML / Hardcoded JSX

  • SEO/AEO Strength: ⭐⭐⭐⭐
  • HTML Cleanliness: Good. It’s as clean as you write it. (similar to #1 above)
  • The Logic: Very reliable, but it’s "Rigid." If you want to change the font size of 50 articles, you have to edit 50 files. It doesn't scale for a Founder who needs to move fast.

4. Django Summernote (The Choice for amice.dev)

  • SEO/AEO Strength: ⭐⭐⭐⭐⭐
  • HTML Cleanliness: Ultra Clean. WYSIWYG editors (What You See Is What You Get). It produces pure, semantic HTML (like <h1>, <h2> and <p>). (as follow)
  • The Logic: This was the classic way to build a CMS. Blogging is within the native design of Django project itself. For being just a blogging site, I would choose Django with no doubt. It is fast, native, and reliable.


Amice.Dev has been launched for 3 months since Dec 2025, the AI results are encouraging. Of course, it can always be better.


Judgement: Why I Chose MDX for the SalesOS

If Django is so clean, why am I moving to MDX for my new project? Because Closmore.com is more than just a blog.

It is a platform that powers the Closmore LinkedIn Sidebar via API and hosts the Closmore Qualifier—a live, interactive AI demo. Here is how I made the choice:

  • Django is for "Reading": It excels at delivering text. If my goal was 100% SEO for a standard blog, I would stay with Django. amice.dev here is built from Django framework.
  • Next.js/MDX is for "Doing": Since Closmore requires a high level of interactivity (the Qualifier tool) and complex React components (like my custom Observation Boxes), I need the power of JavaScript (ie. the Next.js framework)

The Decision

In the "Next.js world," I can embed the software directly into the stories. I don't want to just tell you about sales strategy; I want to show you the tool working in the middle of the article.

I am sacrificing the "Native Simplicity" of Django to get the "Interactive Power" of Next.js.

Conclusion

If you are just writing for yourself, use whatever is easy. But if you are building an Audience Base and you want to be found by the next generation of AI search engines, you need to minimize the noise.

I’m moving amice.dev to MDX now. It was a technical "hurdle," but for the sake of SEO and AEO, it was the only logical choice.

In my next post, I will share the step-by-step guide on how I implemented this in Next.js, including the source code for my custom style mapping.

Great job! Take a coffee break before reading more Amice's articles :P

⁠Simplicity is prerequisite for reliability_Amice_Dev
⁠Simplicity is prerequisite for reliability. ⁠Without clarity, systems become fragile and unpredictable.

Related blogs

Why Build a Blog You Truly Own?  |  Build & Monetize Your Django Blog, Ch. 1
Why Build a Blog You Truly Own? | Build & Monetize Your Django Blog, Ch. 1

By Amice Wong

Read more
Leveraging BlockNote to Build an Embedded Breathing App in Next.js
Leveraging BlockNote to Build an Embedded Breathing App in Next.js

By Amice Wong

Read more
Next.js "Level 10" Severe Security Risk (CVE-2025-66478): A Survival Note from a User Spoiled by Django
Next.js "Level 10" Severe Security Risk (CVE-2025-66478): A Survival Note from a User Spoiled by Django

By Amice Wong

Read more
[8-Day Closmore SaaS Challenge] Day 8 — Commercially Real — License & Billing
[8-Day Closmore SaaS Challenge] Day 8 — Commercially Real — License & Billing

By Amice Wong

Read more
(function () { if (!window.chatbase || window.chatbase('getState') !== 'initialized') { window.chatbase = (...arguments) => { if (!window.chatbase.q) { window.chatbase.q = []; } window.chatbase.q.push(arguments); }; window.chatbase = new Proxy(window.chatbase, { get(target, prop) { if (prop === 'q') { return target.q; } return (...args) => target(prop, ...args); }, }); } const onLoad = function () { const script = document.createElement('script'); script.src = 'https://www.chatbase.co/embed.min.js'; script.id = 'nJYgZ_-ZeZ-G1qbXzsm6j'; script.domain = 'www.chatbase.co'; document.body.appendChild(script); }; if (document.readyState === 'complete') { onLoad(); } else { window.addEventListener('load', onLoad); } })();