diff --git a/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaProcessor.java b/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaProcessor.java
index 009e78c..4100b1d 100644
--- a/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaProcessor.java
+++ b/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaProcessor.java
@@ -17,6 +17,7 @@
 import com.google.common.base.Preconditions;
 import com.google.common.base.Predicate;
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.LinkedListMultimap;
@@ -231,13 +232,6 @@
 
   private Map<String, String> generateBEHeaderMapping(Iterable<RuleDocumentation> docEntries)
       throws BuildEncyclopediaDocException {
-    StringBuilder sb = new StringBuilder();
-
-    sb.append("<table id=\"rules\" summary=\"Table of rules sorted by language\">\n")
-      .append("<colgroup span=\"5\" width=\"20%\"></colgroup>\n")
-      .append("<tr><th>Language</th><th>Binary rules</th><th>Library rules</th>"
-        + "<th>Test rules</th><th>Other rules</th><th></th></tr>\n");
-
     // Separate rule families into language-specific and generic ones.
     Set<String> languageSpecificRuleFamilies = new TreeSet<>();
     Set<String> genericRuleFamilies = new TreeSet<>();
@@ -247,26 +241,43 @@
     Map<String, ListMultimap<RuleType, RuleDocumentation>> ruleMapping = new HashMap<>();
     createRuleMapping(docEntries, ruleMapping);
 
-    // Generate the table.
-    for (String ruleFamily : languageSpecificRuleFamilies) {
-      generateHeaderTableRuleFamily(sb, ruleMapping.get(ruleFamily), ruleFamily);
+    String languageSpecificTable;
+    {
+      StringBuilder sb = new StringBuilder();
+
+      sb.append("<colgroup span=\"6\" width=\"20%\"></colgroup>\n")
+        .append("<tr><th>Language</th><th>Binary rules</th><th>Library rules</th>"
+          + "<th>Test rules</th><th>Other rules</th><th></th></tr>\n");
+
+      // Generate the table.
+      for (String ruleFamily : languageSpecificRuleFamilies) {
+        generateHeaderTableRuleFamily(sb, ruleMapping.get(ruleFamily), ruleFamily);
+      }
+      languageSpecificTable = sb.toString();
     }
 
-    sb.append("<tr><th>&nbsp;</th></tr>");
-    sb.append("<tr><th colspan=\"5\">Rules that do not apply to a "
-            + "specific programming language</th></tr>");
-    for (String ruleFamily : genericRuleFamilies) {
-      generateHeaderTableRuleFamily(sb, ruleMapping.get(ruleFamily), ruleFamily);
+    String otherRulesTable;
+    {
+      StringBuilder sb = new StringBuilder();
+
+      sb.append("<colgroup span=\"6\" width=\"20%\"></colgroup>\n");
+      for (String ruleFamily : genericRuleFamilies) {
+        generateHeaderTableRuleFamily(sb, ruleMapping.get(ruleFamily), ruleFamily);
+      }
+      otherRulesTable = sb.toString();
     }
-    sb.append("</table>\n");
-    return ImmutableMap.<String, String>of(DocgenConsts.VAR_HEADER_TABLE, sb.toString(),
-        DocgenConsts.VAR_COMMON_ATTRIBUTE_DEFINITION, generateCommonAttributeDocs(
-            PredefinedAttributes.COMMON_ATTRIBUTES, DocgenConsts.COMMON_ATTRIBUTES),
-        DocgenConsts.VAR_TEST_ATTRIBUTE_DEFINITION, generateCommonAttributeDocs(
-            PredefinedAttributes.TEST_ATTRIBUTES, DocgenConsts.TEST_ATTRIBUTES),
-        DocgenConsts.VAR_BINARY_ATTRIBUTE_DEFINITION, generateCommonAttributeDocs(
-            PredefinedAttributes.BINARY_ATTRIBUTES, DocgenConsts.BINARY_ATTRIBUTES),
-        DocgenConsts.VAR_LEFT_PANEL, generateLeftNavigationPanel(docEntries));
+
+    return new ImmutableMap.Builder<String, String>()
+        .put(DocgenConsts.VAR_LANG_SPECIFIC_HEADER_TABLE, languageSpecificTable)
+        .put(DocgenConsts.VAR_OTHER_RULES_HEADER_TABLE, otherRulesTable)
+        .put(DocgenConsts.VAR_COMMON_ATTRIBUTE_DEFINITION, generateCommonAttributeDocs(
+            PredefinedAttributes.COMMON_ATTRIBUTES, DocgenConsts.COMMON_ATTRIBUTES))
+        .put(DocgenConsts.VAR_TEST_ATTRIBUTE_DEFINITION, generateCommonAttributeDocs(
+            PredefinedAttributes.TEST_ATTRIBUTES, DocgenConsts.TEST_ATTRIBUTES))
+        .put(DocgenConsts.VAR_BINARY_ATTRIBUTE_DEFINITION, generateCommonAttributeDocs(
+            PredefinedAttributes.BINARY_ATTRIBUTES, DocgenConsts.BINARY_ATTRIBUTES))
+        .put(DocgenConsts.VAR_LEFT_PANEL, generateLeftNavigationPanel(docEntries))
+        .build();
   }
 
   /**
diff --git a/src/main/java/com/google/devtools/build/docgen/DocgenConsts.java b/src/main/java/com/google/devtools/build/docgen/DocgenConsts.java
index 01bf7d6..31f3359 100644
--- a/src/main/java/com/google/devtools/build/docgen/DocgenConsts.java
+++ b/src/main/java/com/google/devtools/build/docgen/DocgenConsts.java
@@ -45,7 +45,8 @@
   public static final String VAR_ATTRIBUTE_SIGNATURE = "ATTRIBUTE_SIGNATURE";
   public static final String VAR_ATTRIBUTE_DEFINITION = "ATTRIBUTE_DEFINITION";
   public static final String VAR_NAME = "NAME";
-  public static final String VAR_HEADER_TABLE = "HEADER_TABLE";
+  public static final String VAR_LANG_SPECIFIC_HEADER_TABLE = "LANG_SPECIFIC_HEADER_TABLE";
+  public static final String VAR_OTHER_RULES_HEADER_TABLE = "OTHER_RULES_HEADER_TABLE";
   public static final String VAR_COMMON_ATTRIBUTE_DEFINITION = "COMMON_ATTRIBUTE_DEFINITION";
   public static final String VAR_TEST_ATTRIBUTE_DEFINITION = "TEST_ATTRIBUTE_DEFINITION";
   public static final String VAR_BINARY_ATTRIBUTE_DEFINITION = "BINARY_ATTRIBUTE_DEFINITION";
diff --git a/src/main/java/com/google/devtools/build/docgen/templates/be-header.html b/src/main/java/com/google/devtools/build/docgen/templates/be-header.html
index 1a9593c..8e841a6 100644
--- a/src/main/java/com/google/devtools/build/docgen/templates/be-header.html
+++ b/src/main/java/com/google/devtools/build/docgen/templates/be-header.html
@@ -60,8 +60,20 @@
 
   <h3>Rules</h3>
 
-${HEADER_TABLE}
+<h4>Language-specific Rules</h4>
 
+<table class="table table-condensed table-striped"
+    summary="Table of rules sorted by language">
+${LANG_SPECIFIC_HEADER_TABLE}
+
+</table>
+<h4>Rules that do not apply to a specific programming language</h4>
+
+<table class="table table-condensed table-striped"
+    summary="Table of rules not specific to a programming language">
+${OTHER_RULES_HEADER_TABLE}
+
+</table>
 <h2 id="common-definitions">Common definitions</h2>
 
 <p>This section defines various terms and concepts that are common to
