Introduction
In the era we live in, blogs are nothing unusual; in fact, they can be seen everywhere. From the earliest Sohu and Sina blogs, to the Qzone where everyone once recorded their youth, to today's Vlogs and Plogs, it seems that having your own blog is not a difficult thing. However, building a great blog system from scratch is not that simple. Some tech-savvy friends might say that it looks like just CRUD for articles and not that complicated. But is it really? There may be more secrets hidden behind it waiting for us to explore. Let me count the years—I have been building my own blog for 11 years and have seen many programmers writing their own blog systems, but very few are fully functional and designed according to standards and specifications. In this article, I will share my accumulated experience in blog system design and introduce some lesser-known blog technologies to help those who want to build a blog further understand how to design a great blog system.
Table of Contents
Due to the length of the article, it will be divided into 4 parts. The table of contents is as follows:
- The Past and Present of "Blog"
- My Blog Story
- Who Is the Audience of a Blog?
- Key Points of Blog Basic Function Design
- 4.1 Post
- 4.2 Comment
- 4.3 Category
- 4.4 Tag
- 4.5 Archive
- 4.6 Page
- 4.7 Subscription
- 4.8 Version Control
- 4.9 Themes and Personalization
- 4.10 Users and Permissions
- 4.11 Plugins
- 4.12 Image and Attachment Handling
- 4.13 Spam Filtering and Comment Moderation
- 4.14 Static Generation
- 4.15 Notification System
- Blog Protocols or Standards
- 5.1 RSS
- 5.2 ATOM
- 5.3 OPML
- 5.4 APML
- 5.5 FOAF
- 5.6 BlogML
- 5.7 Open Search
- 5.8 Pingback
- 5.9 Trackback
- 5.10 MetaWeblog
- 5.11 RSD
- 5.12 Reader View
- What Knowledge Points Are Involved in Designing a Blog System
- 6.1 Should All Time Zones Use UTC?
- 6.2 HTML or Markdown
- 6.3 MVC or SPA
- 6.4 Security
- Conclusion
The Past and Present of "Blog"
Blogs were not originally called "Blog" but "Weblog." It may surprise many that it was not born in the Web 2.0 era but as early as 1997. Blogs evolved from single-user (single author) to multi-user (a team), i.e., a blog platform. The Web 2.0 era gave blogs social attributes, allowing readers to comment and subscribe (RSS/ATOM), blog authors to connect (FOAF) and reference articles (Pingback), which gradually made blogs popular.
Blog systems vary in strengths. PHP has WordPress, .NET has BlogEngine. Eventually, WordPress became the de facto standard for blog systems, also possessing some CMS functionality. The official .NET team blog at Microsoft is also built with WordPress.

Besides using browsers, blog readers also use RSS/Atom readers. In the early days of the iPad, reader apps were all the rage. Once a subscribed blog published a new article, the reader would automatically fetch it, saving readers from manually checking for new posts daily. Microsoft 365's Outlook still retains an RSS reader feature.
Blogs remain one of the best ways to express oneself, spread information, and interact with the community. Even the advent of microblogging (Weibo) did not make blogs less popular. So, blogs on the internet are like email: "old is gold." As a cultural medium, blogs endure and shine persistently.
My Blog Story
My blog project dates back to 2003. At that time, I was in junior high school and taught myself ASP and Access in my spare time, building my first personal website. The theme was actually hacker techniques (young and ignorant, thinking it was cool). Besides original and reposted technical articles, I also provided downloads of common software tools, and sometimes pretended to be a college student helping others with ASP graduation projects (since no one would believe a junior high school student) in exchange for Q coins, QQ show items, etc., (so retro...). This system was maintained until 2007 when I was in my second year of high school. It looked like this:

After the college entrance exam, I finally had plenty of time to learn the technologies I was interested in, without worrying about parents complaining that I wasn't studying properly. At that time, I self-taught ASP.NET (VB) and built my second-generation personal website. The theme was no longer hacker techniques but regular computer technology sharing, focusing on original technical articles (logs). I also developed SNS features such as albums and podcasts, and it went online in 2009. It looked like this and was maintained until 2011.

After graduating in 2012, I became an engineer (programmer). I no longer had the energy to maintain software downloads, albums, podcasts, etc. I decided to focus only on technical articles and made a bold redesign of my website, giving birth to the blog prototype. To build the blog, I referred to the .NET BlogEngine project. In fact, a well-known .NET blog platform in China originally used the BlogEngine project and even had a Chinese version called "Boyi." However, instead of directly modifying others' projects, I chose to understand the code and then implement it differently. Many of the topics introduced later in this article stem from that period of learning.

Seven years after graduation, I found that various technologies were developing rapidly, and .NET was competing fiercely with other mainstream technologies. As a long-time employee of a foreign company, I primarily used .NET technologies. At that point, I decided to rewrite my blog system using .NET Core in my spare time, naming it Moonglade, and open-sourced it on GitHub (https://github.com/EdiWang/Moonglade). The current blog address is https://edi.wang. The content targets the international community and is deployed on Microsoft Azure's overseas servers (access from China may be slower).

Excluding my early ASP experiments in junior high, from 2009 to 2020, over 11 years, my blog code spanned over a decade of .NET development, from ASP.NET WebForm 2.0 VB.NET + Access to current ASP.NET MVC Core, C# 8, and Azure SQL Database. It also integrates technologies such as Azure App Service, Azure DNS, Azure DevOps, Azure Active Directory, Azure Blob, Azure AD, Azure CDN, and Application Insights.

Who Is the Audience of a Blog?
Before discussing blog design, we must first clarify where your readers come from. Once we understand that, we can imagine how users will use your product. This is precisely the design method and key points this article aims to introduce.
Based on 11 years of experience developing and operating a blog, statistics tell me that for a typical technical blog, more than 95% of traffic comes from search engines, and in most cases, readers only view the article they need. Fixed readers or subscribers constitute a very small proportion of total traffic. This is because technical blogs usually share solutions to specific technical problems. When technical people encounter a problem, their first reaction is to search for whether someone has encountered and solved it. They might copy and paste the code to solve their own project's problem and then forget about the blogger's existence. Only if they genuinely find the blogger's articles of a certain level will they start browsing other content on the blog.
It's easy to see that our user entry point is almost entirely search engines. Therefore, a great blog system should not only excel in writing; it also needs to heavily consider SEO and other blog protocols for machine-to-machine interaction. Constantly keeping SEO in mind is a key focus throughout this article.
This article does not teach code design or technical implementation, but rather the design ideas and key points of a blog system. As for the technology, the famous WordPress, the predecessors' BlogEngine.NET, and my Moonglade are all open source and available for you to study anytime.
In the next article, I will introduce [Key Points of Blog Basic Function Design]
Stay tuned.
