diff --git a/core/modules/block/js/block.admin.js b/core/modules/block/js/block.admin.js
index 9f99b7f..cf1d88e 100644
--- a/core/modules/block/js/block.admin.js
+++ b/core/modules/block/js/block.admin.js
@@ -15,9 +15,12 @@
    * The target element to do searching in will be in the selector
    * `input.block-filter-text[data-element]`
    *
-   * The text source where the text should be found will have the selector
+   * The text source where the label text should be found will have the selector
    * `.block-filter-text-source`
    *
+   * The text source where the category text should be found will have the selector
+   * `.block-filter-category-source`
+   *
    * @type {Drupal~behavior}
    *
    * @prop {Drupal~behaviorAttach} attach
@@ -49,8 +52,15 @@
         function toggleBlockEntry(index, label) {
           var $label = $(label);
           var $row = $label.parent().parent();
-          var textMatch = $label.text().toLowerCase().indexOf(query) !== -1;
-          $row.toggle(textMatch);
+          var labelMatch = $label.text().toLowerCase().indexOf(query) !== -1;
+          var categoryMatch = false;
+
+          if (!labelMatch) {
+            var $category = $row.find('div.block-filter-category-source');
+            categoryMatch = $category.text().toLowerCase().indexOf(query) !== -1;
+          }
+
+          $row.toggle(labelMatch || categoryMatch);
         }
 
         // Filter if the length of the query is at least 2 characters.
diff --git a/core/modules/block/src/Controller/BlockLibraryController.php b/core/modules/block/src/Controller/BlockLibraryController.php
index 79d6eff..c8a9cdf 100644
--- a/core/modules/block/src/Controller/BlockLibraryController.php
+++ b/core/modules/block/src/Controller/BlockLibraryController.php
@@ -118,7 +118,13 @@ public function listBlocks(Request $request, $theme) {
           'label' => $plugin_definition['admin_label'],
         ],
       ];
-      $row['category']['data'] = $plugin_definition['category'];
+      $row['category']['data'] = [
+        '#type' => 'inline_template',
+        '#template' => '<div class="block-filter-category-source">{{ category }}</div>',
+        '#context' => [
+          'category' => $plugin_definition['category'],
+        ],
+      ];
       $links['add'] = [
         'title' => $this->t('Place block'),
         'url' => Url::fromRoute('block.admin_add', ['plugin_id' => $plugin_id, 'theme' => $theme]),
@@ -150,11 +156,11 @@ public function listBlocks(Request $request, $theme) {
       '#title' => $this->t('Filter'),
       '#title_display' => 'invisible',
       '#size' => 30,
-      '#placeholder' => $this->t('Filter by block name'),
+      '#placeholder' => $this->t('Filter by block name or category'),
       '#attributes' => [
         'class' => ['block-filter-text'],
         'data-element' => '.block-add-table',
-        'title' => $this->t('Enter a part of the block name to filter by.'),
+        'title' => $this->t('Enter a part of the block name or category to filter by.'),
       ],
     ];
 
diff --git a/core/modules/block/src/Tests/BlockUiTest.php b/core/modules/block/src/Tests/BlockUiTest.php
index d4ebda4..9c3868b 100644
--- a/core/modules/block/src/Tests/BlockUiTest.php
+++ b/core/modules/block/src/Tests/BlockUiTest.php
@@ -168,7 +168,7 @@ public function testCandidateBlockList() {
       ':category' => 'Block test',
       ':href' => 'admin/structure/block/add/test_block_instantiation/classy',
     ];
-    $pattern = '//tr[.//td/div[text()=:title] and .//td[text()=:category] and .//td//a[contains(@href, :href)]]';
+    $pattern = '//tr[.//td/div[text()=:title] and .//td/div[text()=:category] and .//td//a[contains(@href, :href)]]';
 
     $this->drupalGet('admin/structure/block');
     $this->clickLinkPartialName('Place block');
@@ -220,7 +220,7 @@ public function testContextAwareBlocks() {
       ':category' => 'Block test',
       ':href' => $block_url,
     ];
-    $pattern = '//tr[.//td/div[text()=:title] and .//td[text()=:category] and .//td//a[contains(@href, :href)]]';
+    $pattern = '//tr[.//td/div[text()=:title] and .//td/div[text()=:category] and .//td//a[contains(@href, :href)]]';
 
     $this->drupalGet('admin/structure/block');
     $this->clickLinkPartialName('Place block');
diff --git a/core/modules/block/src/Tests/Views/DisplayBlockTest.php b/core/modules/block/src/Tests/Views/DisplayBlockTest.php
index 3d35845..e51a814 100644
--- a/core/modules/block/src/Tests/Views/DisplayBlockTest.php
+++ b/core/modules/block/src/Tests/Views/DisplayBlockTest.php
@@ -58,7 +58,7 @@ public function testBlockCategory() {
     $edit['block[style][row_plugin]'] = 'fields';
     $this->drupalPostForm('admin/structure/views/add', $edit, t('Save and edit'));
 
-    $pattern = '//tr[.//td[text()=:category] and .//td//a[contains(@href, :href)]]';
+    $pattern = '//tr[.//td/div[text()=:category] and .//td//a[contains(@href, :href)]]';
 
     // Test that the block was given a default category corresponding to its
     // base table.
