Repository: hhursev/recipe-scrapers
Pull request #1059 (2024-04-12 02:31:17)

Adds keywords as a possible output
Resolves https://github.com/hhursev/recipe-scrapers/issues/349

Adds [keywords](https://schema.org/keywords) as a possible output


Patch:
diff --git a/README.rst b/README.rst
index 472b6559..879c1cd2 100644
--- a/README.rst
+++ b/README.rst
@@ -60,6 +60,7 @@ then:
     scraper.canonical_url()  # not always available
     scraper.equipment()  # not always available
     scraper.cooking_method()  # not always available
+    scraper.keywords()  # not always available
 
 You also have an option to scrape html-like content
 
diff --git a/recipe_scrapers/_abstract.py b/recipe_scrapers/_abstract.py
index 9ea6448c..354d9eb6 100644
--- a/recipe_scrapers/_abstract.py
+++ b/recipe_scrapers/_abstract.py
@@ -109,6 +109,10 @@ class AbstractScraper:
         """Nutrients of the recipe."""
         raise NotImplementedError("This should be implemented.")
 
+    def keywords(self):
+        """Keywords or tags used to describe the recipe"""
+        raise NotImplementedError("This should be implemented.")
+
     def language(self):
         """Language the recipe is written in."""
         candidate_languages = OrderedDict()
diff --git a/recipe_scrapers/_schemaorg.py b/recipe_scrapers/_schemaorg.py
index 40210b72..8e0ba9f7 100644
--- a/recipe_scrapers/_schemaorg.py
+++ b/recipe_scrapers/_schemaorg.py
@@ -10,7 +10,7 @@ import extruct
 from recipe_scrapers.settings import settings
 
 from ._exceptions import SchemaOrgException
-from ._utils import get_minutes, get_yields, normalize_string
+from ._utils import csv_to_tags, get_minutes, get_yields, normalize_string
 
 SCHEMA_ORG_HOST = "schema.org"
 
@@ -309,3 +309,14 @@ class SchemaOrg:
         if cooking_method and isinstance(cooking_method, list):
             cooking_method = cooking_method[0]
         return normalize_string(cooking_method)
+
+    def keywords(self):
+        keywords = self.data.get("keywords")
+        if keywords is None:
+            raise SchemaOrgException("No cooking method data in SchemaOrg")
+        if keywords:
+            if isinstance(keywords, list):
+                keywords = keywords[0]
+            keywords = normalize_string(keywords)
+            keywords = csv_to_tags(keywords)
+        return keywords
diff --git a/recipe_scrapers/_utils.py b/recipe_scrapers/_utils.py
index 935ba30f..88215e1b 100644
--- a/recipe_scrapers/_utils.py
+++ b/recipe_scrapers/_utils.py
@@ -232,6 +232,18 @@ def normalize_string(string):
     )
 
 
+def csv_to_tags(csv, lowercase=False):
+    raw_tags = csv.split(",")
+    seen = set()
+    tags = []
+    for raw_tag in raw_tags:
+        tag = raw_tag.strip()
+        if tag.lower() not in seen:
+            seen.add(tag.lower())
+            tags.append(tag.lower() if lowercase else tag)
+    return tags
+
+
 def url_path_to_dict(path):
     pattern = (
         r"^"
diff --git a/recipe_scrapers/plugins/schemaorg_fill.py b/recipe_scrapers/plugins/schemaorg_fill.py
index 16ae2d73..9e4bb7f7 100644
--- a/recipe_scrapers/plugins/schemaorg_fill.py
+++ b/recipe_scrapers/plugins/schemaorg_fill.py
@@ -37,6 +37,7 @@ class SchemaOrgFillPlugin(PluginInterface):
         "description",
         "cook_time",
         "prep_time",
+        "keywords",
     )
 
     @classmethod


Test patch:
diff --git a/tests/__init__.py b/tests/__init__.py
index 22fd0891..aa8e4e46 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -30,6 +30,7 @@ OPTIONAL_TESTS = [
     "nutrients",
     "prep_time",
     "cooking_method",
+    "keywords",
     "ratings",
     "reviews",
     "equipment",
diff --git a/tests/library/test_utils.py b/tests/library/test_utils.py
index f71e57ce..423a7d22 100644
--- a/tests/library/test_utils.py
+++ b/tests/library/test_utils.py
@@ -90,6 +90,7 @@ class TestUtils(unittest.TestCase):
             "ingredients",
             "instructions",
             "instructions_list",
+            "keywords",
             "language",
             "nutrients",
             "prep_time",
diff --git a/tests/test_data/101cookbooks.com/onehundredonecookbooks.json b/tests/test_data/101cookbooks.com/onehundredonecookbooks.json
index 30d261e2..57f32cb0 100644
--- a/tests/test_data/101cookbooks.com/onehundredonecookbooks.json
+++ b/tests/test_data/101cookbooks.com/onehundredonecookbooks.json
@@ -59,5 +59,8 @@
   "site_name": "101 Cookbooks",
   "title": "Broccoli Soup with Coconut Milk",
   "total_time": 20,
-  "yields": "8 servings"
+  "yields": "8 servings",
+  "keywords": [
+    "broccoli soup"
+  ]
 }
diff --git a/tests/test_data/750g.com/g750g.json b/tests/test_data/750g.com/g750g.json
index 76f15808..d27bef47 100644
--- a/tests/test_data/750g.com/g750g.json
+++ b/tests/test_data/750g.com/g750g.json
@@ -54,5 +54,9 @@
   "site_name": "750 Grammes",
   "title": "Salade de carottes cuites et crues à l'orange",
   "total_time": 35,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "salade de carottes",
+    "salade de carottes cuites"
+  ]
 }
diff --git a/tests/test_data/aberlehome.com/aberlehome.json b/tests/test_data/aberlehome.com/aberlehome.json
index bdb11c62..9d084767 100644
--- a/tests/test_data/aberlehome.com/aberlehome.json
+++ b/tests/test_data/aberlehome.com/aberlehome.json
@@ -68,5 +68,11 @@
   "site_name": "Aberle Home",
   "title": "Sourdough Croissants",
   "total_time": 1335,
-  "yields": "10 servings"
+  "yields": "10 servings",
+  "keywords": [
+    "sourdough croissants",
+    "sourdough croissant",
+    "homemade croissants",
+    "sourdough croissants no yeast"
+  ]
 }
diff --git a/tests/test_data/abuelascounter.com/abuelascounter_1.json b/tests/test_data/abuelascounter.com/abuelascounter_1.json
index e8cf708a..0d0a336c 100644
--- a/tests/test_data/abuelascounter.com/abuelascounter_1.json
+++ b/tests/test_data/abuelascounter.com/abuelascounter_1.json
@@ -60,5 +60,8 @@
   "site_name": "Abuela's Cuban Counter",
   "title": "Alita Oliva’s Roast Chicken",
   "total_time": 105,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "abuela's"
+  ]
 }
diff --git a/tests/test_data/abuelascounter.com/abuelascounter_2.json b/tests/test_data/abuelascounter.com/abuelascounter_2.json
index 55de7ff6..ed68d75c 100644
--- a/tests/test_data/abuelascounter.com/abuelascounter_2.json
+++ b/tests/test_data/abuelascounter.com/abuelascounter_2.json
@@ -70,5 +70,8 @@
   "site_name": "Abuela's Cuban Counter",
   "title": "Pecan Pie Bars",
   "total_time": 45,
-  "yields": "10 servings"
+  "yields": "10 servings",
+  "keywords": [
+    "abuelau0026#039;s"
+  ]
 }
diff --git a/tests/test_data/acouplecooks.com/acouplecooks.json b/tests/test_data/acouplecooks.com/acouplecooks.json
index 193301b5..0895042d 100644
--- a/tests/test_data/acouplecooks.com/acouplecooks.json
+++ b/tests/test_data/acouplecooks.com/acouplecooks.json
@@ -50,5 +50,8 @@
   "title": "Garlic Butter Shrimp (Fast & Easy Dinner!)",
   "total_time": 8,
   "yields": "4 servings",
-  "cooking_method": "Stovetop"
+  "cooking_method": "Stovetop",
+  "keywords": [
+    "Garlic Butter Shrimp"
+  ]
 }
diff --git a/tests/test_data/addapinch.com/addapinch_1.json b/tests/test_data/addapinch.com/addapinch_1.json
index a9a29d0c..ee2b1937 100644
--- a/tests/test_data/addapinch.com/addapinch_1.json
+++ b/tests/test_data/addapinch.com/addapinch_1.json
@@ -68,5 +68,15 @@
   "site_name": "Add a Pinch",
   "title": "The Best Chocolate Cake Recipe {Ever}",
   "total_time": 45,
-  "yields": "24 servings"
+  "yields": "24 servings",
+  "keywords": [
+    "best chocolate cake",
+    "chocolate cake",
+    "chocolate cake recipe",
+    "classic chocolate cake",
+    "dairy free chocolate cake",
+    "easy chocolate cake",
+    "egg free chocolate cake",
+    "gluten-free chocolate cake"
+  ]
 }
diff --git a/tests/test_data/addapinch.com/addapinch_2.json b/tests/test_data/addapinch.com/addapinch_2.json
index 3734f0a7..2cbc0dd8 100644
--- a/tests/test_data/addapinch.com/addapinch_2.json
+++ b/tests/test_data/addapinch.com/addapinch_2.json
@@ -79,5 +79,8 @@
   "equipment": [
     "Pastry Blender",
     "Grater/ Zester"
+  ],
+  "keywords": [
+    "citrus scones"
   ]
 }
diff --git a/tests/test_data/ah.nl/albertheijn.json b/tests/test_data/ah.nl/albertheijn.json
index c46bb130..a0acc750 100644
--- a/tests/test_data/ah.nl/albertheijn.json
+++ b/tests/test_data/ah.nl/albertheijn.json
@@ -2,7 +2,6 @@
   "author": "Albert Heijn",
   "canonical_url": "ah.nl",
   "category": "hoofdgerecht",
-  "cuisine": "",
   "description": "Vul je pastasalade met semi-gedroogde tomaten, olijven en aubergine. Garneer met verse kruiden en gerookte amandelen voor extra smaakplezier.",
   "host": "ah.nl",
   "image": null,
@@ -56,5 +55,12 @@
   "site_name": null,
   "title": "Rijkgevulde vegan pastasalade",
   "total_time": 20,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "veganistisch",
+    "vooraf te maken",
+    "salade",
+    "hoofdgerecht",
+    "koken"
+  ]
 }
diff --git a/tests/test_data/akispetretzikis.com/akispetretzikis.json b/tests/test_data/akispetretzikis.com/akispetretzikis.json
index ac65c03c..13423234 100644
--- a/tests/test_data/akispetretzikis.com/akispetretzikis.json
+++ b/tests/test_data/akispetretzikis.com/akispetretzikis.json
@@ -69,5 +69,8 @@
   "site_name": "Akis Petretzikis",
   "title": "Lemon chicken with artichokes",
   "total_time": 40,
-  "yields": "10 servings"
+  "yields": "10 servings",
+  "keywords": [
+    "Lemon"
+  ]
 }
diff --git a/tests/test_data/alltommat.se/alltomat_1.json b/tests/test_data/alltommat.se/alltomat_1.json
index 80810ff8..02d2399f 100644
--- a/tests/test_data/alltommat.se/alltomat_1.json
+++ b/tests/test_data/alltommat.se/alltomat_1.json
@@ -47,5 +47,8 @@
   "site_name": "Allt om Mat",
   "title": "Brioche-hamburgerbröd",
   "total_time": 155,
-  "yields": "12 servings"
+  "yields": "12 servings",
+  "keywords": [
+    "sections/recept"
+  ]
 }
diff --git a/tests/test_data/alltommat.se/alltomat_2.json b/tests/test_data/alltommat.se/alltomat_2.json
index da2d303c..f8e19f3c 100644
--- a/tests/test_data/alltommat.se/alltomat_2.json
+++ b/tests/test_data/alltommat.se/alltomat_2.json
@@ -110,5 +110,8 @@
   "site_name": "Allt om Mat",
   "title": "Köttbullar med potatismos, gräddsås, gurka och lingon",
   "total_time": 50,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "sections/recept"
+  ]
 }
diff --git a/tests/test_data/altonbrown.com/altonbrown_1.json b/tests/test_data/altonbrown.com/altonbrown_1.json
index 6e5903e4..044203e5 100644
--- a/tests/test_data/altonbrown.com/altonbrown_1.json
+++ b/tests/test_data/altonbrown.com/altonbrown_1.json
@@ -53,5 +53,10 @@
     "Digital kitchen scale",
     "Digital instant-read thermometer",
     "2 (9-inch) round aluminum cake pans"
+  ],
+  "keywords": [
+    "Baking",
+    "Desserts",
+    "Entertaining"
   ]
 }
diff --git a/tests/test_data/altonbrown.com/altonbrown_2.json b/tests/test_data/altonbrown.com/altonbrown_2.json
index 669b8dcf..0d671f48 100644
--- a/tests/test_data/altonbrown.com/altonbrown_2.json
+++ b/tests/test_data/altonbrown.com/altonbrown_2.json
@@ -77,5 +77,10 @@
     "1-gallon zip top bag",
     "Charcoal grill (See note)",
     "12 8-inch wooden skewers, smoked in water (See other note)"
+  ],
+  "keywords": [
+    "Grill",
+    "Pork",
+    "skewer"
   ]
 }
diff --git a/tests/test_data/amazingribs.com/amazingribs_1.json b/tests/test_data/amazingribs.com/amazingribs_1.json
index 89a6879a..7ee38da8 100644
--- a/tests/test_data/amazingribs.com/amazingribs_1.json
+++ b/tests/test_data/amazingribs.com/amazingribs_1.json
@@ -56,5 +56,11 @@
   "equipment": [
     "sausage grinder",
     "sausage stuffer"
+  ],
+  "keywords": [
+    "brisket",
+    "brisket sausage",
+    "sausage",
+    "smoked sausage"
   ]
 }
diff --git a/tests/test_data/amazingribs.com/amazingribs_2.json b/tests/test_data/amazingribs.com/amazingribs_2.json
index 070f4704..c3455b8d 100644
--- a/tests/test_data/amazingribs.com/amazingribs_2.json
+++ b/tests/test_data/amazingribs.com/amazingribs_2.json
@@ -49,5 +49,10 @@
   "yields": "8 servings",
   "equipment": [
     "4 cups wood chunks or chips (about 8 ounces (226 g))"
+  ],
+  "keywords": [
+    "brisket burnt ends",
+    "burnt ends",
+    "burnt ends recipe"
   ]
 }
diff --git a/tests/test_data/ambitiouskitchen.com/ambitiouskitchen.json b/tests/test_data/ambitiouskitchen.com/ambitiouskitchen.json
index 59ecc561..51b72f62 100644
--- a/tests/test_data/ambitiouskitchen.com/ambitiouskitchen.json
+++ b/tests/test_data/ambitiouskitchen.com/ambitiouskitchen.json
@@ -88,5 +88,8 @@
   "site_name": "Ambitious Kitchen",
   "title": "Vegetarian Spinach Pumpkin Lasagna",
   "total_time": 70,
-  "yields": "12 servings"
+  "yields": "12 servings",
+  "keywords": [
+    "pumpkin lasagna"
+  ]
 }
diff --git a/tests/test_data/arla.se/arla_1.json b/tests/test_data/arla.se/arla_1.json
index 42ea30dd..b2463017 100644
--- a/tests/test_data/arla.se/arla_1.json
+++ b/tests/test_data/arla.se/arla_1.json
@@ -68,5 +68,8 @@
   "site_name": "Arla",
   "title": "Reuben sandwich",
   "total_time": 40,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "Smörgås"
+  ]
 }
diff --git a/tests/test_data/arla.se/arla_2.json b/tests/test_data/arla.se/arla_2.json
index 2a05cf8e..32f5bdd9 100644
--- a/tests/test_data/arla.se/arla_2.json
+++ b/tests/test_data/arla.se/arla_2.json
@@ -72,5 +72,8 @@
   "site_name": "Arla",
   "title": "Trifle på äpple med smulkrisp och vaniljglass",
   "total_time": null,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "Smulpaj"
+  ]
 }
diff --git a/tests/test_data/averiecooks.com/averiecooks.json b/tests/test_data/averiecooks.com/averiecooks.json
index cefc2ed8..be06c767 100644
--- a/tests/test_data/averiecooks.com/averiecooks.json
+++ b/tests/test_data/averiecooks.com/averiecooks.json
@@ -53,5 +53,12 @@
   "site_name": "Averie Cooks",
   "title": "Balsamic Watermelon Cucumber Salad",
   "total_time": 20,
-  "yields": "2 servings"
+  "yields": "2 servings",
+  "keywords": [
+    "watermelon cucumber salad",
+    "watermelon goat cheese salad",
+    "watermelon and cucumber salad",
+    "watermelon salad balsamic",
+    "watermelon arugula salad"
+  ]
 }
diff --git a/tests/test_data/baking-sense.com/bakingsense_1.json b/tests/test_data/baking-sense.com/bakingsense_1.json
index c93f4696..a32b1954 100644
--- a/tests/test_data/baking-sense.com/bakingsense_1.json
+++ b/tests/test_data/baking-sense.com/bakingsense_1.json
@@ -87,5 +87,9 @@
     "Bundt Pan",
     "Cooling Rack",
     "Half Sheet Pans"
+  ],
+  "keywords": [
+    "buttermilk",
+    "sourdough"
   ]
 }
diff --git a/tests/test_data/baking-sense.com/bakingsense_2.json b/tests/test_data/baking-sense.com/bakingsense_2.json
index 31b4c770..b07bb2e3 100644
--- a/tests/test_data/baking-sense.com/bakingsense_2.json
+++ b/tests/test_data/baking-sense.com/bakingsense_2.json
@@ -85,5 +85,10 @@
     "Revolving Cake Stand",
     "Cake Boards",
     "Sieve"
+  ],
+  "keywords": [
+    "chocolate cake",
+    "mousse",
+    "strawberry cake"
   ]
 }
diff --git a/tests/test_data/bakingmischief.com/bakingmischief_1.json b/tests/test_data/bakingmischief.com/bakingmischief_1.json
index 32a66562..f51886b5 100644
--- a/tests/test_data/bakingmischief.com/bakingmischief_1.json
+++ b/tests/test_data/bakingmischief.com/bakingmischief_1.json
@@ -104,5 +104,8 @@
   "site_name": "Baking Mischief",
   "title": "Barbacoa Burrito Bowls",
   "total_time": 190,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "Barbacoa Burrito Bowl"
+  ]
 }
diff --git a/tests/test_data/bakingmischief.com/bakingmischief_2.json b/tests/test_data/bakingmischief.com/bakingmischief_2.json
index bd1b2044..f2ea3561 100644
--- a/tests/test_data/bakingmischief.com/bakingmischief_2.json
+++ b/tests/test_data/bakingmischief.com/bakingmischief_2.json
@@ -74,5 +74,9 @@
   "site_name": "Baking Mischief",
   "title": "Small Carrot Cake",
   "total_time": 90,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "Mini Carrot Cake",
+    "Small Carrot Cake"
+  ]
 }
diff --git a/tests/test_data/bbcgoodfood.com/bbcgoodfood.json b/tests/test_data/bbcgoodfood.com/bbcgoodfood.json
index 76a509df..2157b684 100644
--- a/tests/test_data/bbcgoodfood.com/bbcgoodfood.json
+++ b/tests/test_data/bbcgoodfood.com/bbcgoodfood.json
@@ -53,5 +53,15 @@
   "site_name": null,
   "title": "Summer meatballs & spaghetti",
   "total_time": 30,
-  "yields": "2 servings"
+  "yields": "2 servings",
+  "keywords": [
+    "Courgette",
+    "Easy",
+    "Elena Silcock",
+    "Fibre",
+    "Meatballs",
+    "Midweek meals",
+    "Quick",
+    "Spaghetti"
+  ]
 }
diff --git a/tests/test_data/bbcgoodfood.com/bbcgoodfood_groups.json b/tests/test_data/bbcgoodfood.com/bbcgoodfood_groups.json
index a102fefa..e2d00824 100644
--- a/tests/test_data/bbcgoodfood.com/bbcgoodfood_groups.json
+++ b/tests/test_data/bbcgoodfood.com/bbcgoodfood_groups.json
@@ -66,5 +66,25 @@
   "site_name": null,
   "title": "Monster cupcakes",
   "total_time": 50,
-  "yields": "12 items"
+  "yields": "12 items",
+  "keywords": [
+    "Josh Eagleton",
+    "30-60 minutes",
+    "400 kcal or less",
+    "Biscuit recipes",
+    "Cup cakes",
+    "Cupcake",
+    "Frosting",
+    "Good Food",
+    "Halloween recipes",
+    "Icing",
+    "Kids recipes",
+    "Party recipes",
+    "Spooky recipes",
+    "Sweet",
+    "Sweet recipe",
+    "Sweet recipes",
+    "Sweets",
+    "Vanilla extract"
+  ]
 }
diff --git a/tests/test_data/bestrecipes.com.au/bestrecipes.json b/tests/test_data/bestrecipes.com.au/bestrecipes.json
index 5c05e918..64e0653b 100644
--- a/tests/test_data/bestrecipes.com.au/bestrecipes.json
+++ b/tests/test_data/bestrecipes.com.au/bestrecipes.json
@@ -52,5 +52,37 @@
   "total_time": 55,
   "cook_time": 40,
   "prep_time": 15,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "meat pie",
+    "pie",
+    "aussie",
+    "australian",
+    "mince",
+    "pastry",
+    "baking",
+    "australia day",
+    "autumn",
+    "beef mince",
+    "beef stock",
+    "dinner",
+    "egg",
+    "family friendly",
+    "freezer friendly",
+    "kid friendly",
+    "lunch",
+    "main",
+    "onion",
+    "plain flour",
+    "puff pastry",
+    "savoury",
+    "shortcrust pastry",
+    "spring",
+    "stock",
+    "summer",
+    "tomato sauce",
+    "winter",
+    "worcestershire sauce",
+    "budget club"
+  ]
 }
diff --git a/tests/test_data/bettybossi.ch/bettybossi.json b/tests/test_data/bettybossi.ch/bettybossi.json
index bc9bfd77..3ffe92df 100644
--- a/tests/test_data/bettybossi.ch/bettybossi.json
+++ b/tests/test_data/bettybossi.ch/bettybossi.json
@@ -66,5 +66,20 @@
   "site_name": null,
   "title": "Minicheesecakes",
   "total_time": 90,
-  "yields": "12 servings"
+  "yields": "12 servings",
+  "keywords": [
+    "biscuits au beurre",
+    "beurre",
+    "fromage frais double crème",
+    "mascarpone",
+    "séré demi-gras",
+    "œufs",
+    "sucre",
+    "sucre vanillé",
+    "citron bio",
+    "liqueur au cassis",
+    "farine",
+    "myrtilles surgelées",
+    "jus de citron"
+  ]
 }
diff --git a/tests/test_data/bettycrocker.com/bettycrocker_1.json b/tests/test_data/bettycrocker.com/bettycrocker_1.json
index 1a02b590..ce2b670b 100644
--- a/tests/test_data/bettycrocker.com/bettycrocker_1.json
+++ b/tests/test_data/bettycrocker.com/bettycrocker_1.json
@@ -49,5 +49,8 @@
   "site_name": "BettyCrocker.com",
   "title": "Éclair Bars",
   "total_time": 290,
-  "yields": "24 servings"
+  "yields": "24 servings",
+  "keywords": [
+    "éclair bars"
+  ]
 }
diff --git a/tests/test_data/bettycrocker.com/bettycrocker_2.json b/tests/test_data/bettycrocker.com/bettycrocker_2.json
index ab0f6b5d..4e97abb4 100644
--- a/tests/test_data/bettycrocker.com/bettycrocker_2.json
+++ b/tests/test_data/bettycrocker.com/bettycrocker_2.json
@@ -66,5 +66,8 @@
   "site_name": "BettyCrocker.com",
   "title": "Strawberry-Pretzel Salad",
   "total_time": 400,
-  "yields": "12 servings"
+  "yields": "12 servings",
+  "keywords": [
+    "strawberry-pretzel salad"
+  ]
 }
diff --git a/tests/test_data/biancazapatka.com/biancazapatka_1.json b/tests/test_data/biancazapatka.com/biancazapatka_1.json
index b927b09b..3de61975 100644
--- a/tests/test_data/biancazapatka.com/biancazapatka_1.json
+++ b/tests/test_data/biancazapatka.com/biancazapatka_1.json
@@ -88,5 +88,15 @@
   "site_name": "Bianca Zapatka",
   "title": "Rice Noodle Salad with Tempeh and Peanut Sauce",
   "total_time": 35,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "Asia Noodles",
+    "Asian Food",
+    "Bowl",
+    "Noodle Salad",
+    "Peanut Sauce",
+    "Rice Noodles",
+    "Tempeh",
+    "Vegetables"
+  ]
 }
diff --git a/tests/test_data/biancazapatka.com/biancazapatka_2.json b/tests/test_data/biancazapatka.com/biancazapatka_2.json
index c129526b..b7148232 100644
--- a/tests/test_data/biancazapatka.com/biancazapatka_2.json
+++ b/tests/test_data/biancazapatka.com/biancazapatka_2.json
@@ -98,5 +98,11 @@
   "site_name": "Bianca Zapatka",
   "title": "The Best Vegan Blueberry Cake",
   "total_time": 65,
-  "yields": "12 servings"
+  "yields": "12 servings",
+  "keywords": [
+    "Blueberries",
+    "Blueberry Cake",
+    "Loaf Cake",
+    "Vegan Cake"
+  ]
 }
diff --git a/tests/test_data/bigoven.com/bigoven_1.json b/tests/test_data/bigoven.com/bigoven_1.json
index a6797043..69ae5c59 100644
--- a/tests/test_data/bigoven.com/bigoven_1.json
+++ b/tests/test_data/bigoven.com/bigoven_1.json
@@ -95,5 +95,14 @@
   "site_name": "BigOven.com",
   "title": "No-Knead Herb Focaccia",
   "total_time": 720,
-  "yields": "24 servings"
+  "yields": "24 servings",
+  "keywords": [
+    "white meat free",
+    "nut free",
+    "contains gluten",
+    "red meat free",
+    "shellfish free",
+    "dairy free",
+    "pescatarian"
+  ]
 }
diff --git a/tests/test_data/bigoven.com/bigoven_2.json b/tests/test_data/bigoven.com/bigoven_2.json
index bcf560d9..47aa0470 100644
--- a/tests/test_data/bigoven.com/bigoven_2.json
+++ b/tests/test_data/bigoven.com/bigoven_2.json
@@ -82,5 +82,33 @@
   "site_name": "BigOven.com",
   "title": "White Chocolate Raspberry Cupcakes",
   "total_time": 25,
-  "yields": "8 servings"
+  "yields": "8 servings",
+  "keywords": [
+    "patdessert",
+    "sumdessert",
+    "kid friendly",
+    "bake",
+    "desserts",
+    "raspberry",
+    "american",
+    "snack",
+    "summer",
+    "sweet",
+    "vd",
+    "4desserts",
+    "nf",
+    "easter",
+    "mom",
+    "vegetarian",
+    "white meat free",
+    "nut free",
+    "contains cheese",
+    "contains gluten",
+    "red meat free",
+    "contains fish",
+    "shellfish free",
+    "contains dairy",
+    "contains eggs",
+    "pescatarian"
+  ]
 }
diff --git a/tests/test_data/bluejeanchef.com/bluejeanchef_1.json b/tests/test_data/bluejeanchef.com/bluejeanchef_1.json
index f30ba578..9a0aaa34 100644
--- a/tests/test_data/bluejeanchef.com/bluejeanchef_1.json
+++ b/tests/test_data/bluejeanchef.com/bluejeanchef_1.json
@@ -76,5 +76,11 @@
   "site_name": "Blue Jean Chef - Meredith Laurence",
   "title": "Chicken Tortilla Soup",
   "total_time": 22,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "Chicken",
+    "Pasta",
+    "One Pot Meal",
+    "Quick and Easy"
+  ]
 }
diff --git a/tests/test_data/bluejeanchef.com/bluejeanchef_2.json b/tests/test_data/bluejeanchef.com/bluejeanchef_2.json
index 312a0324..1fe55107 100644
--- a/tests/test_data/bluejeanchef.com/bluejeanchef_2.json
+++ b/tests/test_data/bluejeanchef.com/bluejeanchef_2.json
@@ -72,5 +72,14 @@
   "site_name": "Blue Jean Chef - Meredith Laurence",
   "title": "No Bake Layered Cheesecake",
   "total_time": 510,
-  "yields": "12 servings"
+  "yields": "12 servings",
+  "keywords": [
+    "cheesecake",
+    "no bake desserts",
+    "blueberries",
+    "summer desserts",
+    "raspberries",
+    "Cream Cheese",
+    "berry desserts"
+  ]
 }
diff --git a/tests/test_data/bonappetit.com/bonappetit.json b/tests/test_data/bonappetit.com/bonappetit.json
index a620e944..2fd623a3 100644
--- a/tests/test_data/bonappetit.com/bonappetit.json
+++ b/tests/test_data/bonappetit.com/bonappetit.json
@@ -52,5 +52,8 @@
   "site_name": "Bon Appétit",
   "title": "Pork Chops with Celery Salad",
   "total_time": null,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "celery"
+  ]
 }
diff --git a/tests/test_data/bongeats.com/bongeats.json b/tests/test_data/bongeats.com/bongeats.json
index 2effd005..d8eb3ce9 100644
--- a/tests/test_data/bongeats.com/bongeats.json
+++ b/tests/test_data/bongeats.com/bongeats.json
@@ -75,5 +75,12 @@
   "site_name": null,
   "title": "Lau Chingri",
   "total_time": 60,
-  "yields": "5 servings"
+  "yields": "5 servings",
+  "keywords": [
+    "lau chingri",
+    "bottle gourd sabzi",
+    "bottle gourd with shrimp",
+    "bengali bottle gourd recipe",
+    "bengali lau recipe"
+  ]
 }
diff --git a/tests/test_data/bowlofdelicious.com/bowlofdelicious.json b/tests/test_data/bowlofdelicious.com/bowlofdelicious.json
index 903d04fa..d0e6a723 100644
--- a/tests/test_data/bowlofdelicious.com/bowlofdelicious.json
+++ b/tests/test_data/bowlofdelicious.com/bowlofdelicious.json
@@ -60,5 +60,10 @@
   "yields": "2 servings",
   "equipment": [
     "Nonstick Skillet"
+  ],
+  "keywords": [
+    "Ahi tuna recipe",
+    "How to cook ahi tuna",
+    "Seared ahi tuna medium rare"
   ]
 }
diff --git a/tests/test_data/breadtopia.com/breadtopia.json b/tests/test_data/breadtopia.com/breadtopia.json
index 389ac2ac..7e287dc9 100644
--- a/tests/test_data/breadtopia.com/breadtopia.json
+++ b/tests/test_data/breadtopia.com/breadtopia.json
@@ -109,5 +109,10 @@
   "title": "Kubaneh (Yemenite Jewish Bread)",
   "total_time": 90,
   "yields": "12 servings",
-  "category": "Recipes"
+  "category": "Recipes",
+  "keywords": [
+    "Bread",
+    "Sourdough",
+    "Yeast"
+  ]
 }
diff --git a/tests/test_data/budgetbytes.com/budgetbytes.json b/tests/test_data/budgetbytes.com/budgetbytes.json
index a2c3b6c8..c2fd36ed 100644
--- a/tests/test_data/budgetbytes.com/budgetbytes.json
+++ b/tests/test_data/budgetbytes.com/budgetbytes.json
@@ -54,5 +54,10 @@
   "yields": "4 servings",
   "equipment": [
     "Cast Iron Skillet"
+  ],
+  "keywords": [
+    "Burger Seasoning",
+    "Cheese Burger",
+    "Smash Burger"
   ]
 }
diff --git a/tests/test_data/budgetbytes.com/budgetbytes_groups.json b/tests/test_data/budgetbytes.com/budgetbytes_groups.json
index 86ca9eea..1dbf8345 100644
--- a/tests/test_data/budgetbytes.com/budgetbytes_groups.json
+++ b/tests/test_data/budgetbytes.com/budgetbytes_groups.json
@@ -63,5 +63,9 @@
   "site_name": "Budget Bytes",
   "title": "Creamy Coconut Curry Lentils with Spinach",
   "total_time": 45,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "meal prep",
+    "Vegan Dinner"
+  ]
 }
diff --git a/tests/test_data/castironketo.net/castironketo.json b/tests/test_data/castironketo.net/castironketo.json
index 3b6adc24..f84051d3 100644
--- a/tests/test_data/castironketo.net/castironketo.json
+++ b/tests/test_data/castironketo.net/castironketo.json
@@ -61,5 +61,10 @@
   "site_name": "Cast Iron Keto",
   "title": "Keto Jalapeño Popper Casserole with Chicken",
   "total_time": 45,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "keto",
+    "keto casserole",
+    "low carb"
+  ]
 }
diff --git a/tests/test_data/chefkoch.de/chefkoch.json b/tests/test_data/chefkoch.de/chefkoch.json
index 8cc2e765..1f6b2b75 100644
--- a/tests/test_data/chefkoch.de/chefkoch.json
+++ b/tests/test_data/chefkoch.de/chefkoch.json
@@ -67,5 +67,8 @@
   "site_name": "Chefkoch.de",
   "title": "Saftiger Hackbraten im Ofen",
   "total_time": 85.0,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "Fleisch"
+  ]
 }
diff --git a/tests/test_data/chefsavvy.com/chefsavvy.json b/tests/test_data/chefsavvy.com/chefsavvy.json
index 26a77c1f..223dc455 100644
--- a/tests/test_data/chefsavvy.com/chefsavvy.json
+++ b/tests/test_data/chefsavvy.com/chefsavvy.json
@@ -59,5 +59,11 @@
   "site_name": "Chef Savvy",
   "title": "Slow Cooker Broccoli Beef",
   "total_time": 310,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "Chuck Roast",
+    "Garlic",
+    "Sesame",
+    "Slow Cooker Broccoli Beef"
+  ]
 }
diff --git a/tests/test_data/comidinhasdochef.com/comidinhasdochef.json b/tests/test_data/comidinhasdochef.com/comidinhasdochef.json
index 30f886b2..544fe0a1 100644
--- a/tests/test_data/comidinhasdochef.com/comidinhasdochef.json
+++ b/tests/test_data/comidinhasdochef.com/comidinhasdochef.json
@@ -68,5 +68,8 @@
   "site_name": "Comidinhas do Chef",
   "title": "Coxa de Frango na Fritadeira Elétrica",
   "total_time": 30,
-  "yields": "5 servings"
+  "yields": "5 servings",
+  "keywords": [
+    "Coxa de Frango na Fritadeira Elétrica"
+  ]
 }
diff --git a/tests/test_data/cookieandkate.com/cookieandkate.json b/tests/test_data/cookieandkate.com/cookieandkate.json
index 14e36a44..441efbbd 100644
--- a/tests/test_data/cookieandkate.com/cookieandkate.json
+++ b/tests/test_data/cookieandkate.com/cookieandkate.json
@@ -64,5 +64,8 @@
   "title": "Broccoli, Cheddar & Spinach Frittata",
   "total_time": 40,
   "yields": "6 servings",
-  "cooking_method": "Stovetop and baked"
+  "cooking_method": "Stovetop and baked",
+  "keywords": [
+    "Broccoli Cheddar Frittata"
+  ]
 }
diff --git a/tests/test_data/cooking.nytimes.com/nytimes.json b/tests/test_data/cooking.nytimes.com/nytimes.json
index 724664bd..2ffa82cc 100644
--- a/tests/test_data/cooking.nytimes.com/nytimes.json
+++ b/tests/test_data/cooking.nytimes.com/nytimes.json
@@ -62,5 +62,11 @@
   "site_name": "NYT Cooking",
   "title": "Cacio e Pepe Crackers",
   "total_time": 45,
-  "yields": "160 servings"
+  "yields": "160 servings",
+  "keywords": [
+    "butter",
+    "cheddar",
+    "flour",
+    "pecorino"
+  ]
 }
diff --git a/tests/test_data/cooking.nytimes.com/nytimes_groups.json b/tests/test_data/cooking.nytimes.com/nytimes_groups.json
index 8b82f8fe..3a335680 100644
--- a/tests/test_data/cooking.nytimes.com/nytimes_groups.json
+++ b/tests/test_data/cooking.nytimes.com/nytimes_groups.json
@@ -84,5 +84,15 @@
   "site_name": "NYT Cooking",
   "title": "Crispy Potato Tacos",
   "total_time": 75,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "cheddar",
+    "cilantro",
+    "corn tortilla",
+    "freezer friendly",
+    "make-ahead",
+    "potato",
+    "tomato",
+    "vegetarian"
+  ]
 }
diff --git a/tests/test_data/cookinglight.com/cookinglight.json b/tests/test_data/cookinglight.com/cookinglight.json
index 3b1df25f..dc06e304 100644
--- a/tests/test_data/cookinglight.com/cookinglight.json
+++ b/tests/test_data/cookinglight.com/cookinglight.json
@@ -1,7 +1,6 @@
 {
   "author": "Cooking Light",
   "canonical_url": "https://www.cookinglight.com/recipes/avocado-black-bean-and-charred-tomato-bowl",
-  "category": "",
   "host": "cookinglight.com",
   "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3A%2F%2Fimg1.cookinglight.timeinc.net%2Fsites%2Fdefault%2Ffiles%2Fstyles%2F4_3_horizontal_-_1200x900%2Fpublic%2F1542730855%2Favocado-black-bean-and-charred-tomato-bowl-detox-book-p28.jpg%3Fitok%3D7dflTpmM",
   "ingredient_groups": [
diff --git a/tests/test_data/copykat.com/copykat.json b/tests/test_data/copykat.com/copykat.json
index 1f3950b5..3d7765de 100644
--- a/tests/test_data/copykat.com/copykat.json
+++ b/tests/test_data/copykat.com/copykat.json
@@ -62,5 +62,10 @@
   "site_name": "CopyKat Recipes",
   "title": "Make Tender Beef Tips and Gravy",
   "total_time": 40,
-  "yields": "10 servings"
+  "yields": "10 servings",
+  "keywords": [
+    "Beef Tips and Gravy",
+    "Instant Pot Recipes",
+    "Slow Cooker Recipes"
+  ]
 }
diff --git a/tests/test_data/countryliving.com/countryliving.json b/tests/test_data/countryliving.com/countryliving.json
index 55ab5944..d3a1b548 100644
--- a/tests/test_data/countryliving.com/countryliving.json
+++ b/tests/test_data/countryliving.com/countryliving.json
@@ -48,5 +48,10 @@
   "site_name": "Country Living",
   "title": "Honey-Apple Baked Brie with Fried Sage",
   "total_time": 35,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "appetizers",
+    "autumn",
+    "cocktail party"
+  ]
 }
diff --git a/tests/test_data/cucchiaio.it/cucchiaio.json b/tests/test_data/cucchiaio.it/cucchiaio.json
index 5f5fcfc9..487a9a1e 100644
--- a/tests/test_data/cucchiaio.it/cucchiaio.json
+++ b/tests/test_data/cucchiaio.it/cucchiaio.json
@@ -49,5 +49,9 @@
   "language": "it",
   "ratings": 4.0,
   "site_name": "Il Cucchiaio d'Argento",
-  "title": "Pesce spada al miele millefiori, pomodorini e patatine novelle"
+  "title": "Pesce spada al miele millefiori, pomodorini e patatine novelle",
+  "keywords": [
+    "Pesce spada al miele millefiori",
+    "pomodorini e patatine novelle"
+  ]
 }
diff --git a/tests/test_data/cybercook.com.br/cybercook.json b/tests/test_data/cybercook.com.br/cybercook.json
index cfc2f6d5..5b642b07 100644
--- a/tests/test_data/cybercook.com.br/cybercook.json
+++ b/tests/test_data/cybercook.com.br/cybercook.json
@@ -51,5 +51,20 @@
   "site_name": null,
   "title": "Strogonoff de Frango",
   "total_time": 30,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "Sal",
+    "Receitas de Strogonoff",
+    "Receitas com Caldo",
+    "Peito de Frango",
+    "Creme de Leite",
+    "Caldo de Galinha",
+    "Russa",
+    "Cozinha Internacional",
+    "Receitas Salgadas",
+    "Frango",
+    "Aves",
+    "Pratos principais",
+    "Receitas de Frango Xadrez"
+  ]
 }
diff --git a/tests/test_data/delish.com/delish_1.json b/tests/test_data/delish.com/delish_1.json
index 9dbddb69..cb75f613 100644
--- a/tests/test_data/delish.com/delish_1.json
+++ b/tests/test_data/delish.com/delish_1.json
@@ -64,5 +64,15 @@
   "site_name": "Delish",
   "title": "Pumpkin Cheesecake Roll",
   "total_time": 60,
-  "yields": "8 servings"
+  "yields": "8 servings",
+  "keywords": [
+    "pumpkin roll",
+    "pumpkin desserts",
+    "fall desserts",
+    "swiss roll",
+    "cream cheese frosting",
+    "thanksgiving desserts",
+    "pumpkin cake",
+    ""
+  ]
 }
diff --git a/tests/test_data/delish.com/delish_2.json b/tests/test_data/delish.com/delish_2.json
index 7ff7adf1..a7fc0c35 100644
--- a/tests/test_data/delish.com/delish_2.json
+++ b/tests/test_data/delish.com/delish_2.json
@@ -73,5 +73,12 @@
   "site_name": "Delish",
   "title": "Apple Cookies",
   "total_time": 100,
-  "yields": "20 servings"
+  "yields": "20 servings",
+  "keywords": [
+    "autumn",
+    "baking",
+    "dessert",
+    "nut-free",
+    "vegetarian"
+  ]
 }
diff --git a/tests/test_data/delish.com/delish_rogue_ol.json b/tests/test_data/delish.com/delish_rogue_ol.json
index 5d449f15..d6b5b7b4 100644
--- a/tests/test_data/delish.com/delish_rogue_ol.json
+++ b/tests/test_data/delish.com/delish_rogue_ol.json
@@ -58,5 +58,14 @@
   "site_name": "Delish",
   "title": "Baileys Cheesecake",
   "total_time": 480,
-  "yields": "10 servings"
+  "yields": "10 servings",
+  "keywords": [
+    "baileys cheesecake",
+    "chocolate ganache cheesecake",
+    "baileys desserts",
+    "st patricks day desserts",
+    "st patricks day cheesecake",
+    "boozy cheesecake recipes",
+    "cheesecake recipes"
+  ]
 }
diff --git a/tests/test_data/downshiftology.com/downshiftology.json b/tests/test_data/downshiftology.com/downshiftology.json
index eb4515ee..e5935e14 100644
--- a/tests/test_data/downshiftology.com/downshiftology.json
+++ b/tests/test_data/downshiftology.com/downshiftology.json
@@ -71,5 +71,9 @@
   "equipment": [
     "Metal Skewers",
     "Lodge Indoor Grill"
+  ],
+  "keywords": [
+    "easy chicken kabobs",
+    "Greek chicken kabobs"
   ]
 }
diff --git a/tests/test_data/eatingbirdfood.com/eatingbirdfood.json b/tests/test_data/eatingbirdfood.com/eatingbirdfood.json
index 2a20d660..721f1330 100644
--- a/tests/test_data/eatingbirdfood.com/eatingbirdfood.json
+++ b/tests/test_data/eatingbirdfood.com/eatingbirdfood.json
@@ -68,5 +68,8 @@
   "site_name": "Eating Bird Food",
   "title": "Easy Shakshuka",
   "total_time": 40,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "shakshuka"
+  ]
 }
diff --git a/tests/test_data/eatwell101.com/eatwell101.json b/tests/test_data/eatwell101.com/eatwell101.json
index c139ee99..52dabc30 100644
--- a/tests/test_data/eatwell101.com/eatwell101.json
+++ b/tests/test_data/eatwell101.com/eatwell101.json
@@ -70,5 +70,18 @@
   "site_name": "Eatwell101",
   "title": "Creamy Spinach Turkey Meatballs",
   "total_time": 40,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "chicken",
+    "dinner",
+    "gluten free cooking",
+    "gluten free main dishes",
+    "keto",
+    "keto main dishes",
+    "low-carb",
+    "meatballs",
+    "Most Popular Recipes",
+    "turkey",
+    ""
+  ]
 }
diff --git a/tests/test_data/eatwhattonight.com/eatwhattonight.json b/tests/test_data/eatwhattonight.com/eatwhattonight.json
index 75f746db..c2a73155 100644
--- a/tests/test_data/eatwhattonight.com/eatwhattonight.json
+++ b/tests/test_data/eatwhattonight.com/eatwhattonight.json
@@ -53,5 +53,8 @@
   "site_name": "Eat What Tonight - Singapore Food & Lifestyle Blog",
   "title": "Ginger Soya Chicken",
   "total_time": 45,
-  "yields": "2 servings"
+  "yields": "2 servings",
+  "keywords": [
+    "Chicken"
+  ]
 }
diff --git a/tests/test_data/elavegan.com/elavegan_1.json b/tests/test_data/elavegan.com/elavegan_1.json
index 9faa4359..6a751325 100644
--- a/tests/test_data/elavegan.com/elavegan_1.json
+++ b/tests/test_data/elavegan.com/elavegan_1.json
@@ -70,5 +70,12 @@
   "site_name": "Elavegan",
   "title": "Red Lentil Dahl",
   "total_time": 30,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "creamy",
+    "curry",
+    "dal",
+    "dhal",
+    "lentils"
+  ]
 }
diff --git a/tests/test_data/elavegan.com/elavegan_2.json b/tests/test_data/elavegan.com/elavegan_2.json
index 1b1b4317..b14ce8ec 100644
--- a/tests/test_data/elavegan.com/elavegan_2.json
+++ b/tests/test_data/elavegan.com/elavegan_2.json
@@ -93,5 +93,13 @@
   "equipment": [
     "Kitchen scale",
     "8x8 pan"
+  ],
+  "keywords": [
+    "coffee crumble cake",
+    "dairy-free cake",
+    "gluten free coffee cake",
+    "streusel cake",
+    "vegan coffee cake",
+    "vegan crumb cake"
   ]
 }
diff --git a/tests/test_data/errenskitchen.com/errenskitchen.json b/tests/test_data/errenskitchen.com/errenskitchen.json
index 66a42aaf..1542e13b 100644
--- a/tests/test_data/errenskitchen.com/errenskitchen.json
+++ b/tests/test_data/errenskitchen.com/errenskitchen.json
@@ -70,5 +70,10 @@
   "site_name": "Erren's Kitchen",
   "title": "Creamy Sun-Dried Tomato Pasta with Chicken",
   "total_time": 30,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "Creamy Sun-Dried Tomato Pasta",
+    "Creamy Sun-Dried Tomato Pasta with Chicken",
+    "Sun-Dried Tomato Pasta"
+  ]
 }
diff --git a/tests/test_data/farmhouseonboone.com/farmhouseonboone.json b/tests/test_data/farmhouseonboone.com/farmhouseonboone.json
index 562df049..090bfe73 100644
--- a/tests/test_data/farmhouseonboone.com/farmhouseonboone.json
+++ b/tests/test_data/farmhouseonboone.com/farmhouseonboone.json
@@ -78,5 +78,11 @@
   "site_name": "Farmhouse on Boone",
   "title": "Sourdough Croissants",
   "total_time": 900,
-  "yields": "12 servings"
+  "yields": "12 servings",
+  "keywords": [
+    "baking",
+    "sourdough croissants",
+    "croissants",
+    "sourdough crescent rolls"
+  ]
 }
diff --git a/tests/test_data/feastingathome.com/feastingathome.json b/tests/test_data/feastingathome.com/feastingathome.json
index 74e93071..88029f8c 100644
--- a/tests/test_data/feastingathome.com/feastingathome.json
+++ b/tests/test_data/feastingathome.com/feastingathome.json
@@ -75,5 +75,11 @@
   "author": "Sylvia Fountaine | feasting at home",
   "language": "en-US",
   "site_name": "Feasting At Home",
-  "cooking_method": "stovetop"
+  "cooking_method": "stovetop",
+  "keywords": [
+    "tomato risotto",
+    "vegetarian risotto",
+    "shrimp risotto",
+    ""
+  ]
 }
diff --git a/tests/test_data/fifteenspatulas.com/fifteenspatulas.json b/tests/test_data/fifteenspatulas.com/fifteenspatulas.json
index 792f0803..629e39a3 100644
--- a/tests/test_data/fifteenspatulas.com/fifteenspatulas.json
+++ b/tests/test_data/fifteenspatulas.com/fifteenspatulas.json
@@ -54,5 +54,9 @@
   "site_name": "Fifteen Spatulas",
   "title": "Creme Brulee",
   "total_time": 420,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "creme brulee",
+    "orange creme brulee"
+  ]
 }
diff --git a/tests/test_data/food.com/food.json b/tests/test_data/food.com/food.json
index 69272600..b9330bd2 100644
--- a/tests/test_data/food.com/food.json
+++ b/tests/test_data/food.com/food.json
@@ -54,5 +54,17 @@
   "site_name": null,
   "title": "Chicken Noodle Soup With Carrots, Parsnips and Dill",
   "total_time": 45,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "Chicken",
+    "Poultry",
+    "Vegetable",
+    "Meat",
+    "Spring",
+    "Winter",
+    "Weeknight",
+    "< 60 Mins",
+    "Beginner Cook",
+    "Easy"
+  ]
 }
diff --git a/tests/test_data/food52.com/food52.json b/tests/test_data/food52.com/food52.json
index 5511d439..bdfa9e5a 100644
--- a/tests/test_data/food52.com/food52.json
+++ b/tests/test_data/food52.com/food52.json
@@ -56,5 +56,13 @@
   "site_name": "Food52",
   "title": "Sticky Pomegranate & Black Pepper Chicken Wings",
   "total_time": 1520,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "Pomegranate",
+    "Chicken",
+    "Roast",
+    "Brine",
+    "Walnut",
+    "Game Day"
+  ]
 }
diff --git a/tests/test_data/foodfidelity.com/foodfidelity.json b/tests/test_data/foodfidelity.com/foodfidelity.json
index d8a80aab..bf4bfd62 100644
--- a/tests/test_data/foodfidelity.com/foodfidelity.json
+++ b/tests/test_data/foodfidelity.com/foodfidelity.json
@@ -54,5 +54,9 @@
   "site_name": "Food Fidelity",
   "title": "Strawberry Oatmeal with Orange Juice",
   "total_time": 7,
-  "yields": "2 servings"
+  "yields": "2 servings",
+  "keywords": [
+    "oatmeal",
+    "strawberry oatmeal"
+  ]
 }
diff --git a/tests/test_data/foodfidelity.com/foodfidelity_groups.json b/tests/test_data/foodfidelity.com/foodfidelity_groups.json
index e3a047c5..acd8fd8c 100644
--- a/tests/test_data/foodfidelity.com/foodfidelity_groups.json
+++ b/tests/test_data/foodfidelity.com/foodfidelity_groups.json
@@ -84,5 +84,8 @@
   "site_name": "Food Fidelity",
   "title": "Citrus Israeli Couscous Salad With Asparagus and Cranberries",
   "total_time": 35,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "couscous"
+  ]
 }
diff --git a/tests/test_data/forktospoon.com/forktospoon.json b/tests/test_data/forktospoon.com/forktospoon.json
index adb4115a..4a672cb0 100644
--- a/tests/test_data/forktospoon.com/forktospoon.json
+++ b/tests/test_data/forktospoon.com/forktospoon.json
@@ -66,5 +66,8 @@
     "Air Fryer",
     "Cooking Spray",
     "Parchment Paper"
+  ],
+  "keywords": [
+    "Air Fryer Parmeasn Tomatoes"
   ]
 }
diff --git a/tests/test_data/franzoesischkochen.de/franzoesischkochen.json b/tests/test_data/franzoesischkochen.de/franzoesischkochen.json
index e367550f..4ff3737b 100644
--- a/tests/test_data/franzoesischkochen.de/franzoesischkochen.json
+++ b/tests/test_data/franzoesischkochen.de/franzoesischkochen.json
@@ -57,5 +57,8 @@
   "site_name": "Französisch Kochen by Aurélie Bastian",
   "title": "Tourte mit Feigen und Confit de canard",
   "total_time": 90,
-  "yields": null
+  "yields": null,
+  "keywords": [
+    "Fleisch"
+  ]
 }
diff --git a/tests/test_data/godt.no/godt.json b/tests/test_data/godt.no/godt.json
index 51330f0a..bd73f28d 100644
--- a/tests/test_data/godt.no/godt.json
+++ b/tests/test_data/godt.no/godt.json
@@ -37,5 +37,11 @@
   "site_name": "godt.no",
   "title": "Grove pannekaker - Perfekt middag",
   "total_time": 60,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "Pannekaker og vafler",
+    "Hverdag",
+    "Vegetar",
+    "Enkel"
+  ]
 }
diff --git a/tests/test_data/gonnawantseconds.com/gonnawantseconds.json b/tests/test_data/gonnawantseconds.com/gonnawantseconds.json
index 6b5fc034..7d7ad427 100644
--- a/tests/test_data/gonnawantseconds.com/gonnawantseconds.json
+++ b/tests/test_data/gonnawantseconds.com/gonnawantseconds.json
@@ -56,5 +56,11 @@
   "site_name": "Gonna Want Seconds",
   "title": "White Chicken Enchiladas",
   "total_time": 40,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "How DO I Make White Chicken Enchiladas Recipe",
+    "How To Make White Chicken Enchiladas Recipe",
+    "White Chicken Enchiladas",
+    "White Chicken Enchiladas Recipe"
+  ]
 }
diff --git a/tests/test_data/goodfooddiscoveries.com/goodfooddiscoveries.json b/tests/test_data/goodfooddiscoveries.com/goodfooddiscoveries.json
index c7a41486..25fe2c59 100644
--- a/tests/test_data/goodfooddiscoveries.com/goodfooddiscoveries.json
+++ b/tests/test_data/goodfooddiscoveries.com/goodfooddiscoveries.json
@@ -54,5 +54,8 @@
   "site_name": "Good Food Discoveries",
   "title": "Lemon Risotto",
   "total_time": 30,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "lemon"
+  ]
 }
diff --git a/tests/test_data/goodhousekeeping.com/goodhousekeeping_1.json b/tests/test_data/goodhousekeeping.com/goodhousekeeping_1.json
index 8323ac05..ac398ca3 100644
--- a/tests/test_data/goodhousekeeping.com/goodhousekeeping_1.json
+++ b/tests/test_data/goodhousekeeping.com/goodhousekeeping_1.json
@@ -46,5 +46,12 @@
   "site_name": "Good Housekeeping",
   "title": "Spiced pumpkin soup",
   "total_time": 20,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "pumpkin soup",
+    "pumpkin soup recipe",
+    "easy pumpkin soup",
+    "how to make pumpkin soup",
+    "pumpkin recipes"
+  ]
 }
diff --git a/tests/test_data/goodhousekeeping.com/goodhousekeeping_2.json b/tests/test_data/goodhousekeeping.com/goodhousekeeping_2.json
index dea7c4a9..4de722ef 100644
--- a/tests/test_data/goodhousekeeping.com/goodhousekeeping_2.json
+++ b/tests/test_data/goodhousekeeping.com/goodhousekeeping_2.json
@@ -65,5 +65,12 @@
   "site_name": "Good Housekeeping",
   "title": "Vegetarian fajitas",
   "total_time": 30,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "dinner",
+    "vegetarian",
+    "fajitas",
+    "vegetarian fajitas",
+    "halloumi"
+  ]
 }
diff --git a/tests/test_data/goodhousekeeping.com/goodhousekeeping_3.json b/tests/test_data/goodhousekeeping.com/goodhousekeeping_3.json
index 49c01ae4..789ef4d7 100644
--- a/tests/test_data/goodhousekeeping.com/goodhousekeeping_3.json
+++ b/tests/test_data/goodhousekeeping.com/goodhousekeeping_3.json
@@ -42,5 +42,8 @@
   "site_name": "Good Housekeeping",
   "title": "Slow Cooker Chocolate Fondant Dessert",
   "total_time": 200,
-  "yields": "8 servings"
+  "yields": "8 servings",
+  "keywords": [
+    "Food News/Products"
+  ]
 }
diff --git a/tests/test_data/goodhousekeeping.com/goodhousekeeping_4.json b/tests/test_data/goodhousekeeping.com/goodhousekeeping_4.json
index 4a8f6301..fc1b9887 100644
--- a/tests/test_data/goodhousekeeping.com/goodhousekeeping_4.json
+++ b/tests/test_data/goodhousekeeping.com/goodhousekeeping_4.json
@@ -86,5 +86,13 @@
   "site_name": "Good Housekeeping",
   "title": "Jaffa Cake cheesecake",
   "total_time": 85,
-  "yields": "10 servings"
+  "yields": "10 servings",
+  "keywords": [
+    "baking",
+    "dessert",
+    "cheesecake",
+    "jaffa cake",
+    "jaffa cake cheesecake",
+    "chocolate orange cheesecake"
+  ]
 }
diff --git a/tests/test_data/greatbritishchefs.com/greatbritishchefs.json b/tests/test_data/greatbritishchefs.com/greatbritishchefs.json
index 91829ad5..558a72d9 100644
--- a/tests/test_data/greatbritishchefs.com/greatbritishchefs.json
+++ b/tests/test_data/greatbritishchefs.com/greatbritishchefs.json
@@ -60,5 +60,8 @@
   "language": "en",
   "site_name": "Great British Chefs",
   "title": "Picadillo",
-  "total_time": 50
+  "total_time": 50,
+  "keywords": [
+    "easy"
+  ]
 }
diff --git a/tests/test_data/halfbakedharvest.com/halfbakedharvest_groups.json b/tests/test_data/halfbakedharvest.com/halfbakedharvest_groups.json
index 9ea31aee..c0abb474 100644
--- a/tests/test_data/halfbakedharvest.com/halfbakedharvest_groups.json
+++ b/tests/test_data/halfbakedharvest.com/halfbakedharvest_groups.json
@@ -74,5 +74,10 @@
   "site_name": "Half Baked Harvest",
   "title": "Street Corn Pasta Salad",
   "total_time": 30,
-  "yields": "8 servings"
+  "yields": "8 servings",
+  "keywords": [
+    "30 minute meal",
+    "quick and easy",
+    "summer pasta"
+  ]
 }
diff --git a/tests/test_data/handletheheat.com/handletheheat.json b/tests/test_data/handletheheat.com/handletheheat.json
index 5de236aa..0922374a 100644
--- a/tests/test_data/handletheheat.com/handletheheat.json
+++ b/tests/test_data/handletheheat.com/handletheheat.json
@@ -47,5 +47,9 @@
   "site_name": "Handle the Heat",
   "title": "Best Ever Chewy Brownies",
   "total_time": 45,
-  "yields": "9 servings"
+  "yields": "9 servings",
+  "keywords": [
+    "brownies",
+    "chewy brownies"
+  ]
 }
diff --git a/tests/test_data/hassanchef.com/hassanchef.json b/tests/test_data/hassanchef.com/hassanchef.json
index 7f367c8b..57ca62ba 100644
--- a/tests/test_data/hassanchef.com/hassanchef.json
+++ b/tests/test_data/hassanchef.com/hassanchef.json
@@ -131,5 +131,10 @@
   "site_name": "hassanchef restaurant style recipes",
   "title": "Chicken lollipop recipe",
   "total_time": 30,
-  "yields": "2 servings"
+  "yields": "2 servings",
+  "keywords": [
+    "Chicken lollipop recipe",
+    "chicken lollipop gravy",
+    "Chicken lollipop masala"
+  ]
 }
diff --git a/tests/test_data/hellofresh.com/hellofresh.json b/tests/test_data/hellofresh.com/hellofresh.json
index 1b58ba68..a4960fb9 100644
--- a/tests/test_data/hellofresh.com/hellofresh.json
+++ b/tests/test_data/hellofresh.com/hellofresh.json
@@ -52,5 +52,8 @@
   "site_name": "HelloFresh",
   "title": "Thai Style Pork Rice Bowl with Green Beans, Coriander and Rice",
   "total_time": 50,
-  "yields": "2 servings"
+  "yields": "2 servings",
+  "keywords": [
+    "Spicy"
+  ]
 }
diff --git a/tests/test_data/hellofresh.com/hellofresh_adhoc.json b/tests/test_data/hellofresh.com/hellofresh_adhoc.json
index 9eb1cfef..a29e2827 100644
--- a/tests/test_data/hellofresh.com/hellofresh_adhoc.json
+++ b/tests/test_data/hellofresh.com/hellofresh_adhoc.json
@@ -56,5 +56,8 @@
   "site_name": "HelloFresh",
   "title": "Chakchouka au chèvre frais avec du piment, des œufs et du persil",
   "total_time": 65,
-  "yields": "2 servings"
+  "yields": "2 servings",
+  "keywords": [
+    "Végétarien"
+  ]
 }
diff --git a/tests/test_data/hersheyland.com/herseyland.json b/tests/test_data/hersheyland.com/herseyland.json
index 242455eb..ff97317e 100644
--- a/tests/test_data/hersheyland.com/herseyland.json
+++ b/tests/test_data/hersheyland.com/herseyland.json
@@ -70,5 +70,14 @@
     "Mixer",
     "Oven",
     "Wire Rack"
+  ],
+  "keywords": [
+    "Beginner",
+    "Birthdays",
+    "HERSHEY'S",
+    "Evergreen",
+    "Milk Chocolate",
+    "HERSHEY'S Cocoa",
+    "Cake"
   ]
 }
diff --git a/tests/test_data/ica.se/ica.json b/tests/test_data/ica.se/ica.json
index 5635d517..0513a198 100644
--- a/tests/test_data/ica.se/ica.json
+++ b/tests/test_data/ica.se/ica.json
@@ -2,7 +2,6 @@
   "author": "ICA Köket",
   "canonical_url": "https://www.ica.se/recept/lysande-gul-fiskgryta-1677/",
   "category": "Huvudrätt,Middag",
-  "cuisine": "",
   "description": "Denna fiskgryta får sin lysande solgula färg och ljuvliga smak av saffran, vitlök och tomatpuré. Grytan blir matig och mättande med lax, torsk, räkor och musslor och passar perfekt att bjuda på till en lite festligare middag med eller utan gäster.",
   "host": "ica.se",
   "image": "https://assets.icanet.se/t_ICAseAbsoluteUrl/imagevaultfiles/id_243155/cf_259/lysande_gul_fiskgryta.jpg",
diff --git a/tests/test_data/im-worthy.com/imworthy.json b/tests/test_data/im-worthy.com/imworthy.json
index 840140c0..bcc7716b 100644
--- a/tests/test_data/im-worthy.com/imworthy.json
+++ b/tests/test_data/im-worthy.com/imworthy.json
@@ -49,5 +49,14 @@
   "site_name": "IM-WORTHY",
   "title": "Vegan Almond Flour Pancakes (Fluffy & Gluten-free)",
   "total_time": 25,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "almond flour pancakes",
+    "almond flour recipes",
+    "healthy breakfast pancakes",
+    "healthy Breakfast Recipe",
+    "pancakes using almond flour",
+    "pancakes with almond flour",
+    "Vegan Almond Flour Pancakes"
+  ]
 }
diff --git a/tests/test_data/indianhealthyrecipes.com/indianhealthyrecipes.json b/tests/test_data/indianhealthyrecipes.com/indianhealthyrecipes.json
index d861d6af..c9862474 100644
--- a/tests/test_data/indianhealthyrecipes.com/indianhealthyrecipes.json
+++ b/tests/test_data/indianhealthyrecipes.com/indianhealthyrecipes.json
@@ -68,5 +68,9 @@
   "site_name": "Swasthi's Recipes",
   "title": "Banana Cake Recipe",
   "total_time": 50,
-  "yields": "16 servings"
+  "yields": "16 servings",
+  "keywords": [
+    "Banana cake",
+    "banana cake recipe"
+  ]
 }
diff --git a/tests/test_data/izzycooking.com/izzycooking.json b/tests/test_data/izzycooking.com/izzycooking.json
index a81f8cfa..97122563 100644
--- a/tests/test_data/izzycooking.com/izzycooking.json
+++ b/tests/test_data/izzycooking.com/izzycooking.json
@@ -57,5 +57,10 @@
   "site_name": "IzzyCooking",
   "title": "Oreo Cheesecake Bites Recipe (+Video)",
   "total_time": 35,
-  "yields": "16 servings"
+  "yields": "16 servings",
+  "keywords": [
+    "mini cheesecakes",
+    "oreo cheesecake bites",
+    "oreo cheesecake cupcakes"
+  ]
 }
diff --git a/tests/test_data/jamieoliver.com/jamieoliver.json b/tests/test_data/jamieoliver.com/jamieoliver.json
index 51941f01..8badf343 100644
--- a/tests/test_data/jamieoliver.com/jamieoliver.json
+++ b/tests/test_data/jamieoliver.com/jamieoliver.json
@@ -54,5 +54,21 @@
   "site_name": "Jamie Oliver",
   "title": "Bloomin' brilliant brownies",
   "total_time": 40,
-  "yields": "20 servings"
+  "yields": "20 servings",
+  "keywords": [
+    "chocolate",
+    "brownies",
+    "brownie",
+    "vegetarian",
+    "sweets and desserts",
+    "baking",
+    "cooking",
+    "chocolate brownies",
+    "party food",
+    "baking and desserts",
+    "Christmas",
+    "Dinner Party",
+    "non-promotable",
+    "Popular"
+  ]
 }
diff --git a/tests/test_data/jimcooksfoodgood.com/jimcooksfoodgood.json b/tests/test_data/jimcooksfoodgood.com/jimcooksfoodgood.json
index bec9cd16..b8e63e1a 100644
--- a/tests/test_data/jimcooksfoodgood.com/jimcooksfoodgood.json
+++ b/tests/test_data/jimcooksfoodgood.com/jimcooksfoodgood.json
@@ -48,5 +48,8 @@
   "site_name": "Jim Cooks Food Good!",
   "title": "German Potato Salad",
   "total_time": 40,
-  "yields": "8 servings"
+  "yields": "8 servings",
+  "keywords": [
+    "#healthyrecipe"
+  ]
 }
diff --git a/tests/test_data/joyfoodsunshine.com/joyfoodsunshine.json b/tests/test_data/joyfoodsunshine.com/joyfoodsunshine.json
index df13fd0f..d1b2ec72 100644
--- a/tests/test_data/joyfoodsunshine.com/joyfoodsunshine.json
+++ b/tests/test_data/joyfoodsunshine.com/joyfoodsunshine.json
@@ -68,5 +68,18 @@
     "pizza stone",
     "Pizza Peel",
     "Pizza scissors"
+  ],
+  "keywords": [
+    "best pizza dough",
+    "best pizza dough recipe",
+    "easy homemade pizza dough",
+    "easy pizza dough",
+    "homemade pizza dough",
+    "homemade pizza dough recipe",
+    "how to make pizza dough",
+    "pizza crust",
+    "pizza crust recipe",
+    "pizza dough",
+    "pizza dough recipe"
   ]
 }
diff --git a/tests/test_data/justataste.com/justataste.json b/tests/test_data/justataste.com/justataste.json
index 6df0f79d..bde4bfc3 100644
--- a/tests/test_data/justataste.com/justataste.json
+++ b/tests/test_data/justataste.com/justataste.json
@@ -65,5 +65,10 @@
   "site_name": "Just a Taste",
   "title": "Baked Chicken and Cheese Taquitos (Oven or Air Fryer)",
   "total_time": 55,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "chicken",
+    "lime juice",
+    "paprika"
+  ]
 }
diff --git a/tests/test_data/justonecookbook.com/justonecookbook.json b/tests/test_data/justonecookbook.com/justonecookbook.json
index c1dc2563..9c1d5b3d 100644
--- a/tests/test_data/justonecookbook.com/justonecookbook.json
+++ b/tests/test_data/justonecookbook.com/justonecookbook.json
@@ -77,5 +77,8 @@
   "site_name": "Just One Cookbook",
   "title": "Yaki Onigiri (Grilled Rice Ball)",
   "total_time": 30,
-  "yields": "9 servings"
+  "yields": "9 servings",
+  "keywords": [
+    "japanese rice"
+  ]
 }
diff --git a/tests/test_data/kennymcgovern.com/kennymcgovern.json b/tests/test_data/kennymcgovern.com/kennymcgovern.json
index c9808bf1..1c561d8b 100644
--- a/tests/test_data/kennymcgovern.com/kennymcgovern.json
+++ b/tests/test_data/kennymcgovern.com/kennymcgovern.json
@@ -56,5 +56,11 @@
   "site_name": "Kenny McGovern",
   "title": "Crispy Chicken Strips",
   "total_time": 16,
-  "yields": "1 serving"
+  "yields": "1 serving",
+  "keywords": [
+    "chicken",
+    "crispy chicken",
+    "kfc",
+    "fried chicken"
+  ]
 }
diff --git a/tests/test_data/kingarthurbaking.com/kingarthur.json b/tests/test_data/kingarthurbaking.com/kingarthur.json
index 55f11902..78d9465b 100644
--- a/tests/test_data/kingarthurbaking.com/kingarthur.json
+++ b/tests/test_data/kingarthurbaking.com/kingarthur.json
@@ -70,5 +70,12 @@
   "site_name": "King Arthur Baking",
   "title": "Spiced Rye Ginger Cookies",
   "total_time": 35,
-  "yields": "22 cookies"
+  "yields": "22 cookies",
+  "keywords": [
+    "Drop cookies",
+    "Cinnamon",
+    "Rye",
+    "Spice",
+    "Quick & easy"
+  ]
 }
diff --git a/tests/test_data/kitchenstories.com/kitchenstories.json b/tests/test_data/kitchenstories.com/kitchenstories.json
index f0e59e8d..29080024 100644
--- a/tests/test_data/kitchenstories.com/kitchenstories.json
+++ b/tests/test_data/kitchenstories.com/kitchenstories.json
@@ -43,5 +43,32 @@
   "ratings": 0.81,
   "site_name": "Kitchen Stories",
   "title": "Special strawberry jam with matcha",
-  "total_time": 80
+  "total_time": 80,
+  "keywords": [
+    "Brand Content",
+    "easter",
+    "vegetarian",
+    "valentines day",
+    "vegan",
+    "sweet",
+    "berries",
+    "gluten free",
+    "crowd pleaser",
+    "prepare ahead",
+    "pescetarian",
+    "comfort food",
+    "brunch",
+    "breakfast",
+    "lactose free",
+    "alcohol free",
+    "Meatless",
+    "Neff Großgeräte",
+    "mothers-day",
+    "sauces and dips",
+    "spring",
+    "summer",
+    "base",
+    "2022-05",
+    "confidence"
+  ]
 }
diff --git a/tests/test_data/kochbar.de/kochbar.json b/tests/test_data/kochbar.de/kochbar.json
index c1fcd944..b947ece7 100644
--- a/tests/test_data/kochbar.de/kochbar.json
+++ b/tests/test_data/kochbar.de/kochbar.json
@@ -82,5 +82,13 @@
   "site_name": "kochbar.de",
   "title": "Ligurisches Hühnerragout mit Zucchini – Spezzatino con zucchine",
   "total_time": 70,
-  "yields": "2 servings"
+  "yields": "2 servings",
+  "keywords": [
+    "Ligurisches Hühnerragout mit Zucchini – Spezzatino con zucchine",
+    "Hühnerbrust",
+    "ohne Knochen",
+    "Knoblauchzehen",
+    "frisch",
+    "Zitronensaft"
+  ]
 }
diff --git a/tests/test_data/lecker.de/lecker_1.json b/tests/test_data/lecker.de/lecker_1.json
index 58a87420..7e8c0759 100644
--- a/tests/test_data/lecker.de/lecker_1.json
+++ b/tests/test_data/lecker.de/lecker_1.json
@@ -60,5 +60,25 @@
   "site_name": "lecker.de",
   "title": "Gemüsepfanne mit Hähnchen, Zuckerschoten und Brokkoli",
   "total_time": 25,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "Hähnchen",
+    "Geflügel",
+    "Fleisch",
+    "Zutaten",
+    "Mittagessen",
+    "Mahlzeit",
+    "Rezepte",
+    "Abendbrot",
+    "Low Carb",
+    "Gesundes Essen",
+    "Hauptgerichte",
+    "Menüs",
+    "Brokkoli",
+    "Kohl",
+    "Gemüse",
+    "Zuckerschoten",
+    "Gemüsepfanne",
+    "Pfannengerichte"
+  ]
 }
diff --git a/tests/test_data/lecremedelacrumb.com/lecremedelacrumb.json b/tests/test_data/lecremedelacrumb.com/lecremedelacrumb.json
index a562bb2f..f6b0e31f 100644
--- a/tests/test_data/lecremedelacrumb.com/lecremedelacrumb.json
+++ b/tests/test_data/lecremedelacrumb.com/lecremedelacrumb.json
@@ -56,5 +56,11 @@
   "site_name": "Creme De La Crumb",
   "title": "Instant Pot Shredded Chicken Tacos",
   "total_time": 35,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "Chicken",
+    "healthy",
+    "instant pot",
+    "slow cooker"
+  ]
 }
diff --git a/tests/test_data/lekkerensimpel.com/lekkerensimpel_1.json b/tests/test_data/lekkerensimpel.com/lekkerensimpel_1.json
index 0517a888..5aeb9344 100644
--- a/tests/test_data/lekkerensimpel.com/lekkerensimpel_1.json
+++ b/tests/test_data/lekkerensimpel.com/lekkerensimpel_1.json
@@ -45,5 +45,9 @@
   "site_name": "Lekker en Simpel",
   "title": "Poké bowl met kip",
   "total_time": 35,
-  "yields": "2 servings"
+  "yields": "2 servings",
+  "keywords": [
+    "bowl",
+    "kip"
+  ]
 }
diff --git a/tests/test_data/lifestyleofafoodie.com/lifestyleofafoodie_1.json b/tests/test_data/lifestyleofafoodie.com/lifestyleofafoodie_1.json
index 28780212..0a693eb4 100644
--- a/tests/test_data/lifestyleofafoodie.com/lifestyleofafoodie_1.json
+++ b/tests/test_data/lifestyleofafoodie.com/lifestyleofafoodie_1.json
@@ -53,5 +53,11 @@
   "site_name": "Lifestyle of a Foodie",
   "title": "Frozen strawberry margaritas",
   "total_time": 5,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "blended srawberry margaritas",
+    "blended strawberry margarita",
+    "frozen strawberry margarita",
+    "frozen strawberry margaritas"
+  ]
 }
diff --git a/tests/test_data/lifestyleofafoodie.com/lifestyleofafoodie_2.json b/tests/test_data/lifestyleofafoodie.com/lifestyleofafoodie_2.json
index 2c642f59..744462ad 100644
--- a/tests/test_data/lifestyleofafoodie.com/lifestyleofafoodie_2.json
+++ b/tests/test_data/lifestyleofafoodie.com/lifestyleofafoodie_2.json
@@ -40,5 +40,12 @@
   "yields": "4 servings",
   "equipment": [
     "Ninja air fryer"
+  ],
+  "keywords": [
+    "air fryer",
+    "air fryer frozen french fries",
+    "air fryer recipe",
+    "crinkle fries",
+    "french fries"
   ]
 }
diff --git a/tests/test_data/livelytable.com/livelytable_2.json b/tests/test_data/livelytable.com/livelytable_2.json
index 572a30b2..37b00610 100644
--- a/tests/test_data/livelytable.com/livelytable_2.json
+++ b/tests/test_data/livelytable.com/livelytable_2.json
@@ -82,5 +82,10 @@
   "title": "Easy Chipotle Shrimp Tacos",
   "total_time": 15,
   "yields": "6 servings",
-  "cooking_method": "stovetop"
+  "cooking_method": "stovetop",
+  "keywords": [
+    "chipotle shrimp tacos",
+    "easy chipotle shrimp tacos",
+    "healthy shrimp tacos recipe"
+  ]
 }
diff --git a/tests/test_data/lovingitvegan.com/lovingitvegan.json b/tests/test_data/lovingitvegan.com/lovingitvegan.json
index 0f67e9dc..4d85bd40 100644
--- a/tests/test_data/lovingitvegan.com/lovingitvegan.json
+++ b/tests/test_data/lovingitvegan.com/lovingitvegan.json
@@ -54,5 +54,10 @@
   "site_name": "Loving It Vegan",
   "title": "Kale Smoothie",
   "total_time": 10,
-  "yields": "2 servings"
+  "yields": "2 servings",
+  "keywords": [
+    "kale smoothie",
+    "smoothies",
+    "vegan kale smoothie"
+  ]
 }
diff --git a/tests/test_data/maangchi.com/maangchi.json b/tests/test_data/maangchi.com/maangchi.json
index b7ea1ec3..3cd73762 100644
--- a/tests/test_data/maangchi.com/maangchi.json
+++ b/tests/test_data/maangchi.com/maangchi.json
@@ -84,5 +84,16 @@
   "title": "Pepper fried chicken (Yuringi: 유린기)",
   "total_time": 34.0,
   "yields": "4 servings",
-  "cooking_method": "Double frying"
+  "cooking_method": "Double frying",
+  "keywords": [
+    "fried chicken with sweet sour sauce",
+    "유린기",
+    "Korean Chinese cuisine",
+    "Korean cooking",
+    "Korean cuisine",
+    "Maangchi yuringi recipe",
+    "Pepper fried chicken",
+    "Sweet sour pepper fried chicken",
+    "yuringi recipe"
+  ]
 }
diff --git a/tests/test_data/madensverden.dk/madensverden.json b/tests/test_data/madensverden.dk/madensverden.json
index ff88804b..cd2b8f70 100644
--- a/tests/test_data/madensverden.dk/madensverden.json
+++ b/tests/test_data/madensverden.dk/madensverden.json
@@ -56,5 +56,8 @@
   "site_name": "Madens Verden",
   "title": "Rabarbertrifli",
   "total_time": 30,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "rabarber"
+  ]
 }
diff --git a/tests/test_data/madsvin.com/madsvin.json b/tests/test_data/madsvin.com/madsvin.json
index 0642f141..64bf482b 100644
--- a/tests/test_data/madsvin.com/madsvin.json
+++ b/tests/test_data/madsvin.com/madsvin.json
@@ -45,5 +45,10 @@
   "site_name": "madsvin.com",
   "title": "Pandekager",
   "total_time": 20,
-  "yields": "10 servings"
+  "yields": "10 servings",
+  "keywords": [
+    "pandekage",
+    "pandekage opskrift",
+    "Pandekager"
+  ]
 }
diff --git a/tests/test_data/marmiton.org/marmiton.json b/tests/test_data/marmiton.org/marmiton.json
index 1310025f..2394d969 100644
--- a/tests/test_data/marmiton.org/marmiton.json
+++ b/tests/test_data/marmiton.org/marmiton.json
@@ -54,5 +54,21 @@
   "site_name": "Marmiton",
   "title": "Ratatouille",
   "total_time": 80,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "Ratatouille",
+    "aubergine",
+    "courgette",
+    "poivron",
+    "oignon",
+    "tomate",
+    "huile d'olive",
+    "thym",
+    "feuille de laurier",
+    "poivre",
+    "sel",
+    "ail",
+    "facile",
+    "moyen"
+  ]
 }
diff --git a/tests/test_data/marthastewart.com/marthastewart.json b/tests/test_data/marthastewart.com/marthastewart.json
index 31afe0e0..01ca11b3 100644
--- a/tests/test_data/marthastewart.com/marthastewart.json
+++ b/tests/test_data/marthastewart.com/marthastewart.json
@@ -38,5 +38,15 @@
   "site_name": "Martha Stewart",
   "title": "Breaded Chicken Breasts",
   "total_time": 25,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "breaded chicken breasts",
+    "Breadcrumbs",
+    "Chicken cutlets",
+    "Dinner",
+    "Dredge",
+    "Fry",
+    "Lunch",
+    "Main course"
+  ]
 }
diff --git a/tests/test_data/matprat.no/matprat_1.json b/tests/test_data/matprat.no/matprat_1.json
index b8a66272..6f831f32 100644
--- a/tests/test_data/matprat.no/matprat_1.json
+++ b/tests/test_data/matprat.no/matprat_1.json
@@ -84,5 +84,17 @@
   "site_name": null,
   "title": "Butter chicken - indisk smørkylling",
   "total_time": 160,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "Butter chicken",
+    "smørkylling",
+    "kylling",
+    "murgh makhani",
+    "curry",
+    "gurkemeie",
+    "indisk",
+    "indisk gryte",
+    "basmatiris",
+    "koriander"
+  ]
 }
diff --git a/tests/test_data/matprat.no/matprat_2.json b/tests/test_data/matprat.no/matprat_2.json
index b8356011..51c21f41 100644
--- a/tests/test_data/matprat.no/matprat_2.json
+++ b/tests/test_data/matprat.no/matprat_2.json
@@ -45,5 +45,14 @@
   "site_name": null,
   "title": "Mangosalat",
   "total_time": 20,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "mangosalat med lime",
+    "mango",
+    "rødløk",
+    "pasjonsfrukt",
+    "olivenolje",
+    "salt",
+    "pepper"
+  ]
 }
diff --git a/tests/test_data/melskitchencafe.com/melskitchencafe.json b/tests/test_data/melskitchencafe.com/melskitchencafe.json
index 0b47cf28..a8d201e2 100644
--- a/tests/test_data/melskitchencafe.com/melskitchencafe.json
+++ b/tests/test_data/melskitchencafe.com/melskitchencafe.json
@@ -55,5 +55,14 @@
   "site_name": "Mel's Kitchen Cafe",
   "title": "Licorice Caramels",
   "total_time": 150,
-  "yields": "50 servings"
+  "yields": "50 servings",
+  "keywords": [
+    "anise extract",
+    "butter",
+    "corn syrup",
+    "food coloring",
+    "granulated sugar",
+    "sweetened condensed milk",
+    "vanilla extract"
+  ]
 }
diff --git a/tests/test_data/mindmegette.hu/mindmegette.json b/tests/test_data/mindmegette.hu/mindmegette.json
index cb74bb5a..68fcc802 100644
--- a/tests/test_data/mindmegette.hu/mindmegette.json
+++ b/tests/test_data/mindmegette.hu/mindmegette.json
@@ -40,5 +40,8 @@
   "site_name": "Mindmegette.hu",
   "title": "Tepsis krumpli céklával és répával",
   "total_time": 45,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "Tepsis krumpli céklával és répával"
+  ]
 }
diff --git a/tests/test_data/minimalistbaker.com/minimalistbaker.json b/tests/test_data/minimalistbaker.com/minimalistbaker.json
index 0a19e266..e823cce3 100644
--- a/tests/test_data/minimalistbaker.com/minimalistbaker.json
+++ b/tests/test_data/minimalistbaker.com/minimalistbaker.json
@@ -53,5 +53,8 @@
   "site_name": "Minimalist Baker",
   "title": "Cashew Ricotta Cheese (Soy-Free, Fast, Easy!)",
   "total_time": 40,
-  "yields": "8 servings"
+  "yields": "8 servings",
+  "keywords": [
+    "vegan ricotta"
+  ]
 }
diff --git a/tests/test_data/ministryofcurry.com/ministryofcurry.json b/tests/test_data/ministryofcurry.com/ministryofcurry.json
index 1f732533..65dce664 100644
--- a/tests/test_data/ministryofcurry.com/ministryofcurry.json
+++ b/tests/test_data/ministryofcurry.com/ministryofcurry.json
@@ -79,5 +79,9 @@
   "yields": "6 servings",
   "equipment": [
     "Slow Cooker"
+  ],
+  "keywords": [
+    "chicken tikka masala",
+    "slow cooker"
   ]
 }
diff --git a/tests/test_data/misya.info/misya.json b/tests/test_data/misya.info/misya.json
index 2d8e35ca..310eb253 100644
--- a/tests/test_data/misya.info/misya.json
+++ b/tests/test_data/misya.info/misya.json
@@ -50,5 +50,9 @@
   "site_name": null,
   "title": "Tortino cuore caldo",
   "total_time": 35,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "tortino cuore caldo",
+    "ricetta tortino cuore caldo"
+  ]
 }
diff --git a/tests/test_data/mob.co.uk/mob_1.json b/tests/test_data/mob.co.uk/mob_1.json
index a50b8b2a..ec1e5c97 100644
--- a/tests/test_data/mob.co.uk/mob_1.json
+++ b/tests/test_data/mob.co.uk/mob_1.json
@@ -54,5 +54,13 @@
   "site_name": "Mob",
   "title": "Chilli Cheese Paratha",
   "total_time": 30,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "chilli cheese paratha",
+    "indian cheese paratha",
+    "indian paratha recipe",
+    "cheese paratha recipe",
+    "chilli cheese paratha recipe",
+    "cheesy paratha recipe"
+  ]
 }
diff --git a/tests/test_data/momswithcrockpots.com/momswithcrockpots.json b/tests/test_data/momswithcrockpots.com/momswithcrockpots.json
index 92e2832a..868ff241 100644
--- a/tests/test_data/momswithcrockpots.com/momswithcrockpots.json
+++ b/tests/test_data/momswithcrockpots.com/momswithcrockpots.json
@@ -59,5 +59,8 @@
   "yields": "6 servings",
   "equipment": [
     "6 Qt Crockpot"
+  ],
+  "keywords": [
+    "holiday"
   ]
 }
diff --git a/tests/test_data/mybakingaddiction.com/mybakingaddiction.json b/tests/test_data/mybakingaddiction.com/mybakingaddiction.json
index 9ad5eaa4..b49f6ccd 100644
--- a/tests/test_data/mybakingaddiction.com/mybakingaddiction.json
+++ b/tests/test_data/mybakingaddiction.com/mybakingaddiction.json
@@ -72,5 +72,12 @@
   "site_name": "My Baking Addiction",
   "title": "Chocolate Zucchini Bread",
   "total_time": 75,
-  "yields": "2 servings"
+  "yields": "2 servings",
+  "keywords": [
+    "Bread",
+    "Chocolate",
+    "Coconut",
+    "Summer Recipes",
+    "Zucchini"
+  ]
 }
diff --git a/tests/test_data/mykitchen101en.com/mykitchen101en.json b/tests/test_data/mykitchen101en.com/mykitchen101en.json
index a3b119a8..921ae517 100644
--- a/tests/test_data/mykitchen101en.com/mykitchen101en.json
+++ b/tests/test_data/mykitchen101en.com/mykitchen101en.json
@@ -67,5 +67,10 @@
   "yields": "30 servings",
   "equipment": [
     "2 mini muffin pans"
+  ],
+  "keywords": [
+    "mini cupcakes",
+    "mini egg cakes",
+    "mini egg sponge cakes"
   ]
 }
diff --git a/tests/test_data/myrecipes.com/myrecipes.json b/tests/test_data/myrecipes.com/myrecipes.json
index 5ab2b9e0..1019559e 100644
--- a/tests/test_data/myrecipes.com/myrecipes.json
+++ b/tests/test_data/myrecipes.com/myrecipes.json
@@ -1,7 +1,6 @@
 {
   "author": "Adam Dolge",
   "canonical_url": "https://www.myrecipes.com/recipe/cacio-e-pepe",
-  "category": "",
   "host": "myrecipes.com",
   "image": "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3A%2F%2Fstatic.onecms.io%2Fwp-content%2Fuploads%2Fsites%2F19%2F2018%2F01%2F25%2Fmyrecipestrending_1-09-18_1772_1-2000.jpg",
   "ingredient_groups": [
diff --git a/tests/test_data/norecipes.com/norecipes_1.json b/tests/test_data/norecipes.com/norecipes_1.json
index c7f15b0f..3666c010 100644
--- a/tests/test_data/norecipes.com/norecipes_1.json
+++ b/tests/test_data/norecipes.com/norecipes_1.json
@@ -54,5 +54,11 @@
   "site_name": "Norecipes - Elevating Everyday Meals",
   "title": "Best Burnt Basque Cheesecake",
   "total_time": 27,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "cake",
+    "cheesecake",
+    "party food",
+    "sweets"
+  ]
 }
diff --git a/tests/test_data/norecipes.com/norecipes_2.json b/tests/test_data/norecipes.com/norecipes_2.json
index 29ed2048..6f21b1eb 100644
--- a/tests/test_data/norecipes.com/norecipes_2.json
+++ b/tests/test_data/norecipes.com/norecipes_2.json
@@ -79,5 +79,10 @@
   "site_name": "Norecipes - Elevating Everyday Meals",
   "title": "Best Orange Chicken",
   "total_time": 30,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "easy",
+    "orange",
+    "quick"
+  ]
 }
diff --git a/tests/test_data/nosalty.hu/nosalty.json b/tests/test_data/nosalty.hu/nosalty.json
index 8417ecc0..37563d69 100644
--- a/tests/test_data/nosalty.hu/nosalty.json
+++ b/tests/test_data/nosalty.hu/nosalty.json
@@ -76,5 +76,24 @@
   "site_name": "NoSalty",
   "title": "Aranygaluska ahogy a nagymamám készíti",
   "total_time": 90,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "vasárnapi ebéd",
+    "szüret",
+    "ebéd",
+    "uzsonna",
+    "vacsora",
+    "ovo-lakto vegetáriánus",
+    "vegetáriánus",
+    "Finomliszt",
+    "Friss élesztő",
+    "Vaj",
+    "Tej",
+    "Cukor",
+    "Tojássárgája",
+    "Dió",
+    "Vanília",
+    "közepes",
+    "ráérős"
+  ]
 }
diff --git a/tests/test_data/nrk.no/nrkmat_1.json b/tests/test_data/nrk.no/nrkmat_1.json
index 45fbd9b2..8ffb5b96 100644
--- a/tests/test_data/nrk.no/nrkmat_1.json
+++ b/tests/test_data/nrk.no/nrkmat_1.json
@@ -57,5 +57,9 @@
   "language": "nb-NO",
   "site_name": "NRK",
   "title": "Honningmarinert grillet kylling med rosmarinpoteter",
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "Grill",
+    "Kylling/Fugl"
+  ]
 }
diff --git a/tests/test_data/nrk.no/nrkmat_2.json b/tests/test_data/nrk.no/nrkmat_2.json
index 225a95ae..74712b5b 100644
--- a/tests/test_data/nrk.no/nrkmat_2.json
+++ b/tests/test_data/nrk.no/nrkmat_2.json
@@ -48,5 +48,9 @@
   "language": "nb-NO",
   "site_name": "NRK",
   "title": "Kikertsuppe med eple og karri",
-  "yields": "2 servings"
+  "yields": "2 servings",
+  "keywords": [
+    "Suppe",
+    "Grønnsaker"
+  ]
 }
diff --git a/tests/test_data/number-2-pencil.com/number2pencil_2.json b/tests/test_data/number-2-pencil.com/number2pencil_2.json
index 64bd8e48..6bd66e9b 100644
--- a/tests/test_data/number-2-pencil.com/number2pencil_2.json
+++ b/tests/test_data/number-2-pencil.com/number2pencil_2.json
@@ -86,5 +86,8 @@
   "site_name": "No. 2 Pencil",
   "title": "Sheet Pan Strawberry Shortcake Recipe",
   "total_time": 45,
-  "yields": "12 servings"
+  "yields": "12 servings",
+  "keywords": [
+    "Strawberry Shortcake"
+  ]
 }
diff --git a/tests/test_data/ohsheglows.com/ohsheglows.json b/tests/test_data/ohsheglows.com/ohsheglows.json
index 910b70d5..774fb64d 100644
--- a/tests/test_data/ohsheglows.com/ohsheglows.json
+++ b/tests/test_data/ohsheglows.com/ohsheglows.json
@@ -52,5 +52,14 @@
   "site_name": "Oh She Glows",
   "title": "Obsession-Worthy Peanut Butter Cookie Ice Cream",
   "total_time": 22,
-  "yields": "8 cups"
+  "yields": "8 cups",
+  "keywords": [
+    "Vegan",
+    "Gluten-Free",
+    "Oil-Free",
+    "Freezer Friendly",
+    "Kid Friendly",
+    "Make-Ahead",
+    "Party Favourite"
+  ]
 }
diff --git a/tests/test_data/omnivorescookbook.com/omnivorescookbook_1.json b/tests/test_data/omnivorescookbook.com/omnivorescookbook_1.json
index f26d87d7..fc0f22d8 100644
--- a/tests/test_data/omnivorescookbook.com/omnivorescookbook_1.json
+++ b/tests/test_data/omnivorescookbook.com/omnivorescookbook_1.json
@@ -51,5 +51,8 @@
   "site_name": "Omnivore's Cookbook",
   "title": "Stir Fried Bok Choy with Tofu Puffs",
   "total_time": 15,
-  "yields": "2 servings"
+  "yields": "2 servings",
+  "keywords": [
+    "home style"
+  ]
 }
diff --git a/tests/test_data/omnivorescookbook.com/omnivorescookbook_2.json b/tests/test_data/omnivorescookbook.com/omnivorescookbook_2.json
index 089b90b9..039b27ba 100644
--- a/tests/test_data/omnivorescookbook.com/omnivorescookbook_2.json
+++ b/tests/test_data/omnivorescookbook.com/omnivorescookbook_2.json
@@ -83,5 +83,8 @@
   "site_name": "Omnivore's Cookbook",
   "title": "Beef Pan-Fried Noodles",
   "total_time": 35,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "restaurant-style"
+  ]
 }
diff --git a/tests/test_data/onceuponachef.com/onceuponachef_1.json b/tests/test_data/onceuponachef.com/onceuponachef_1.json
index c695b879..16f08369 100644
--- a/tests/test_data/onceuponachef.com/onceuponachef_1.json
+++ b/tests/test_data/onceuponachef.com/onceuponachef_1.json
@@ -64,5 +64,16 @@
   "site_name": "Once Upon a Chef",
   "title": "Pumpkin Bread",
   "total_time": 90,
-  "yields": "2 loaves"
+  "yields": "2 loaves",
+  "keywords": [
+    "After School Snack",
+    "Comfort Food",
+    "Fall",
+    "For the Host/Hostess",
+    "Halloween",
+    "Potluck",
+    "Pumpkin",
+    "Thanksgiving",
+    "Winter"
+  ]
 }
diff --git a/tests/test_data/onceuponachef.com/onceuponachef_2.json b/tests/test_data/onceuponachef.com/onceuponachef_2.json
index 4e4781d5..0b62247e 100644
--- a/tests/test_data/onceuponachef.com/onceuponachef_2.json
+++ b/tests/test_data/onceuponachef.com/onceuponachef_2.json
@@ -79,5 +79,23 @@
   "site_name": "Once Upon a Chef",
   "title": "Black Bean & Corn Salad with Chipotle-Honey Vinaigrette",
   "total_time": 30,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "Avocados",
+    "Bbq",
+    "Beans",
+    "Chipotle Chiles",
+    "Cookbook Recipe",
+    "Corn",
+    "Father's Day",
+    "Homemade Salad Dressings",
+    "July 4th",
+    "Labor Day",
+    "Limes",
+    "Memorial Day",
+    "Peppers",
+    "Picnic",
+    "Potluck",
+    "Summer"
+  ]
 }
diff --git a/tests/test_data/paleorunningmomma.com/paleorunningmomma.json b/tests/test_data/paleorunningmomma.com/paleorunningmomma.json
index 4877bf55..818c4a5e 100644
--- a/tests/test_data/paleorunningmomma.com/paleorunningmomma.json
+++ b/tests/test_data/paleorunningmomma.com/paleorunningmomma.json
@@ -70,5 +70,14 @@
   "site_name": "The Paleo Running Momma",
   "title": "Paleo Beef Stroganoff {Whole30, Keto}",
   "total_time": 40,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "beef",
+    "dinner",
+    "keto",
+    "low carb",
+    "paleo",
+    "stroganoff",
+    "whole30"
+  ]
 }
diff --git a/tests/test_data/persnicketyplates.com/persnicketyplates.json b/tests/test_data/persnicketyplates.com/persnicketyplates.json
index 99c29d55..9d136608 100644
--- a/tests/test_data/persnicketyplates.com/persnicketyplates.json
+++ b/tests/test_data/persnicketyplates.com/persnicketyplates.json
@@ -59,5 +59,10 @@
   "site_name": "Persnickety Plates",
   "title": "Easy Slow Cooker Hawaiian Meatballs",
   "total_time": 125,
-  "yields": "8 servings"
+  "yields": "8 servings",
+  "keywords": [
+    "Crock pot hawaiian meatballs",
+    "Crockpot hawaiian meatballs",
+    "Slow cooker hawaiian meatballs"
+  ]
 }
diff --git a/tests/test_data/pickuplimes.com/pickuplimes.json b/tests/test_data/pickuplimes.com/pickuplimes.json
index ab82aab1..525759bd 100644
--- a/tests/test_data/pickuplimes.com/pickuplimes.json
+++ b/tests/test_data/pickuplimes.com/pickuplimes.json
@@ -86,5 +86,13 @@
   "site_name": "Pick Up Limes",
   "title": "Vegan \"Honey\" Mustard Tofu Wraps",
   "total_time": 30,
-  "yields": "5 servings"
+  "yields": "5 servings",
+  "keywords": [
+    "peanut free",
+    "tree nut free",
+    "sesame free",
+    "vegan",
+    "vegetarian",
+    "plant-based"
+  ]
 }
diff --git a/tests/test_data/pinchofyum.com/pinchofyum.json b/tests/test_data/pinchofyum.com/pinchofyum.json
index 87aa5664..823db6b8 100644
--- a/tests/test_data/pinchofyum.com/pinchofyum.json
+++ b/tests/test_data/pinchofyum.com/pinchofyum.json
@@ -57,5 +57,12 @@
   "title": "Basic + Awesome Broccoli Cheese Soup",
   "total_time": 45,
   "yields": "4 servings",
-  "cooking_method": "Stovetop"
+  "cooking_method": "Stovetop",
+  "keywords": [
+    "broccoli cheese soup",
+    "broccoli cheddar soup",
+    "soup season",
+    "broccoli cheddar",
+    "Panera broccoli cheese soup"
+  ]
 }
diff --git a/tests/test_data/pingodoce.pt/pingodoce.json b/tests/test_data/pingodoce.pt/pingodoce.json
index b1dab8ad..289dede1 100644
--- a/tests/test_data/pingodoce.pt/pingodoce.json
+++ b/tests/test_data/pingodoce.pt/pingodoce.json
@@ -63,5 +63,12 @@
   "site_name": "Pingo Doce",
   "title": "Arroz de tamboril",
   "total_time": 60,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "arroz",
+    "camarão",
+    "marisco",
+    "peixe",
+    "pimento"
+  ]
 }
diff --git a/tests/test_data/pinkowlkitchen.com/pinkowlkitchen_1.json b/tests/test_data/pinkowlkitchen.com/pinkowlkitchen_1.json
index 5fa4beef..6594940f 100644
--- a/tests/test_data/pinkowlkitchen.com/pinkowlkitchen_1.json
+++ b/tests/test_data/pinkowlkitchen.com/pinkowlkitchen_1.json
@@ -55,5 +55,10 @@
   "site_name": "Pink Owl Kitchen",
   "title": "Chocolate Chess Pie",
   "total_time": 60,
-  "yields": "10 servings"
+  "yields": "10 servings",
+  "keywords": [
+    "chess pie",
+    "chocolate chess pie",
+    "chocolate pie"
+  ]
 }
diff --git a/tests/test_data/pinkowlkitchen.com/pinkowlkitchen_2.json b/tests/test_data/pinkowlkitchen.com/pinkowlkitchen_2.json
index e8e4a882..e55d6701 100644
--- a/tests/test_data/pinkowlkitchen.com/pinkowlkitchen_2.json
+++ b/tests/test_data/pinkowlkitchen.com/pinkowlkitchen_2.json
@@ -57,5 +57,12 @@
   "site_name": "Pink Owl Kitchen",
   "title": "Chocolate Cream Cold Brew (Starbucks Copycat)",
   "total_time": 5,
-  "yields": "1 serving"
+  "yields": "1 serving",
+  "keywords": [
+    "chocolate cream cold brew",
+    "cold brew",
+    "iced coffee",
+    "starbucks drink",
+    "starbucks dupe"
+  ]
 }
diff --git a/tests/test_data/platingpixels.com/platingpixels_1.json b/tests/test_data/platingpixels.com/platingpixels_1.json
index a19bcc24..ffa13d93 100644
--- a/tests/test_data/platingpixels.com/platingpixels_1.json
+++ b/tests/test_data/platingpixels.com/platingpixels_1.json
@@ -62,5 +62,11 @@
   "site_name": "Plating Pixels",
   "title": "Instant Pot Korean Short Ribs (Kalbi)",
   "total_time": 45,
-  "yields": "12 servings"
+  "yields": "12 servings",
+  "keywords": [
+    "beef short ribs",
+    "Instant pot ribs",
+    "kalbi recipe",
+    "Korean short ribs"
+  ]
 }
diff --git a/tests/test_data/platingpixels.com/platingpixels_2.json b/tests/test_data/platingpixels.com/platingpixels_2.json
index d4339cb3..82e7ff67 100644
--- a/tests/test_data/platingpixels.com/platingpixels_2.json
+++ b/tests/test_data/platingpixels.com/platingpixels_2.json
@@ -84,5 +84,10 @@
   "site_name": "Plating Pixels",
   "title": "Chicken Fried Chicken",
   "total_time": 30,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "breaded fried chicken",
+    "Chicken Fried Chicken",
+    "fried chicken recipe"
+  ]
 }
diff --git a/tests/test_data/plowingthroughlife.com/plowingthroughlife_1.json b/tests/test_data/plowingthroughlife.com/plowingthroughlife_1.json
index f5b409c8..f9a4f647 100644
--- a/tests/test_data/plowingthroughlife.com/plowingthroughlife_1.json
+++ b/tests/test_data/plowingthroughlife.com/plowingthroughlife_1.json
@@ -58,5 +58,8 @@
   "site_name": "Plowing Through Life",
   "title": "Crock Pot Mac and Cheese",
   "total_time": 160,
-  "yields": "12 servings"
+  "yields": "12 servings",
+  "keywords": [
+    "Crock Pot Mac and Cheese"
+  ]
 }
diff --git a/tests/test_data/plowingthroughlife.com/plowingthroughlife_2.json b/tests/test_data/plowingthroughlife.com/plowingthroughlife_2.json
index 42dedba2..8e52bd3b 100644
--- a/tests/test_data/plowingthroughlife.com/plowingthroughlife_2.json
+++ b/tests/test_data/plowingthroughlife.com/plowingthroughlife_2.json
@@ -69,5 +69,8 @@
   "site_name": "Plowing Through Life",
   "title": "Canned Cinnamon Rolls with Cream",
   "total_time": 35,
-  "yields": "10 servings"
+  "yields": "10 servings",
+  "keywords": [
+    "Canned Cinnamon Rolls with Cream"
+  ]
 }
diff --git a/tests/test_data/popsugar.com/popsugar.json b/tests/test_data/popsugar.com/popsugar.json
index 7b7c826a..a1170def 100644
--- a/tests/test_data/popsugar.com/popsugar.json
+++ b/tests/test_data/popsugar.com/popsugar.json
@@ -64,5 +64,14 @@
   "site_name": "POPSUGAR",
   "title": "Rainbow Pasta",
   "total_time": 50,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "OxiClean",
+    "Kid-Friendly Recipes",
+    "Get the Dish",
+    "Original Recipes",
+    "Dinner",
+    "Rainbow",
+    "Pasta"
+  ]
 }
diff --git a/tests/test_data/pressureluckcooking.com/pressureluckcooking.json b/tests/test_data/pressureluckcooking.com/pressureluckcooking.json
index 777c60b1..d2a4e685 100644
--- a/tests/test_data/pressureluckcooking.com/pressureluckcooking.json
+++ b/tests/test_data/pressureluckcooking.com/pressureluckcooking.json
@@ -66,5 +66,10 @@
   "site_name": "Pressure Luck Cooking",
   "title": "Instant Pot Jeffrey's Favorite Chicken",
   "total_time": 30,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "Jeffrey's Favorite Chicken",
+    "Instant Pot",
+    "Pressure Luck"
+  ]
 }
diff --git a/tests/test_data/primaledgehealth.com/primaledgehealth.json b/tests/test_data/primaledgehealth.com/primaledgehealth.json
index 51d01939..6a90a9b2 100644
--- a/tests/test_data/primaledgehealth.com/primaledgehealth.json
+++ b/tests/test_data/primaledgehealth.com/primaledgehealth.json
@@ -47,5 +47,15 @@
   "site_name": "Primal Edge Health",
   "title": "No Bake Custard (Keto & Carnivore-Friendly)",
   "total_time": 70,
-  "yields": "2 servings"
+  "yields": "2 servings",
+  "keywords": [
+    "10 minutes",
+    "5 ingredients",
+    "carnivore dessert",
+    "carnivore diet dessert",
+    "carnivore-friendly dessert",
+    "keto carnivore",
+    "keto custard",
+    "no bake custard"
+  ]
 }
diff --git a/tests/test_data/przepisy.pl/przepisy.json b/tests/test_data/przepisy.pl/przepisy.json
index 3044b9cd..9fbb2311 100644
--- a/tests/test_data/przepisy.pl/przepisy.json
+++ b/tests/test_data/przepisy.pl/przepisy.json
@@ -39,5 +39,13 @@
   "site_name": null,
   "title": "Placki ziemniaczane",
   "total_time": 40,
-  "yields": "8 servings"
+  "yields": "8 servings",
+  "keywords": [
+    "Na co dzień",
+    "Ziemniaki",
+    "Warzywa",
+    "Jajka",
+    "Łagodne",
+    "Bez mięsa"
+  ]
 }
diff --git a/tests/test_data/rainbowplantlife.com/rainbowplantlife.json b/tests/test_data/rainbowplantlife.com/rainbowplantlife.json
index 6e985955..c580d0b8 100644
--- a/tests/test_data/rainbowplantlife.com/rainbowplantlife.json
+++ b/tests/test_data/rainbowplantlife.com/rainbowplantlife.json
@@ -74,5 +74,11 @@
   "site_name": "Rainbow Plant Life",
   "title": "Vegan Brown Butter Peach Cobbler",
   "total_time": 60,
-  "yields": "10 servings"
+  "yields": "10 servings",
+  "keywords": [
+    "cobbler",
+    "nut-free",
+    "peach",
+    "soy-free"
+  ]
 }
diff --git a/tests/test_data/rainbowplantlife.com/rainbowplantlife_groups.json b/tests/test_data/rainbowplantlife.com/rainbowplantlife_groups.json
index 972643a8..8d1488ab 100644
--- a/tests/test_data/rainbowplantlife.com/rainbowplantlife_groups.json
+++ b/tests/test_data/rainbowplantlife.com/rainbowplantlife_groups.json
@@ -87,5 +87,10 @@
   "site_name": "Rainbow Plant Life",
   "title": "Vegan Pasta Salad",
   "total_time": 40,
-  "yields": "10 servings"
+  "yields": "10 servings",
+  "keywords": [
+    "pasta salad",
+    "roasted red pepper pasta",
+    "vegan pasta salad"
+  ]
 }
diff --git a/tests/test_data/realfood.tesco.com/realfoodtesco_1.json b/tests/test_data/realfood.tesco.com/realfoodtesco_1.json
index 7f2333d6..3c3a8360 100644
--- a/tests/test_data/realfood.tesco.com/realfoodtesco_1.json
+++ b/tests/test_data/realfood.tesco.com/realfoodtesco_1.json
@@ -59,5 +59,17 @@
   "site_name": "Tesco Real Food",
   "title": "Roasted cauliflower tagine",
   "total_time": 30,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "roasted cauliflower",
+    "cauliflower",
+    "tagine",
+    "Africa",
+    "African",
+    "Moroccan",
+    "veggie",
+    "vegetarian",
+    "healthy",
+    "freezable"
+  ]
 }
diff --git a/tests/test_data/receitas.ig.com.br/ig.json b/tests/test_data/receitas.ig.com.br/ig.json
index 0da99882..3e504ff0 100644
--- a/tests/test_data/receitas.ig.com.br/ig.json
+++ b/tests/test_data/receitas.ig.com.br/ig.json
@@ -1,7 +1,6 @@
 {
   "author": "Fabiana Badra",
   "canonical_url": "https://receitas.ig.com.br/estrogonofe-de-cogumelos/4e7b634e7bb4e2ad5c000054.html",
-  "category": "",
   "host": "receitas.ig.com.br",
   "image": "https://i0.statig.com.br/bancodeimagens/4y/4c/rs/4y4crseb7npraepfzuhc8iimy.jpg",
   "ingredient_groups": [
diff --git a/tests/test_data/receitasnestle.com.br/receitasnestlebr_1.json b/tests/test_data/receitasnestle.com.br/receitasnestlebr_1.json
index a9684ae4..98d4c426 100644
--- a/tests/test_data/receitasnestle.com.br/receitasnestlebr_1.json
+++ b/tests/test_data/receitasnestle.com.br/receitasnestlebr_1.json
@@ -45,5 +45,36 @@
   "site_name": "Receitas Nestlé",
   "title": "Receita de Costelinha de Porco com Batatas Salteadas no Alecrim",
   "total_time": 40,
-  "yields": "5 servings"
+  "yields": "5 servings",
+  "keywords": [
+    "Jantar",
+    "Almoço",
+    "Meal set",
+    "Local",
+    "Finais de semana",
+    "Family",
+    "Dia a Dia",
+    "Recebendo Amigos",
+    "receitas sem crustaceos",
+    "receita sem gluten",
+    "receita sem peixe",
+    "receita sem crustaceos",
+    "receita sem ovo",
+    "sem gluten",
+    "costela suína",
+    "receita do consumidor salgada",
+    "Family Dinners",
+    "receita do consumidor",
+    "sem leite",
+    "zero lactose",
+    "receita rápida",
+    "receita fácil",
+    "delicioso",
+    "fácil",
+    "familia",
+    "De outros",
+    "Batatas",
+    "Carne de porco",
+    "Da panela"
+  ]
 }
diff --git a/tests/test_data/recept.se/recept.json b/tests/test_data/recept.se/recept.json
index f9919436..1101e294 100644
--- a/tests/test_data/recept.se/recept.json
+++ b/tests/test_data/recept.se/recept.json
@@ -40,5 +40,15 @@
   "site_name": "RECEPT",
   "title": "Chokladbollar – grundrecept",
   "total_time": 30,
-  "yields": "25 servings"
+  "yields": "25 servings",
+  "keywords": [
+    "laktosfri",
+    "vegetarian",
+    "vegetariansk",
+    "bak & dessert",
+    "bakverk",
+    "dop",
+    "födelsedag",
+    "utan fläsk"
+  ]
 }
diff --git a/tests/test_data/reciperunner.com/reciperunner.json b/tests/test_data/reciperunner.com/reciperunner.json
index b3d23aa9..ce45902c 100644
--- a/tests/test_data/reciperunner.com/reciperunner.json
+++ b/tests/test_data/reciperunner.com/reciperunner.json
@@ -70,5 +70,13 @@
   "site_name": "Recipe Runner",
   "title": "Vanilla and Chocolate Pizzelles",
   "total_time": 30,
-  "yields": "70 servings"
+  "yields": "70 servings",
+  "keywords": [
+    "cookies",
+    "pizzelles",
+    "christmas",
+    "chocolate",
+    "vanilla",
+    "Italian"
+  ]
 }
diff --git a/tests/test_data/recipes.timesofindia.com/timesofindia.json b/tests/test_data/recipes.timesofindia.com/timesofindia.json
index 47445f5b..eb397a1c 100644
--- a/tests/test_data/recipes.timesofindia.com/timesofindia.json
+++ b/tests/test_data/recipes.timesofindia.com/timesofindia.json
@@ -52,5 +52,18 @@
   "site_name": null,
   "title": "Stuffed Tortellini Recipe",
   "total_time": 35,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "Stuffed Tortellini recipe",
+    "Italian",
+    "cook Stuffed Tortellini",
+    "Anniversary",
+    "Date",
+    "Birthday",
+    "Kitty Party",
+    "Game Night",
+    "Buffet",
+    "Pot Luck",
+    "Party"
+  ]
 }
diff --git a/tests/test_data/recipetineats.com/recipetineats.json b/tests/test_data/recipetineats.com/recipetineats.json
index 7a6321ea..d477fcb3 100644
--- a/tests/test_data/recipetineats.com/recipetineats.json
+++ b/tests/test_data/recipetineats.com/recipetineats.json
@@ -50,5 +50,9 @@
   "site_name": "RecipeTin Eats",
   "title": "Vietnamese Caramel Pork",
   "total_time": 100,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "Vietnamese caramel pork",
+    "Vietnamese pork recipe"
+  ]
 }
diff --git a/tests/test_data/redhousespice.com/redhousespice_1.json b/tests/test_data/redhousespice.com/redhousespice_1.json
index eada03d5..fdb7531b 100644
--- a/tests/test_data/redhousespice.com/redhousespice_1.json
+++ b/tests/test_data/redhousespice.com/redhousespice_1.json
@@ -69,5 +69,8 @@
   "site_name": "Red House Spice",
   "title": "Easy Char Siu (Chinese BBQ pork, 叉烧)",
   "total_time": 40,
-  "yields": "3 servings"
+  "yields": "3 servings",
+  "keywords": [
+    "Pork"
+  ]
 }
diff --git a/tests/test_data/redhousespice.com/redhousespice_2.json b/tests/test_data/redhousespice.com/redhousespice_2.json
index dd93d624..ed7991db 100644
--- a/tests/test_data/redhousespice.com/redhousespice_2.json
+++ b/tests/test_data/redhousespice.com/redhousespice_2.json
@@ -55,5 +55,9 @@
   "site_name": "Red House Spice",
   "title": "Smashed Cucumber Salad (拍黄瓜)",
   "total_time": 15,
-  "yields": "2 servings"
+  "yields": "2 servings",
+  "keywords": [
+    "cucumber salad",
+    "smashed cucumber salad"
+  ]
 }
diff --git a/tests/test_data/ricette.giallozafferano.it/giallozafferano.json b/tests/test_data/ricette.giallozafferano.it/giallozafferano.json
index 78927c9e..6a56fd3f 100644
--- a/tests/test_data/ricette.giallozafferano.it/giallozafferano.json
+++ b/tests/test_data/ricette.giallozafferano.it/giallozafferano.json
@@ -64,5 +64,22 @@
   "site_name": "Ricette di cucina - Le Ricette di GialloZafferano.it",
   "title": "Bavarese alle fragole",
   "total_time": 45,
-  "yields": "10 servings"
+  "yields": "10 servings",
+  "keywords": [
+    "ricette",
+    "ricetta",
+    "cucina",
+    "cucinare",
+    "Bavarese alle fragole",
+    "Latte intero",
+    "Tuorli",
+    "Zucchero",
+    "Baccello di vaniglia",
+    "Limoni",
+    "Sale fino",
+    "Fragole",
+    "Gelatina in fogli",
+    "Panna fresca liquida",
+    "Zucchero a velo"
+  ]
 }
diff --git a/tests/test_data/ricetteperbimby.it/ricetteperbimby_1.json b/tests/test_data/ricetteperbimby.it/ricetteperbimby_1.json
index 0a778c7c..ed71cea5 100644
--- a/tests/test_data/ricetteperbimby.it/ricetteperbimby_1.json
+++ b/tests/test_data/ricetteperbimby.it/ricetteperbimby_1.json
@@ -34,5 +34,10 @@
   "yields": "750 servings",
   "cuisine": "Italiana",
   "title": "Crema pasticcera Bimby",
-  "total_time": 15
+  "total_time": 15,
+  "keywords": [
+    "ricette",
+    "bimby",
+    "Crema pasticcera veloce"
+  ]
 }
diff --git a/tests/test_data/ricetteperbimby.it/ricetteperbimby_2.json b/tests/test_data/ricetteperbimby.it/ricetteperbimby_2.json
index 9f87db9c..581d05b1 100644
--- a/tests/test_data/ricetteperbimby.it/ricetteperbimby_2.json
+++ b/tests/test_data/ricetteperbimby.it/ricetteperbimby_2.json
@@ -81,5 +81,11 @@
   "site_name": "Ricetteperbimby.it",
   "title": "Cottage pie",
   "total_time": 90,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "Forno",
+    "Dal mondo",
+    "Senza lievito",
+    "Senza uova"
+  ]
 }
diff --git a/tests/test_data/saboresajinomoto.com.br/saboresanjinomoto_1.json b/tests/test_data/saboresajinomoto.com.br/saboresanjinomoto_1.json
index d36b15db..580ad2b3 100644
--- a/tests/test_data/saboresajinomoto.com.br/saboresanjinomoto_1.json
+++ b/tests/test_data/saboresajinomoto.com.br/saboresanjinomoto_1.json
@@ -36,5 +36,8 @@
   "site_name": null,
   "title": "Purê de batata com frango",
   "total_time": 25,
-  "yields": "5 servings"
+  "yields": "5 servings",
+  "keywords": [
+    "AJI-NO-MOTO; Purê; Batata; Frango"
+  ]
 }
diff --git a/tests/test_data/saboresajinomoto.com.br/saboresanjinomoto_2.json b/tests/test_data/saboresajinomoto.com.br/saboresanjinomoto_2.json
index 295e38be..d7240165 100644
--- a/tests/test_data/saboresajinomoto.com.br/saboresanjinomoto_2.json
+++ b/tests/test_data/saboresajinomoto.com.br/saboresanjinomoto_2.json
@@ -48,5 +48,8 @@
   "site_name": null,
   "title": "Crepioca com brócolis e frango",
   "total_time": 60,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "CREPIOCA; CALDO SAZÓN; BRÓCOLIS; FRANGO"
+  ]
 }
diff --git a/tests/test_data/sallysbakingaddiction.com/sallysbakingaddiction.json b/tests/test_data/sallysbakingaddiction.com/sallysbakingaddiction.json
index c582d19f..010f06bc 100644
--- a/tests/test_data/sallysbakingaddiction.com/sallysbakingaddiction.json
+++ b/tests/test_data/sallysbakingaddiction.com/sallysbakingaddiction.json
@@ -75,5 +75,9 @@
   "title": "Rosemary Garlic Pull Apart Bread",
   "total_time": 240,
   "yields": "1 serving",
-  "cooking_method": "Baking"
+  "cooking_method": "Baking",
+  "keywords": [
+    "pull apart bread",
+    "garlic bread"
+  ]
 }
diff --git a/tests/test_data/saltpepperskillet.com/saltpepperskillet.json b/tests/test_data/saltpepperskillet.com/saltpepperskillet.json
index 0816fb3e..e2295419 100644
--- a/tests/test_data/saltpepperskillet.com/saltpepperskillet.json
+++ b/tests/test_data/saltpepperskillet.com/saltpepperskillet.json
@@ -57,5 +57,8 @@
   "site_name": "Salt Pepper Skillet",
   "title": "Smoked Whole Chicken Recipe",
   "total_time": 435,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "smoked chicken"
+  ]
 }
diff --git a/tests/test_data/seriouseats.com/seriouseats.json b/tests/test_data/seriouseats.com/seriouseats.json
index b54e7cd9..59927b7d 100644
--- a/tests/test_data/seriouseats.com/seriouseats.json
+++ b/tests/test_data/seriouseats.com/seriouseats.json
@@ -50,5 +50,12 @@
   "site_name": "Serious Eats",
   "title": "Buttery, Flaky Pie Crust Recipe",
   "total_time": 200,
-  "yields": "20 servings"
+  "yields": "20 servings",
+  "keywords": [
+    "Bake",
+    "crust",
+    "holiday",
+    "pastry",
+    "pie"
+  ]
 }
diff --git a/tests/test_data/simply-cookit.com/simplycookit.json b/tests/test_data/simply-cookit.com/simplycookit.json
index e8beb65e..16f58a3c 100644
--- a/tests/test_data/simply-cookit.com/simplycookit.json
+++ b/tests/test_data/simply-cookit.com/simplycookit.json
@@ -59,5 +59,8 @@
   "site_name": null,
   "title": "Gnocchi mit Zuckerschoten und getrockneten Tomaten in Parmesansauce",
   "total_time": 21,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "Vegetarisch"
+  ]
 }
diff --git a/tests/test_data/simplyquinoa.com/simplyquinoa.json b/tests/test_data/simplyquinoa.com/simplyquinoa.json
index 6d973d27..dc6cac79 100644
--- a/tests/test_data/simplyquinoa.com/simplyquinoa.json
+++ b/tests/test_data/simplyquinoa.com/simplyquinoa.json
@@ -60,5 +60,10 @@
   "site_name": "Simply Quinoa",
   "title": "The Best Gluten-Free Pancakes",
   "total_time": 20,
-  "yields": "14 servings"
+  "yields": "14 servings",
+  "keywords": [
+    "fluffy pancakes",
+    "healthy pancakes",
+    "vegan pancakes"
+  ]
 }
diff --git a/tests/test_data/simplyrecipes.com/simplyrecipes_1.json b/tests/test_data/simplyrecipes.com/simplyrecipes_1.json
index a9194bab..db3a7996 100644
--- a/tests/test_data/simplyrecipes.com/simplyrecipes_1.json
+++ b/tests/test_data/simplyrecipes.com/simplyrecipes_1.json
@@ -62,5 +62,18 @@
   "total_time": 45,
   "cook_time": 30,
   "prep_time": 15,
-  "yields": "8 servings"
+  "yields": "8 servings",
+  "keywords": [
+    "1-Pot",
+    "Comfort Food",
+    "Freezer-friendly",
+    "Make-ahead",
+    "Quick and Easy",
+    "American",
+    "Gluten-Free",
+    "Dinner",
+    "Soup",
+    "Favorite Fall",
+    "Favorite Winter"
+  ]
 }
diff --git a/tests/test_data/simplyrecipes.com/simplyrecipes_2.json b/tests/test_data/simplyrecipes.com/simplyrecipes_2.json
index deecfc3d..50145267 100644
--- a/tests/test_data/simplyrecipes.com/simplyrecipes_2.json
+++ b/tests/test_data/simplyrecipes.com/simplyrecipes_2.json
@@ -75,5 +75,22 @@
   "total_time": 45,
   "cook_time": 30,
   "prep_time": 15,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "olive oil",
+    "parsnips",
+    "vegan mayo",
+    "lemon juice",
+    "kelp",
+    "capers",
+    "chives",
+    "celery",
+    "hot dog buns",
+    "vegan butter",
+    "paprika",
+    "parsnip lobster rolls",
+    "sandwiches",
+    "vegan",
+    "cookbook"
+  ]
 }
diff --git a/tests/test_data/simplywhisked.com/simplywhisked.json b/tests/test_data/simplywhisked.com/simplywhisked.json
index 5dafd7e2..ed86d3c4 100644
--- a/tests/test_data/simplywhisked.com/simplywhisked.json
+++ b/tests/test_data/simplywhisked.com/simplywhisked.json
@@ -70,5 +70,14 @@
   "title": "Buffalo Chicken Chili",
   "total_time": 45,
   "yields": "8 servings",
-  "cooking_method": "Stovetop"
+  "cooking_method": "Stovetop",
+  "keywords": [
+    "easy",
+    "dairy free",
+    "egg free",
+    "healthy",
+    "chili",
+    "beans",
+    "buffalo"
+  ]
 }
diff --git a/tests/test_data/skinnytaste.com/skinnytaste.json b/tests/test_data/skinnytaste.com/skinnytaste.json
index 1de0e16e..8c11120f 100644
--- a/tests/test_data/skinnytaste.com/skinnytaste.json
+++ b/tests/test_data/skinnytaste.com/skinnytaste.json
@@ -52,5 +52,12 @@
   "site_name": "Skinnytaste",
   "title": "Grilled Chicken with Spinach and Melted Mozzarella",
   "total_time": 17,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "chicken breast recipes",
+    "grilled chicken",
+    "grilled chicken breast",
+    "grilled chicken recipe",
+    "Grilled Chicken with Spinach and Melted Mozzarella"
+  ]
 }
diff --git a/tests/test_data/smulweb.nl/smulweb.json b/tests/test_data/smulweb.nl/smulweb.json
index 91469f07..eac59299 100644
--- a/tests/test_data/smulweb.nl/smulweb.json
+++ b/tests/test_data/smulweb.nl/smulweb.json
@@ -67,5 +67,12 @@
   "site_name": "Smulweb",
   "title": "Lekker! Ovenschotel spitskool champignons spekreepjes en prei",
   "total_time": 30,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "Recept",
+    "Lekker! Ovenschotel spitskool champignons spekreepjes en prei",
+    "Ovenschotel",
+    "Nederlands",
+    "Hartig"
+  ]
 }
diff --git a/tests/test_data/sobors.hu/sobors.json b/tests/test_data/sobors.hu/sobors.json
index 45ed28d3..0c3bba06 100644
--- a/tests/test_data/sobors.hu/sobors.json
+++ b/tests/test_data/sobors.hu/sobors.json
@@ -52,5 +52,15 @@
   "site_name": null,
   "title": "Piskótatekercs párizsi krémmel",
   "total_time": 105,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "süti",
+    "sütemény",
+    "piskóta",
+    "piskótatekercs",
+    "csokoládékrém",
+    "párizsi krém",
+    "piskótarolád",
+    "piskótatekercs párizsi krémmel"
+  ]
 }
diff --git a/tests/test_data/spendwithpennies.com/spendwithpennies.json b/tests/test_data/spendwithpennies.com/spendwithpennies.json
index 17f78aa6..1e9d3a79 100644
--- a/tests/test_data/spendwithpennies.com/spendwithpennies.json
+++ b/tests/test_data/spendwithpennies.com/spendwithpennies.json
@@ -60,5 +60,12 @@
   "site_name": "Spend With Pennies",
   "title": "Gooey Chocolate Pudding Cake",
   "total_time": 35,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "best pudding cake",
+    "chocolate lava cake",
+    "Chocolate Pudding Cake",
+    "easy chocolate pudding cake",
+    "pudding cake"
+  ]
 }
diff --git a/tests/test_data/staysnatched.com/staysnatched.json b/tests/test_data/staysnatched.com/staysnatched.json
index 4ebe2c9b..4108a1f4 100644
--- a/tests/test_data/staysnatched.com/staysnatched.json
+++ b/tests/test_data/staysnatched.com/staysnatched.json
@@ -73,5 +73,10 @@
   "site_name": "Stay Snatched",
   "title": "Slow Cooker Chili Mac and Cheese",
   "total_time": 210,
-  "yields": "7 servings"
+  "yields": "7 servings",
+  "keywords": [
+    "chili mac and cheese",
+    "Crockpot Chili Mac",
+    "slow cooker chili mac"
+  ]
 }
diff --git a/tests/test_data/steamykitchen.com/steamykitchen_1.json b/tests/test_data/steamykitchen.com/steamykitchen_1.json
index 1e8f3370..53fb08a7 100644
--- a/tests/test_data/steamykitchen.com/steamykitchen_1.json
+++ b/tests/test_data/steamykitchen.com/steamykitchen_1.json
@@ -71,5 +71,10 @@
   "site_name": "Steamy Kitchen Recipes Giveaways",
   "title": "Instant Pot Vietnamese Chicken Pho",
   "total_time": 40,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "instant pot pho",
+    "pho recipe",
+    "vietnamese pho"
+  ]
 }
diff --git a/tests/test_data/sunset.com/sunset.json b/tests/test_data/sunset.com/sunset.json
index 812d20be..4a960a02 100644
--- a/tests/test_data/sunset.com/sunset.json
+++ b/tests/test_data/sunset.com/sunset.json
@@ -1,7 +1,6 @@
 {
   "author": "Angela Brassinga",
   "canonical_url": "https://www.sunset.com/recipe/crisp-top-sourdough-stuffing",
-  "category": "",
   "host": "sunset.com",
   "image": "https://img.sunset02.com/sites/default/files/styles/4_3_horizontal_-_900x675/public/crisp-top-sourdough-stuffing-su.jpg",
   "ingredient_groups": [
diff --git a/tests/test_data/sweetcsdesigns.com/sweetcsdesigns.json b/tests/test_data/sweetcsdesigns.com/sweetcsdesigns.json
index fc00fa95..7f4c8cf2 100644
--- a/tests/test_data/sweetcsdesigns.com/sweetcsdesigns.json
+++ b/tests/test_data/sweetcsdesigns.com/sweetcsdesigns.json
@@ -52,5 +52,15 @@
   "site_name": "Sweet Cs Designs",
   "title": "The Best Easy Air Fryer French Fries",
   "total_time": 85,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "side dish",
+    "potatoes",
+    "instant pot french fries",
+    "air fryer french fries",
+    "easy french fries",
+    "healthy french fries",
+    "homemade french fries",
+    ""
+  ]
 }
diff --git a/tests/test_data/sweetpeasandsaffron.com/sweetpeasandsaffron.json b/tests/test_data/sweetpeasandsaffron.com/sweetpeasandsaffron.json
index 4751d59c..c7ba62f6 100644
--- a/tests/test_data/sweetpeasandsaffron.com/sweetpeasandsaffron.json
+++ b/tests/test_data/sweetpeasandsaffron.com/sweetpeasandsaffron.json
@@ -109,5 +109,13 @@
   "site_name": "Sweet Peas and Saffron",
   "title": "7 Healthy Steel Cut Oats Recipes",
   "total_time": 25,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "dairy-free",
+    "freezer",
+    "gluten-free",
+    "meal prep",
+    "oatmeal",
+    "vegan"
+  ]
 }
diff --git a/tests/test_data/taste.com.au/tasteau_1.json b/tests/test_data/taste.com.au/tasteau_1.json
index 18aed22f..1080e599 100644
--- a/tests/test_data/taste.com.au/tasteau_1.json
+++ b/tests/test_data/taste.com.au/tasteau_1.json
@@ -61,5 +61,26 @@
   "site_name": "www.taste.com.au",
   "title": "Mexican chicken pasta bake recipe",
   "total_time": 70,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "cheese",
+    "chicken",
+    "chilli",
+    "egg allergy",
+    "feta",
+    "garlic",
+    "gluten allergy",
+    "lactose allergy",
+    "milk allergy",
+    "onion",
+    "pasta",
+    "peanut allergy",
+    "spicy",
+    "tomato",
+    "wheat allergy",
+    "mexican",
+    "easy",
+    "dinner",
+    "family friendly"
+  ]
 }
diff --git a/tests/test_data/taste.com.au/tasteau_2.json b/tests/test_data/taste.com.au/tasteau_2.json
index 4c404e30..873dfd46 100644
--- a/tests/test_data/taste.com.au/tasteau_2.json
+++ b/tests/test_data/taste.com.au/tasteau_2.json
@@ -52,5 +52,32 @@
   ],
   "site_name": "www.taste.com.au",
   "title": "Vegetarian lasagne roll recipe",
-  "total_time": 125
+  "total_time": 125,
+  "keywords": [
+    "cheese",
+    "egg allergy",
+    "garlic",
+    "gluten allergy",
+    "lactose allergy",
+    "lentil",
+    "milk allergy",
+    "onion",
+    "pasta",
+    "peanut allergy",
+    "pumpkin",
+    "sesame allergy",
+    "tomato",
+    "tree nut allergy",
+    "wheat allergy",
+    "zucchini",
+    "australian",
+    "dinner",
+    "main",
+    "entertaining",
+    "family friendly",
+    "weeknight",
+    "vegetarian",
+    "savoury",
+    "easy"
+  ]
 }
diff --git a/tests/test_data/tastesbetterfromscratch.com/tastesbetterfromscratch.json b/tests/test_data/tastesbetterfromscratch.com/tastesbetterfromscratch.json
index c497475b..fea2c11b 100644
--- a/tests/test_data/tastesbetterfromscratch.com/tastesbetterfromscratch.json
+++ b/tests/test_data/tastesbetterfromscratch.com/tastesbetterfromscratch.json
@@ -61,5 +61,12 @@
   "site_name": "Tastes Better From Scratch",
   "title": "How to make Pulled Pork",
   "total_time": 320,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "how to make pulled pork",
+    "pulled pork",
+    "pulled pork recipe",
+    "pulled pork recipe oven",
+    "slow cooker pulled pork"
+  ]
 }
diff --git a/tests/test_data/tastesoflizzyt.com/tastesoflizzyt.json b/tests/test_data/tastesoflizzyt.com/tastesoflizzyt.json
index 7acd6b4d..60383e60 100644
--- a/tests/test_data/tastesoflizzyt.com/tastesoflizzyt.json
+++ b/tests/test_data/tastesoflizzyt.com/tastesoflizzyt.json
@@ -60,5 +60,12 @@
   "site_name": "Tastes of Lizzy T",
   "title": "Soft Baked Molasses Cookies",
   "total_time": 27,
-  "yields": "60 servings"
+  "yields": "60 servings",
+  "keywords": [
+    "christmas cookies",
+    "cookies without eggs",
+    "easy cookies",
+    "egg free cookies",
+    "gingerbread cookies"
+  ]
 }
diff --git a/tests/test_data/tasty.co/tasty.json b/tests/test_data/tasty.co/tasty.json
index cb7b53ae..a2f412d9 100644
--- a/tests/test_data/tasty.co/tasty.json
+++ b/tests/test_data/tasty.co/tasty.json
@@ -71,5 +71,26 @@
   "ratings": 4.7,
   "site_name": "tasty.co",
   "title": "Red Wine-Braised Short Ribs With Cashew Cauliflower Mash Recipe by Tasty",
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "braised short ribs",
+    "cashew cauliflower mash",
+    "cauliflower mash",
+    "creamy cauliflower mash",
+    "dinner recipe",
+    "gluten free",
+    "gluten free recipe",
+    "goodful - recipe",
+    "healthy - goodful",
+    "healthy recipe",
+    "low carb cauliflower mash",
+    "low carb mash",
+    "low-carb",
+    "red wine",
+    "red wine braised short ribs",
+    "red wine braiser recipe",
+    "short ribs",
+    "short ribs recipe",
+    "tasty - recipe"
+  ]
 }
diff --git a/tests/test_data/theclevercarrot.com/theclevercarrot_1.json b/tests/test_data/theclevercarrot.com/theclevercarrot_1.json
index 11129cd7..e297f27a 100644
--- a/tests/test_data/theclevercarrot.com/theclevercarrot_1.json
+++ b/tests/test_data/theclevercarrot.com/theclevercarrot_1.json
@@ -105,5 +105,14 @@
   "title": "Soft Sourdough Cinnamon Rolls",
   "total_time": 930,
   "yields": "8 servings",
-  "cooking_method": "Oven-Baked"
+  "cooking_method": "Oven-Baked",
+  "keywords": [
+    "sourdough",
+    "sourdough recipes",
+    "sourdough cinnamon rolls",
+    "cinnamon rolls",
+    "best sourdough cinnamon rolls",
+    "sourdough bread",
+    "sourdough starter"
+  ]
 }
diff --git a/tests/test_data/theexpertguides.com/theexpertguides.json b/tests/test_data/theexpertguides.com/theexpertguides.json
index 66db9474..5f08d9d6 100644
--- a/tests/test_data/theexpertguides.com/theexpertguides.json
+++ b/tests/test_data/theexpertguides.com/theexpertguides.json
@@ -51,5 +51,10 @@
   "site_name": "theexpertguides",
   "title": "Coconut Milk Pasta Sauce Recipe",
   "total_time": 28,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "coconut milk pasta",
+    "vegan coconut milk pasta sauce recipe",
+    "vegan pasta sauce"
+  ]
 }
diff --git a/tests/test_data/thekitchencommunity.org/thekitchencommunity.json b/tests/test_data/thekitchencommunity.org/thekitchencommunity.json
index 7b30604d..a21e9cc1 100644
--- a/tests/test_data/thekitchencommunity.org/thekitchencommunity.json
+++ b/tests/test_data/thekitchencommunity.org/thekitchencommunity.json
@@ -56,5 +56,8 @@
   "site_name": "The Kitchen Community",
   "title": "Our BEST Crock Pot Mac and Cheese Recipe",
   "total_time": 125,
-  "yields": "8 servings"
+  "yields": "8 servings",
+  "keywords": [
+    "crockpot mac and cheese"
+  ]
 }
diff --git a/tests/test_data/thekitchenmagpie.com/thekitchenmagpie.json b/tests/test_data/thekitchenmagpie.com/thekitchenmagpie.json
index b306cfc0..589eb0b1 100644
--- a/tests/test_data/thekitchenmagpie.com/thekitchenmagpie.json
+++ b/tests/test_data/thekitchenmagpie.com/thekitchenmagpie.json
@@ -58,5 +58,8 @@
   "site_name": "The Kitchen Magpie",
   "title": "Salmon Loaf",
   "total_time": 70,
-  "yields": "8 servings"
+  "yields": "8 servings",
+  "keywords": [
+    "salmon loaf"
+  ]
 }
diff --git a/tests/test_data/thekitchn.com/thekitchn.json b/tests/test_data/thekitchn.com/thekitchn.json
index dbc41423..be56080c 100644
--- a/tests/test_data/thekitchn.com/thekitchn.json
+++ b/tests/test_data/thekitchn.com/thekitchn.json
@@ -74,5 +74,8 @@
   "site_name": "Kitchn",
   "title": "How To Make the Best Beef and Cheese Manicotti",
   "total_time": 65,
-  "yields": "8 servings"
+  "yields": "8 servings",
+  "keywords": [
+    "Beef"
+  ]
 }
diff --git a/tests/test_data/themagicalslowcooker.com/themagicalslowcooker_1.json b/tests/test_data/themagicalslowcooker.com/themagicalslowcooker_1.json
index 4f93aac3..e40942b6 100644
--- a/tests/test_data/themagicalslowcooker.com/themagicalslowcooker_1.json
+++ b/tests/test_data/themagicalslowcooker.com/themagicalslowcooker_1.json
@@ -52,5 +52,8 @@
   "site_name": "The Magical Slow Cooker",
   "title": "Slow Cooker Ground Beef",
   "total_time": 245,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "ground beef"
+  ]
 }
diff --git a/tests/test_data/themagicalslowcooker.com/themagicalslowcooker_2.json b/tests/test_data/themagicalslowcooker.com/themagicalslowcooker_2.json
index dddc2881..69a4da34 100644
--- a/tests/test_data/themagicalslowcooker.com/themagicalslowcooker_2.json
+++ b/tests/test_data/themagicalslowcooker.com/themagicalslowcooker_2.json
@@ -89,5 +89,8 @@
   "site_name": "The Magical Slow Cooker",
   "title": "Slow Cooker Pork Roast with Gravy",
   "total_time": 510,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "pork pot roast"
+  ]
 }
diff --git a/tests/test_data/themodernproper.com/themodernproper.json b/tests/test_data/themodernproper.com/themodernproper.json
index fa0885b6..d09fe061 100644
--- a/tests/test_data/themodernproper.com/themodernproper.json
+++ b/tests/test_data/themodernproper.com/themodernproper.json
@@ -89,5 +89,10 @@
   "site_name": "The Modern Proper",
   "title": "Easy Swedish Meatball Recipe",
   "total_time": 60,
-  "yields": "8 servings"
+  "yields": "8 servings",
+  "keywords": [
+    "swedish meatballs",
+    "fall recipe",
+    "winter recipe"
+  ]
 }
diff --git a/tests/test_data/thepioneerwoman.com/thepioneerwoman_1.json b/tests/test_data/thepioneerwoman.com/thepioneerwoman_1.json
index 26b50ab5..2cbc8c3e 100644
--- a/tests/test_data/thepioneerwoman.com/thepioneerwoman_1.json
+++ b/tests/test_data/thepioneerwoman.com/thepioneerwoman_1.json
@@ -3,7 +3,6 @@
   "canonical_url": "https://www.thepioneerwoman.com/food-cooking/recipes/a10720/patty-melts/",
   "category": "main dish,meat",
   "cook_time": 25,
-  "cuisine": "",
   "description": "Who doesn’t love a good old-fashioned patty melt? Here's the easiest way to make one at home that's beyond delicious.",
   "host": "thepioneerwoman.com",
   "image": "https://hips.hearstapps.com/hmg-prod/images/patty-melt-1597698088.jpg?crop=0.508xw:0.450xh;0.229xw,0.200xh&resize=1200:*",
@@ -44,5 +43,10 @@
   "site_name": "The Pioneer Woman",
   "title": "Patty Melts",
   "total_time": 35,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "Recipes",
+    "Cooking",
+    "Food"
+  ]
 }
diff --git a/tests/test_data/thepioneerwoman.com/thepioneerwoman_2.json b/tests/test_data/thepioneerwoman.com/thepioneerwoman_2.json
index 9c5855c8..e75728f2 100644
--- a/tests/test_data/thepioneerwoman.com/thepioneerwoman_2.json
+++ b/tests/test_data/thepioneerwoman.com/thepioneerwoman_2.json
@@ -71,5 +71,10 @@
   "site_name": "The Pioneer Woman",
   "title": "Pumpkin Sheet Cake With Cream Cheese Frosting",
   "total_time": 40,
-  "yields": "18 servings"
+  "yields": "18 servings",
+  "keywords": [
+    "Recipes",
+    "Cooking",
+    "Food"
+  ]
 }
diff --git a/tests/test_data/therecipecritic.com/therecipecritic.json b/tests/test_data/therecipecritic.com/therecipecritic.json
index a9fc8bc5..f169c658 100644
--- a/tests/test_data/therecipecritic.com/therecipecritic.json
+++ b/tests/test_data/therecipecritic.com/therecipecritic.json
@@ -68,5 +68,9 @@
   "site_name": "The Recipe Critic",
   "title": "Burrata Appetizer",
   "total_time": 25,
-  "yields": "8 servings"
+  "yields": "8 servings",
+  "keywords": [
+    "burrata appetizer",
+    "tomato and burrata appetizer"
+  ]
 }
diff --git a/tests/test_data/thespruceeats.com/thespruceeats_1.json b/tests/test_data/thespruceeats.com/thespruceeats_1.json
index 6b67f464..a4492353 100644
--- a/tests/test_data/thespruceeats.com/thespruceeats_1.json
+++ b/tests/test_data/thespruceeats.com/thespruceeats_1.json
@@ -56,5 +56,9 @@
   "site_name": "The Spruce Eats",
   "title": "Bell Pepper Sandwich Recipe",
   "total_time": 15,
-  "yields": "1 serving"
+  "yields": "1 serving",
+  "keywords": [
+    "sandwich",
+    "bell pepper"
+  ]
 }
diff --git a/tests/test_data/thespruceeats.com/thespruceeats_2.json b/tests/test_data/thespruceeats.com/thespruceeats_2.json
index a0b67da6..7b063bc3 100644
--- a/tests/test_data/thespruceeats.com/thespruceeats_2.json
+++ b/tests/test_data/thespruceeats.com/thespruceeats_2.json
@@ -80,5 +80,9 @@
   "site_name": "The Spruce Eats",
   "title": "Peppermint Swirl Brownies",
   "total_time": 45,
-  "yields": "9 servings"
+  "yields": "9 servings",
+  "keywords": [
+    "peppermint",
+    "brownies"
+  ]
 }
diff --git a/tests/test_data/thewoksoflife.com/thewoksoflife.json b/tests/test_data/thewoksoflife.com/thewoksoflife.json
index 90f9b92b..100fa425 100644
--- a/tests/test_data/thewoksoflife.com/thewoksoflife.json
+++ b/tests/test_data/thewoksoflife.com/thewoksoflife.json
@@ -50,5 +50,8 @@
   "site_name": "The Woks of Life",
   "title": "The Perfect Whole Wheat Mantou Recipe",
   "total_time": 270,
-  "yields": "12 servings"
+  "yields": "12 servings",
+  "keywords": [
+    "mantou"
+  ]
 }
diff --git a/tests/test_data/thinlicious.com/thinlicious.json b/tests/test_data/thinlicious.com/thinlicious.json
index 5390baf8..fb105a96 100644
--- a/tests/test_data/thinlicious.com/thinlicious.json
+++ b/tests/test_data/thinlicious.com/thinlicious.json
@@ -59,5 +59,9 @@
   "site_name": "Thinlicious",
   "title": "Easy Keto Hamburger Buns Recipe (That Don't Fall Apart)",
   "total_time": 17,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "keto bread rolls",
+    "keto hamburger buns"
+  ]
 }
diff --git a/tests/test_data/tidymom.net/tidymom_2.json b/tests/test_data/tidymom.net/tidymom_2.json
index 0ff09d25..de0ca248 100644
--- a/tests/test_data/tidymom.net/tidymom_2.json
+++ b/tests/test_data/tidymom.net/tidymom_2.json
@@ -123,5 +123,17 @@
   "site_name": "TidyMom®",
   "title": "Red Velvet Cake With Cinnamon Buttercream",
   "total_time": 205,
-  "yields": "9 servings"
+  "yields": "9 servings",
+  "keywords": [
+    "birthday cake",
+    "buttercream",
+    "buttermilk",
+    "cake",
+    "cake decorating",
+    "Chocolate",
+    "cinnamon",
+    "cream cheese",
+    "cream cheese frosting",
+    "red velvet"
+  ]
 }
diff --git a/tests/test_data/tine.no/tineno.json b/tests/test_data/tine.no/tineno.json
index 71f2f08f..bbe5a41a 100644
--- a/tests/test_data/tine.no/tineno.json
+++ b/tests/test_data/tine.no/tineno.json
@@ -70,5 +70,8 @@
   "site_name": "TINE",
   "title": "Rask kylling tikka masala",
   "total_time": 30,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "kylling"
+  ]
 }
diff --git a/tests/test_data/tudogostoso.com.br/tudogostoso.json b/tests/test_data/tudogostoso.com.br/tudogostoso.json
index 545fa7c7..f4fe06f8 100644
--- a/tests/test_data/tudogostoso.com.br/tudogostoso.json
+++ b/tests/test_data/tudogostoso.com.br/tudogostoso.json
@@ -33,5 +33,8 @@
   "site_name": "TudoGostoso",
   "title": "Caipirinha - Original",
   "total_time": 5,
-  "yields": "1 serving"
+  "yields": "1 serving",
+  "keywords": [
+    "Receita de Caipirinha - Original"
+  ]
 }
diff --git a/tests/test_data/twopeasandtheirpod.com/twopeasandtheirpod_1.json b/tests/test_data/twopeasandtheirpod.com/twopeasandtheirpod_1.json
index c22e3928..ec0f0bc8 100644
--- a/tests/test_data/twopeasandtheirpod.com/twopeasandtheirpod_1.json
+++ b/tests/test_data/twopeasandtheirpod.com/twopeasandtheirpod_1.json
@@ -76,5 +76,8 @@
   "site_name": "Two Peas & Their Pod",
   "title": "Chicken Taquitos",
   "total_time": 40,
-  "yields": "20 servings"
+  "yields": "20 servings",
+  "keywords": [
+    "taquitos"
+  ]
 }
diff --git a/tests/test_data/twopeasandtheirpod.com/twopeasandtheirpod_2.json b/tests/test_data/twopeasandtheirpod.com/twopeasandtheirpod_2.json
index 91684fb4..c6c85b0e 100644
--- a/tests/test_data/twopeasandtheirpod.com/twopeasandtheirpod_2.json
+++ b/tests/test_data/twopeasandtheirpod.com/twopeasandtheirpod_2.json
@@ -56,5 +56,8 @@
   "site_name": "Two Peas & Their Pod",
   "title": "Mango Salad",
   "total_time": 10,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "mango"
+  ]
 }
diff --git a/tests/test_data/uitpaulineskeuken.nl/uitpaulineskeukennl_1.json b/tests/test_data/uitpaulineskeuken.nl/uitpaulineskeukennl_1.json
index e4bbb917..49f15d96 100644
--- a/tests/test_data/uitpaulineskeuken.nl/uitpaulineskeukennl_1.json
+++ b/tests/test_data/uitpaulineskeuken.nl/uitpaulineskeukennl_1.json
@@ -40,5 +40,20 @@
   "site_name": "Uit Paulines Keuken",
   "title": "Ravioli met salieboter",
   "total_time": 15,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "Makkelijke recepten",
+    "Pasta recepten",
+    "Snelle recepten",
+    "Ravioli",
+    "Italiaanse recepten",
+    "Notenvrije recepten",
+    "Kerst",
+    "Vegetarische recepten",
+    "Herfst recepten",
+    "Lente recepten",
+    "Winter recepten",
+    "Zomer recepten",
+    "Hoofdgerecht"
+  ]
 }
diff --git a/tests/test_data/uitpaulineskeuken.nl/uitpaulineskeukennl_2.json b/tests/test_data/uitpaulineskeuken.nl/uitpaulineskeukennl_2.json
index c143a8d8..5c131988 100644
--- a/tests/test_data/uitpaulineskeuken.nl/uitpaulineskeukennl_2.json
+++ b/tests/test_data/uitpaulineskeuken.nl/uitpaulineskeukennl_2.json
@@ -2,7 +2,6 @@
   "author": "Marianne Snel",
   "canonical_url": "https://uitpaulineskeuken.nl/recept/blondies-met-citroen",
   "category": "Cake recepten, High tea, Koekjes recepten, Chocolade, Verjaardag, Bakrecepten",
-  "cuisine": "",
   "description": "Zin in iets lekkers? Probeer dan eens deze heerlijke blondies met citroen. Blondies zijn brownies maar dan van witte chocolade. Om ze lekker fris en zomers te maken hebben we in dit blondie recept veel citroen verwerkt. Zo bestrijk je de koek na het bakken direct met citroensap, dan kan de citroensmaak er goed in trekken. En daarna besmeer je het met citroenglazuur. Op en top zomer! Met dit recept maak je een koek die je in 9 tot 12 stukjes kunt snijden. Lekker voor bij de thee of koffie, ze staan geweldig op een high tea tafel en zijn een superleuke afsluiter voor een gezellige picknick! Zin in?",
   "host": "uitpaulineskeuken.nl",
   "image": "https://uitpaulineskeuken.nl/wp-content/uploads/2022/07/Citroen-blondies-UPK-22-11-JUL-BLOGPOST-258.jpg",
@@ -70,5 +69,13 @@
   "site_name": "Uit Paulines Keuken",
   "title": "Blondies met citroen",
   "total_time": 55,
-  "yields": "12 servings"
+  "yields": "12 servings",
+  "keywords": [
+    "Cake recepten",
+    "High tea",
+    "Koekjes recepten",
+    "Chocolade",
+    "Verjaardag",
+    "Bakrecepten"
+  ]
 }
diff --git a/tests/test_data/usapears.org/usapears.json b/tests/test_data/usapears.org/usapears.json
index 91938232..d65a6a4a 100644
--- a/tests/test_data/usapears.org/usapears.json
+++ b/tests/test_data/usapears.org/usapears.json
@@ -2,7 +2,6 @@
   "author": "Jamie Lauren & Mollie Katzen",
   "canonical_url": "https://usapears.org/recipe/sauteed-bosc-pears/",
   "category": "Dessert",
-  "cuisine": "",
   "description": "This simple, tasty pear recipe was created by Chef Jamie Lauren of Absinthe Brasserie and Bar in San Francisco and cookbook author Mollie Katzen. If you can’t find Bosc pears at your local grocery store, red or green Anjou pears also work well.",
   "host": "usapears.org",
   "image": "https://usapears.org/wp-content/uploads/2014/10/Sauteed-Bosc-Pears1.jpg",
diff --git a/tests/test_data/vanillaandbean.com/vanillaandbean_1.json b/tests/test_data/vanillaandbean.com/vanillaandbean_1.json
index 915aab5e..4f0f7d02 100644
--- a/tests/test_data/vanillaandbean.com/vanillaandbean_1.json
+++ b/tests/test_data/vanillaandbean.com/vanillaandbean_1.json
@@ -66,5 +66,10 @@
   "site_name": "Vanilla And Bean",
   "title": "Maple Oat Sourdough Sandwich Bread Recipe",
   "total_time": 50,
-  "yields": "1 serving"
+  "yields": "1 serving",
+  "keywords": [
+    "Maple Oat Sourdough",
+    "Sourdough Bread",
+    "Sourdough Sandwich Bread"
+  ]
 }
diff --git a/tests/test_data/vanillaandbean.com/vanillaandbean_2.json b/tests/test_data/vanillaandbean.com/vanillaandbean_2.json
index 2b488251..d9531941 100644
--- a/tests/test_data/vanillaandbean.com/vanillaandbean_2.json
+++ b/tests/test_data/vanillaandbean.com/vanillaandbean_2.json
@@ -61,5 +61,10 @@
   "site_name": "Vanilla And Bean",
   "title": "Healthy Almond Orange Oat Waffles Recipe",
   "total_time": 40,
-  "yields": "9 servings"
+  "yields": "9 servings",
+  "keywords": [
+    "Healthy Waffles",
+    "Oat Waffles",
+    "Vegan Gluten Free Waffles"
+  ]
 }
diff --git a/tests/test_data/vegetarbloggen.no/vegetarbloggen.json b/tests/test_data/vegetarbloggen.no/vegetarbloggen.json
index 1414181e..a3a22942 100644
--- a/tests/test_data/vegetarbloggen.no/vegetarbloggen.json
+++ b/tests/test_data/vegetarbloggen.no/vegetarbloggen.json
@@ -45,5 +45,9 @@
   "site_name": null,
   "title": "Pasta i gresskarsaus",
   "total_time": 30,
-  "yields": "2 servings"
+  "yields": "2 servings",
+  "keywords": [
+    "gresskar",
+    "pasta"
+  ]
 }
diff --git a/tests/test_data/vegrecipesofindia.com/vegrecipesofindia.json b/tests/test_data/vegrecipesofindia.com/vegrecipesofindia.json
index 59849a80..a1242364 100644
--- a/tests/test_data/vegrecipesofindia.com/vegrecipesofindia.json
+++ b/tests/test_data/vegrecipesofindia.com/vegrecipesofindia.json
@@ -90,5 +90,9 @@
   "site_name": "Dassana's Veg Recipes",
   "title": "Sarson ka Saag Recipe (Authentic Punjabi Style)",
   "total_time": 240,
-  "yields": "8 servings"
+  "yields": "8 servings",
+  "keywords": [
+    "Sarson da Saag",
+    "Sarson ka Saag"
+  ]
 }
diff --git a/tests/test_data/watchwhatueat.com/watchwhatueat.json b/tests/test_data/watchwhatueat.com/watchwhatueat.json
index c6403e3d..0d044da8 100644
--- a/tests/test_data/watchwhatueat.com/watchwhatueat.json
+++ b/tests/test_data/watchwhatueat.com/watchwhatueat.json
@@ -70,5 +70,9 @@
   "site_name": "Watch What U Eat",
   "title": "Healthy Instant Pot Cauliflower With Gravy",
   "total_time": 25,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "instant pot cauliflower",
+    "instant pot whole cauliflower"
+  ]
 }
diff --git a/tests/test_data/wearenotmartha.com/wearenotmartha_1.json b/tests/test_data/wearenotmartha.com/wearenotmartha_1.json
index 1807d57f..8e9c6767 100644
--- a/tests/test_data/wearenotmartha.com/wearenotmartha_1.json
+++ b/tests/test_data/wearenotmartha.com/wearenotmartha_1.json
@@ -42,5 +42,9 @@
   "site_name": "We are not Martha",
   "title": "Starbucks Grilled Cheese {Copycat Recipe}",
   "total_time": 20,
-  "yields": "2 servings"
+  "yields": "2 servings",
+  "keywords": [
+    "Grilled Cheese Recipes",
+    "Starbucks Copycat"
+  ]
 }
diff --git a/tests/test_data/wearenotmartha.com/wearenotmartha_2.json b/tests/test_data/wearenotmartha.com/wearenotmartha_2.json
index 167d8797..745beaf6 100644
--- a/tests/test_data/wearenotmartha.com/wearenotmartha_2.json
+++ b/tests/test_data/wearenotmartha.com/wearenotmartha_2.json
@@ -65,5 +65,11 @@
   "site_name": "We are not Martha",
   "title": "Chocolate Cream Cold Brew",
   "total_time": 15,
-  "yields": "1 serving"
+  "yields": "1 serving",
+  "keywords": [
+    "Coffee Drinks",
+    "Iced Coffee",
+    "Starbucks Copycat",
+    "Starbucks Drinks"
+  ]
 }
diff --git a/tests/test_data/weightwatchers.com/weightwatcherspublic.json b/tests/test_data/weightwatchers.com/weightwatcherspublic.json
index c8c1d4e9..f3b78c64 100644
--- a/tests/test_data/weightwatchers.com/weightwatcherspublic.json
+++ b/tests/test_data/weightwatchers.com/weightwatcherspublic.json
@@ -1,9 +1,7 @@
 {
   "author": null,
   "canonical_url": "https://www.weightwatchers.com/de/rezept/kartoffelgulasch/562a9b02873e1afb2a3c4c13",
-  "category": "",
   "cook_time": null,
-  "cuisine": "",
   "description": "Das Rezept zaubert ein saftiges, würziges Gericht auf den Tisch und schmeckt garantiert.",
   "host": "weightwatchers.com",
   "image": "https://cmx.weightwatchers.com/assets-proxy/weight-watchers/image/upload/t_WINE_EXTRALARGE/h7wo0hbnwcleucj30sbw.jpg",
@@ -62,5 +60,14 @@
   "site_name": null,
   "title": "Kartoffelgulasch",
   "total_time": 40,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "Ohne Meeresfrüchte",
+    "Ohne Fisch",
+    "Fleisch",
+    "Kartoffeln",
+    "Kochen & Braten",
+    "Aus einem Topf",
+    "Eintöpfe & Suppen"
+  ]
 }
diff --git a/tests/test_data/wellplated.com/wellplated.json b/tests/test_data/wellplated.com/wellplated.json
index fab07a88..11e11990 100644
--- a/tests/test_data/wellplated.com/wellplated.json
+++ b/tests/test_data/wellplated.com/wellplated.json
@@ -70,5 +70,26 @@
   "site_name": "Well Plated by Erin",
   "title": "Egg Fried Rice",
   "total_time": 25,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "Asian fried rice recipe",
+    "authentic homemade fried rice",
+    "Chinese egg fried rice",
+    "chinese fried rice",
+    "chinese fried rice restaurant style",
+    "easy homemade fried rice recipe",
+    "egg fried rice",
+    "homemade egg fried rice like chinese takeaway",
+    "homemade fried rice in wok",
+    "homemade fried rice with egg",
+    "homemade fried rice with leftover rice",
+    "homemade fried rice without sesame oil",
+    "homemade healthy fried rice",
+    "how to make fried rice with egg",
+    "Plain fried rice recipe",
+    "recipe homemade fried rice",
+    "simple fried rice recipe",
+    "simple homemade fried rice",
+    "vegetable fried rice"
+  ]
 }
diff --git a/tests/test_data/whatsgabycooking.com/whatsgabycooking.json b/tests/test_data/whatsgabycooking.com/whatsgabycooking.json
index 01b60877..842ce71c 100644
--- a/tests/test_data/whatsgabycooking.com/whatsgabycooking.json
+++ b/tests/test_data/whatsgabycooking.com/whatsgabycooking.json
@@ -57,5 +57,9 @@
   "site_name": "What's Gaby Cooking",
   "title": "Vegetarian Quinoa Bake",
   "total_time": 45,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "quinoa bake",
+    "vegetarian quinoa bake"
+  ]
 }
diff --git a/tests/test_data/williams-sonoma.com/williamssonoma_1.json b/tests/test_data/williams-sonoma.com/williamssonoma_1.json
index 644d9aa9..0f9c6f02 100644
--- a/tests/test_data/williams-sonoma.com/williamssonoma_1.json
+++ b/tests/test_data/williams-sonoma.com/williamssonoma_1.json
@@ -35,5 +35,8 @@
   "site_name": "Williams Sonoma",
   "title": "Bacon Fat Hash Browns",
   "total_time": 40,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "keywords": [
+    "our catalogx spr1 23"
+  ]
 }
diff --git a/tests/test_data/williams-sonoma.com/williamssonoma_2.json b/tests/test_data/williams-sonoma.com/williamssonoma_2.json
index a3540e08..e3a855a8 100644
--- a/tests/test_data/williams-sonoma.com/williamssonoma_2.json
+++ b/tests/test_data/williams-sonoma.com/williamssonoma_2.json
@@ -66,5 +66,15 @@
   "site_name": "Williams Sonoma",
   "title": "Double Chocolate Layer Cake",
   "total_time": 80,
-  "yields": "12 servings"
+  "yields": "12 servings",
+  "keywords": [
+    "holiday showstoppers",
+    "our catalog hol1 16",
+    "chocolate desserts",
+    "our catalog fd3 16",
+    "fall baking",
+    "mothers day baking",
+    "20 favorite chocolate",
+    "ws brand recipes"
+  ]
 }
diff --git a/tests/test_data/yemek.com/yemek.json b/tests/test_data/yemek.com/yemek.json
index 543d5c60..f5455a93 100644
--- a/tests/test_data/yemek.com/yemek.json
+++ b/tests/test_data/yemek.com/yemek.json
@@ -66,5 +66,12 @@
   "site_name": "https://yemek.com",
   "title": "Köri Soslu Tavuklu Patates Topları",
   "total_time": 85,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "keywords": [
+    "köri",
+    "soslu",
+    "tavuklu",
+    "patates",
+    "topları"
+  ]
 }
diff --git a/tests/test_data/yummly.com/yummly.json b/tests/test_data/yummly.com/yummly.json
index 86a044a9..ff4544ec 100644
--- a/tests/test_data/yummly.com/yummly.json
+++ b/tests/test_data/yummly.com/yummly.json
@@ -52,5 +52,9 @@
   "title": "Easy White Cheese & Garlic Pizzas",
   "total_time": 25,
   "yields": "4 servings",
-  "cooking_method": "Baking"
+  "cooking_method": "Baking",
+  "keywords": [
+    "Quick",
+    "Baking"
+  ]
 }
diff --git a/tests/test_data/zaubertopf.de/zaubertopf.json b/tests/test_data/zaubertopf.de/zaubertopf.json
index 0ccf8db4..d67014fa 100644
--- a/tests/test_data/zaubertopf.de/zaubertopf.json
+++ b/tests/test_data/zaubertopf.de/zaubertopf.json
@@ -68,5 +68,8 @@
   },
   "site_name": "mein ZauberTopf",
   "title": "Wikinger-Auflauf mit dem Monsieur Cuisine",
-  "total_time": 46
+  "total_time": 46,
+  "keywords": [
+    "Mittagessen"
+  ]
 }