Post Date Often Included in Google Search Title Links
Earlier this year, I noticed that when I googled the titles of some of your posts, the date was included in the title link:
<details>
<summary>Example</summary>
<p>
<img width="2077" height="870" alt="Image" src="https://github.com/user-attachments/assets/35549b88-85eb-49bf-8531-8a9abf525426" />
</p>
</details>
The issue is likely caused by the fact that the date is contained within the `h1` tag:
```html
<main>
<article>
<h1>
Effective Pull Requests
<time class="meta" datetime="2018-05-03">May 3, 2018</time>
</h1>
....
</article>
</main>
```
Looking at Google's [documentation](https://developers.google.com/search/docs/appearance/title-link#how-title-links-in-google-search-are-created), it does say that the contents of header tags are one of the sources used to create the title links. That still leaves the question of why some and not others, however.
I tested all the posts and recorded the results in the table below. I don't see any patterns besides there being a solid run of unaffected posts near the beginning.
<details>
<summary>Results</summary>
<p>
| Post Title | Google Search URL | Title Link Contains Date? |
|--------|--------|--------|
font-size-adjust Is Useful | https://google.com/search?q=font-size-adjust+Is+Useful+site%3Amatklad.github.io | Not Found
Inverse Triangle Inequality | https://google.com/search?q=Inverse+Triangle+Inequality+site%3Amatklad.github.io | Yes
RSS Server Side Reader | https://google.com/search?q=RSS+Server+Side+Reader+site%3Amatklad.github.io | Yes
Open Source Can't Coordinate | https://google.com/search?q=Open+Source+Can't+Coordinate+site%3Amatklad.github.io | Yes
Profiling Challenge Results | https://google.com/search?q=Profiling+Challenge+Results+site%3Amatklad.github.io | No
Scalar Select Anti-Pattern | https://google.com/search?q=Scalar+Select+Anti-Pattern+site%3Amatklad.github.io | Yes
Performance Profile Visualization Challenge | https://google.com/search?q=Performance+Profile+Visualization+Challenge+site%3Amatklad.github.io | No
Against Horizontal Scroll | https://google.com/search?q=Against+Horizontal+Scroll+site%3Amatklad.github.io | Yes
A Fun Zig Program | https://google.com/search?q=A+Fun+Zig+Program+site%3Amatklad.github.io | No
Things Zig comptime Won't Do | https://google.com/search?q=Things+Zig+comptime+Won't+Do+site%3Amatklad.github.io | No
Underusing Snapshot Testing | https://google.com/search?q=Underusing+Snapshot+Testing+site%3Amatklad.github.io | No
Random Numbers Included | https://google.com/search?q=Random+Numbers+Included+site%3Amatklad.github.io | Yes
Tariffs | https://google.com/search?q=Tariffs+site%3Amatklad.github.io | No
Deno Simple Server Side Rendering | https://google.com/search?q=Deno+Simple+Server+Side+Rendering+site%3Amatklad.github.io | Not Found
A Debugger is a REPL is a Debugger | https://google.com/search?q=A+Debugger+is+a+REPL+is+a+Debugger+site%3Amatklad.github.io | Yes
Use Long Options in Scripts | https://google.com/search?q=Use+Long+Options+in+Scripts+site%3Amatklad.github.io | No
Comptime Zig ORM | https://google.com/search?q=Comptime+Zig+ORM+site%3Amatklad.github.io | Yes
MacOS for KDE Users | https://google.com/search?q=MacOS+for+KDE+Users+site%3Amatklad.github.io | Yes
What Is a dependency? | https://google.com/search?q=What+Is+a+dependency%3F+site%3Amatklad.github.io | Yes
Minimal Version Selection Revisited | https://google.com/search?q=Minimal+Version+Selection+Revisited+site%3Amatklad.github.io | Yes
Majjit LSP | https://google.com/search?q=Majjit+LSP+site%3Amatklad.github.io | Yes
SemVer Is Not About You | https://google.com/search?q=SemVer+Is+Not+About+You+site%3Amatklad.github.io | Yes
A Missing IDE Feature | https://google.com/search?q=A+Missing+IDE+Feature+site%3Amatklad.github.io | No
Two Workflow Tips | https://google.com/search?q=Two+Workflow+Tips+site%3Amatklad.github.io | Yes
On Ousterhout's Dichotomy | https://google.com/search?q=On+Ousterhout's+Dichotomy+site%3Amatklad.github.io | Yes
The Watermelon Operator | https://google.com/search?q=The+Watermelon+Operator+site%3Amatklad.github.io | No
What is io_uring? | https://google.com/search?q=What+is+io_uring%3F+site%3Amatklad.github.io | Yes
Try to Fix It One Level Deeper | https://google.com/search?q=Try+to+Fix+It+One+Level+Deeper+site%3Amatklad.github.io | Yes
The Fundamental Law Of Software Dependencies | https://google.com/search?q=The+Fundamental+Law+Of+Software+Dependencies+site%3Amatklad.github.io | No
STD Doesn't Have to Abstract OS IO | https://google.com/search?q=STD+Doesn't+Have+to+Abstract+OS+IO+site%3Amatklad.github.io | Yes
Primitive Recursive Functions For A Working Programmer | https://google.com/search?q=Primitive+Recursive+Functions+For+A+Working+Programmer+site%3Amatklad.github.io | No
How I Use Git Worktrees | https://google.com/search?q=How+I+Use+Git+Worktrees+site%3Amatklad.github.io | No
Properly Testing Concurrent Data Structures | https://google.com/search?q=Properly+Testing+Concurrent+Data+Structures+site%3Amatklad.github.io | Yes
Regular, Recursive, Restricted | https://google.com/search?q=Regular,+Recursive,+Restricted+site%3Amatklad.github.io | Yes
Basic Things | https://google.com/search?q=Basic+Things+site%3Amatklad.github.io | No
Zig defer Patterns | https://google.com/search?q=Zig+defer+Patterns+site%3Amatklad.github.io | No
Kafka versus Nabokov | https://google.com/search?q=Kafka+versus+Nabokov+site%3Amatklad.github.io | Yes
Window: Live, Constant Time Grep | https://google.com/search?q=Window:+Live,+Constant+Time+Grep+site%3Amatklad.github.io | Yes
Write Less | https://google.com/search?q=Write+Less+site%3Amatklad.github.io | No
Of Rats and Ratchets | https://google.com/search?q=Of+Rats+and+Ratchets+site%3Amatklad.github.io | Yes
Git Things | https://google.com/search?q=Git+Things+site%3Amatklad.github.io | Yes
O(1) Build File | https://google.com/search?q=O(1)+Build+File+site%3Amatklad.github.io | Yes
CI Dream | https://google.com/search?q=CI+Dream+site%3Amatklad.github.io | Yes
Retry Loop | https://google.com/search?q=Retry+Loop+site%3Amatklad.github.io | Yes
Non-Send Futures When? | https://google.com/search?q=Non-Send+Futures+When%3F+site%3Amatklad.github.io | Yes
IronBeetle | https://google.com/search?q=IronBeetle+site%3Amatklad.github.io | No
Push Ifs Up And Fors Down | https://google.com/search?q=Push+Ifs+Up+And+Fors+Down+site%3Amatklad.github.io | Yes
Data Oriented Blogging | https://google.com/search?q=Data+Oriented+Blogging+site%3Amatklad.github.io | Yes
Unified Versus Split Diff | https://google.com/search?q=Unified+Versus+Split+Diff+site%3Amatklad.github.io | Yes
Unless Explicitly Specified Otherwise, Open Source Software With Users Carries Moral Obligations | https://google.com/search?q=Unless+Explicitly+Specified+Otherwise,+Open+Source+Software+With+site%3Amatklad.github.io | No
LSP could have been better | https://google.com/search?q=LSP+could+have+been+better+site%3Amatklad.github.io | No
UNIX Structured Concurrency | https://google.com/search?q=UNIX+Structured+Concurrency+site%3Amatklad.github.io | No
What is an Invariant? | https://google.com/search?q=What+is+an+Invariant%3F+site%3Amatklad.github.io | Yes
Comparative Analysis | https://google.com/search?q=Comparative+Analysis+site%3Amatklad.github.io | Yes
TypeScript is Surprisingly OK for Compilers | https://google.com/search?q=TypeScript+is+Surprisingly+OK+for+Compilers+site%3Amatklad.github.io | Yes
Role Of Algorithms | https://google.com/search?q=Role+Of+Algorithms+site%3Amatklad.github.io | No
Types and the Zig Programming Language | https://google.com/search?q=Types+and+the+Zig+Programming+Language+site%3Amatklad.github.io | Yes
Fantastic Learning Resources | https://google.com/search?q=Fantastic+Learning+Resources+site%3Amatklad.github.io | No
On Modularity of Lexical Analysis | https://google.com/search?q=On+Modularity+of+Lexical+Analysis+site%3Amatklad.github.io | Yes
Three Different Cuts | https://google.com/search?q=Three+Different+Cuts+site%3Amatklad.github.io | Yes
GitHub Merge Queue | https://google.com/search?q=GitHub+Merge+Queue+site%3Amatklad.github.io | No
The Worst Zig Version Manager | https://google.com/search?q=The+Worst+Zig+Version+Manager+site%3Amatklad.github.io | Yes
Resilient LL Parsing Tutorial | https://google.com/search?q=Resilient+LL+Parsing+Tutorial+site%3Amatklad.github.io | Yes
Zig Language Server And Cancellation | https://google.com/search?q=Zig+Language+Server+And+Cancellation+site%3Amatklad.github.io | No
Value Oriented Programming Needs Implicits? | https://google.com/search?q=Value+Oriented+Programming+Needs+Implicits%3F+site%3Amatklad.github.io | Yes
Data Oriented Parallel Value Interner | https://google.com/search?q=Data+Oriented+Parallel+Value+Interner+site%3Amatklad.github.io | Yes
Reasonable Bootstrap | https://google.com/search?q=Reasonable+Bootstrap+site%3Amatklad.github.io | Yes
Can You Trust a Compiler to Optimize Your Code? | https://google.com/search?q=Can+You+Trust+a+Compiler+to+Optimize+Your+Code%3F+site%3Amatklad.github.io | No
UB Might Be a Wrong Term for Newer Languages | https://google.com/search?q=UB+Might+Be+a+Wrong+Term+for+Newer+Languages+site%3Amatklad.github.io | No
Rust Is a Scalable Language | https://google.com/search?q=Rust+Is+a+Scalable+Language+site%3Amatklad.github.io | No
Zig And Rust | https://google.com/search?q=Zig+And+Rust+site%3Amatklad.github.io | No
An Engine For An Editor | https://google.com/search?q=An+Engine+For+An+Editor+site%3Amatklad.github.io | Yes
Why SAT Is Hard | https://google.com/search?q=Why+SAT+Is+Hard+site%3Amatklad.github.io | Yes
Three-State Stability | https://google.com/search?q=Three-State+Stability+site%3Amatklad.github.io | Yes
<3 Deno | https://google.com/search?q=%3C3+Deno+site%3Amatklad.github.io | No
How a Zig IDE Could Work | https://google.com/search?q=How+a+Zig+IDE+Could+Work+site%3Amatklad.github.io | No
Rust's Ugly Syntax | https://google.com/search?q=Rust's+Ugly+Syntax+site%3Amatklad.github.io | Yes
Next Rust Compiler | https://google.com/search?q=Next+Rust+Compiler+site%3Amatklad.github.io | No
On Random Numbers | https://google.com/search?q=On+Random+Numbers+site%3Amatklad.github.io | No
Ray Tracer Construction Kit | https://google.com/search?q=Ray+Tracer+Construction+Kit+site%3Amatklad.github.io | No
If a Tree Falls in a Forest, Does It Overflow the Stack? | https://google.com/search?q=If+a+Tree+Falls+in+a+Forest,+Does+It+Overflow+the+Stack%3F+site%3Amatklad.github.io | No
Accessibility: px or rem? | https://google.com/search?q=Accessibility:+px+or+rem%3F+site%3Amatklad.github.io | Yes
Elements Of a Great Markup Language | https://google.com/search?q=Elements+Of+a+Great+Markup+Language+site%3Amatklad.github.io | No
GitHub Actions Permissions | https://google.com/search?q=GitHub+Actions+Permissions+site%3Amatklad.github.io | No
Why Linux Troubleshooting Advice Sucks | https://google.com/search?q=Why+Linux+Troubleshooting+Advice+Sucks+site%3Amatklad.github.io | Yes
Hard Mode Rust | https://google.com/search?q=Hard+Mode+Rust+site%3Amatklad.github.io | No
From Paxos to BFT | https://google.com/search?q=From+Paxos+to+BFT+site%3Amatklad.github.io | No
Almost Rules | https://google.com/search?q=Almost+Rules+site%3Amatklad.github.io | Yes
Unit and Integration Tests | https://google.com/search?q=Unit+and+Integration+Tests+site%3Amatklad.github.io | No
Notes on GATs | https://google.com/search?q=Notes+on+GATs+site%3Amatklad.github.io | Yes
Caches In Rust | https://google.com/search?q=Caches+In+Rust+site%3Amatklad.github.io | Yes
Builder Lite | https://google.com/search?q=Builder+Lite+site%3Amatklad.github.io | No
Binary Privacy | https://google.com/search?q=Binary+Privacy+site%3Amatklad.github.io | Yes
Why LSP? | https://google.com/search?q=Why+LSP%3F+site%3Amatklad.github.io | No
Self Modifying Code | https://google.com/search?q=Self+Modifying+Code+site%3Amatklad.github.io | No
RPATH, or why lld doesn't work on NixOS | https://google.com/search?q=RPATH,+or+why+lld+doesn't+work+on+NixOS+site%3Amatklad.github.io | Yes
Notes On Module System | https://google.com/search?q=Notes+On+Module+System+site%3Amatklad.github.io | Yes
Generate All the Things | https://google.com/search?q=Generate+All+the+Things+site%3Amatklad.github.io | Yes
One Hundred Thousand Lines of Rust | https://google.com/search?q=One+Hundred+Thousand+Lines+of+Rust+site%3Amatklad.github.io | Yes
Fast Rust Builds | https://google.com/search?q=Fast+Rust+Builds+site%3Amatklad.github.io | No
Large Rust Workspaces | https://google.com/search?q=Large+Rust+Workspaces+site%3Amatklad.github.io | Yes
; echo Shell Injection | https://google.com/search?q=;+echo+Shell+Injection+site%3Amatklad.github.io | No
It's Not Always ICache | https://google.com/search?q=It's+Not+Always+ICache+site%3Amatklad.github.io | Yes
Inline In Rust | https://google.com/search?q=Inline+In+Rust+site%3Amatklad.github.io | No
How to Test | https://google.com/search?q=How+to+Test+site%3Amatklad.github.io | Yes
Design Pattern: Kitchen Sink | https://google.com/search?q=Design+Pattern:+Kitchen+Sink+site%3Amatklad.github.io | Yes
Concurrent Expression Problem | https://google.com/search?q=Concurrent+Expression+Problem+site%3Amatklad.github.io | Yes
Async Benchmarks Index | https://google.com/search?q=Async+Benchmarks+Index+site%3Amatklad.github.io | Yes
Goroutines Are Not Significantly Smaller Than Threads | https://google.com/search?q=Goroutines+Are+Not+Significantly+Smaller+Than+Threads+site%3Amatklad.github.io | No
Delete Cargo Integration Tests | https://google.com/search?q=Delete+Cargo+Integration+Tests+site%3Amatklad.github.io | Yes
Another Generic Dilemma | https://google.com/search?q=Another+Generic+Dilemma+site%3Amatklad.github.io | No
matklad @ NEAR | https://google.com/search?q=matklad+@+NEAR+site%3Amatklad.github.io | No
For the Love of Macros | https://google.com/search?q=For+the+Love+of+Macros+site%3Amatklad.github.io | Yes
A Better Rust Profiler | https://google.com/search?q=A+Better+Rust+Profiler+site%3Amatklad.github.io | Yes
ARCHITECTURE.md | https://google.com/search?q=ARCHITECTURE.md+site%3Amatklad.github.io | Yes
Two Kinds of Code Review | https://google.com/search?q=Two+Kinds+of+Code+Review+site%3Amatklad.github.io | Yes
Call Site Dependency Injection | https://google.com/search?q=Call+Site+Dependency+Injection+site%3Amatklad.github.io | Yes
Notes On Lock Poisoning | https://google.com/search?q=Notes+On+Lock+Poisoning+site%3Amatklad.github.io | No
Why an IDE? | https://google.com/search?q=Why+an+IDE%3F+site%3Amatklad.github.io | Yes
Notes on Paxos | https://google.com/search?q=Notes+on+Paxos+site%3Amatklad.github.io | No
Study of std::io::Error | https://google.com/search?q=Study+of+std::io::Error+site%3Amatklad.github.io | Yes
Fast Thread Locals In Rust | https://google.com/search?q=Fast+Thread+Locals+In+Rust+site%3Amatklad.github.io | Yes
Why Not Rust? | https://google.com/search?q=Why+Not+Rust%3F+site%3Amatklad.github.io | No
Your Language Sucks, It Doesn't Matter | https://google.com/search?q=Your+Language+Sucks,+It+Doesn't+Matter+site%3Amatklad.github.io | Yes
Rust in 2021 | https://google.com/search?q=Rust+in+2021+site%3Amatklad.github.io | Yes
Code Smell: Concrete Abstraction | https://google.com/search?q=Code+Smell:+Concrete+Abstraction+site%3Amatklad.github.io | Yes
Who Builds the Builder? | https://google.com/search?q=Who+Builds+the+Builder%3F+site%3Amatklad.github.io | No
Things I Have Learned About Life | https://google.com/search?q=Things+I+Have+Learned+About+Life+site%3Amatklad.github.io | No
Two Beautiful Rust Programs | https://google.com/search?q=Two+Beautiful+Rust+Programs+site%3Amatklad.github.io | No
From Pratt to Dijkstra | https://google.com/search?q=From+Pratt+to+Dijkstra+site%3Amatklad.github.io | Yes
Simple but Powerful Pratt Parsing | https://google.com/search?q=Simple+but+Powerful+Pratt+Parsing+site%3Amatklad.github.io | No
Fast and Simple Rust Interner | https://google.com/search?q=Fast+and+Simple+Rust+Interner+site%3Amatklad.github.io | Yes
Why is Rust the Most Loved Programming Language? | https://google.com/search?q=Why+is+Rust+the+Most+Loved+Programming+Language%3F+site%3Amatklad.github.io | No
Mutexes Are Faster Than Spinlocks | https://google.com/search?q=Mutexes+Are+Faster+Than+Spinlocks+site%3Amatklad.github.io | Yes
Spinlocks Considered Harmful | https://google.com/search?q=Spinlocks+Considered+Harmful+site%3Amatklad.github.io | No
A Better Shell | https://google.com/search?q=A+Better+Shell+site%3Amatklad.github.io | No
rust-analyzer Blog | https://google.com/search?q=rust-analyzer+Blog+site%3Amatklad.github.io | No
Join Your Threads | https://google.com/search?q=Join+Your+Threads+site%3Amatklad.github.io | Yes
Unsafe as a Human-Assisted Type System | https://google.com/search?q=Unsafe+as+a+Human-Assisted+Type+System+site%3Amatklad.github.io | Yes
Perils of Constructors | https://google.com/search?q=Perils+of+Constructors+site%3Amatklad.github.io | No
Linux Desktop Tips | https://google.com/search?q=Linux+Desktop+Tips+site%3Amatklad.github.io | No
Rust Course Retrospective | https://google.com/search?q=Rust+Course+Retrospective+site%3Amatklad.github.io | No
Consider Using Asciidoctor for Your Next Presentation | https://google.com/search?q=Consider+Using+Asciidoctor+for+Your+Next+Presentation+site%3Amatklad.github.io | No
Exceptions vs Structured Concurrency | https://google.com/search?q=Exceptions+vs+Structured+Concurrency+site%3Amatklad.github.io | No
A Trick For Test Maintenance | https://google.com/search?q=A+Trick+For+Test+Maintenance+site%3Amatklad.github.io | No
Modern Parser Generator | https://google.com/search?q=Modern+Parser+Generator+site%3Amatklad.github.io | No
Newtype Index Pattern | https://google.com/search?q=Newtype+Index+Pattern+site%3Amatklad.github.io | No
Typed Key Pattern | https://google.com/search?q=Typed+Key+Pattern+site%3Amatklad.github.io | No
Encapsulating Lifetime of the Field | https://google.com/search?q=Encapsulating+Lifetime+of+the+Field+site%3Amatklad.github.io | No
Effective Pull Requests | https://google.com/search?q=Effective+Pull+Requests+site%3Amatklad.github.io | No
Stopping a Rust Worker | https://google.com/search?q=Stopping+a+Rust+Worker+site%3Amatklad.github.io | No
Make your own make | https://google.com/search?q=Make+your+own+make+site%3Amatklad.github.io | No
Dynamic types in LLDB | https://google.com/search?q=Dynamic+types+in+LLDB+site%3Amatklad.github.io | No
NixOS Notes | https://google.com/search?q=NixOS+Notes+site%3Amatklad.github.io | No
Min of Three Part 2 | https://google.com/search?q=Min+of+Three+Part+2+site%3Amatklad.github.io | Not Found
Min of Three | https://google.com/search?q=Min+of+Three+site%3Amatklad.github.io | Yes
</p>
</details>
I also tested Bing and DuckDuckGo, but they did not exhibit this behavior, though DDG failed to remove the `h1` tag's contents from the summary:
<details>
<summary>DuckDuckGo</summary>
<p>
<img width="1545" height="773" alt="Image" src="https://github.com/user-attachments/assets/7ebb2713-49b9-40fe-b048-f069d13f4696" />
</p>
</details>
One possible solution would be to surround the `h1` with a `header` and make the date a sibling of the `h1` inside the `header`. According to [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/header), because it would be nested inside a `main` tag, it would not have the `banner` role, and would be interpreted as just another `section`.
```html
<main>
<article>
<header>
<h1>
Effective Pull Requests
</h1>
<time class="meta" datetime="2018-05-03">May 3, 2018</time>
</header>
....
</article>
</main>
```
You would have to use some CSS to get the spacing between the title and date to stay the same, though.
关闭于 2025-08-23 1 条评论