diff --git a/_content/blog/allocation-optimizations.md b/_content/blog/allocation-optimizations.md
index 507541d..d69e4ce 100644
--- a/_content/blog/allocation-optimizations.md
+++ b/_content/blog/allocation-optimizations.md
@@ -287,7 +287,7 @@
We do pay the cost for a copy, but that cost is almost completely
offset by the copies in the startup phase that we no longer have to
-do. (In fact, the the new scheme at worst has to copy one more element
+do. (In fact, the new scheme at worst has to copy one more element
than the old scheme.)
## Wrapping up
diff --git a/_content/blog/cover.md b/_content/blog/cover.md
index f05e363..2814053 100644
--- a/_content/blog/cover.md
+++ b/_content/blog/cover.md
@@ -132,7 +132,7 @@
{{code "cover/pkg.cover" `/func/` `/^}/`}}
Each executable section of the program is annotated with an assignment statement that,
-when executed, records that that section ran.
+when executed, records that section ran.
The counter is tied to the original source position of the statements it counts
through a second read-only data structure that is also generated by the cover tool.
When the test run completes, the counters are collected and the percentage is computed
diff --git a/_content/blog/io2013-chat.md b/_content/blog/io2013-chat.md
index 7c1c1cf..607b4dc 100644
--- a/_content/blog/io2013-chat.md
+++ b/_content/blog/io2013-chat.md
@@ -110,7 +110,7 @@
**Ian:** This is frequently discussed on the mailing list. What we do internally
is take a snapshot of the imported code, and update that snapshot from time to
time. That way, our code base won't break unexpectedly if the API changes.
-But we understand that that approach doesn’t work very well for people who are
+But we understand that approach doesn’t work very well for people who are
themselves providing a library. We’re open to good suggestions in this area.
Remember that this is an aspect of the tools that surround the language rather
than the language itself; the place to fix this is in the tools, not the
diff --git a/_content/blog/testing-time.md b/_content/blog/testing-time.md
index 387f925..6b18c95 100644
--- a/_content/blog/testing-time.md
+++ b/_content/blog/testing-time.md
@@ -360,7 +360,7 @@
As we saw earlier, the two fundamental features required to write testable concurrent code are
fake time and a way to wait for quiescence.
-We need a better way to to wait for quiescence.
+We need a better way to wait for quiescence.
We should be able to ask the runtime when background goroutines have finished their work.
We also want to be able to limit the scope of this query to a single test,
so that unrelated tests do not interfere with each other.