diff --git a/maud_macros/src/parse.rs b/maud_macros/src/parse.rs
index a8b33de..6e44ac2 100644
--- a/maud_macros/src/parse.rs
+++ b/maud_macros/src/parse.rs
@@ -233,10 +233,10 @@ impl<'cx, 'i> Parser<'cx, 'i> {
             },
             [] => parse_error!(self, sp, "expected body for this @if"),
         }}
-        // Parse the (optional) else
+        // Parse the (optional) @else
         let else_body = match self.input {
-            [keyword!(_, k), ..] if k.is_keyword(Keyword::Else) => {
-                self.shift(1);
+            [at!(), keyword!(_, k), ..] if k.is_keyword(Keyword::Else) => {
+                self.shift(2);
                 match self.input {
                     [keyword!(sp, k), ..] if k.is_keyword(Keyword::If) => {
                         self.shift(1);
diff --git a/maud_macros/tests/tests.rs b/maud_macros/tests/tests.rs
index f49a617..f1667df 100644
--- a/maud_macros/tests/tests.rs
+++ b/maud_macros/tests/tests.rs
@@ -207,11 +207,11 @@ mod control {
             html!(s, {
                 @if number == 1 {
                     "one"
-                } else if number == 2 {
+                } @else if number == 2 {
                     "two"
-                } else if number == 3 {
+                } @else if number == 3 {
                     "three"
-                } else {
+                } @else {
                     "oh noes"
                 }
             }).unwrap();
@@ -226,7 +226,7 @@ mod control {
             html!(s, {
                 @if let Some(value) = input {
                     ^value
-                } else {
+                } @else {
                     "oh noes"
                 }
             }).unwrap();