diff --git a/.phpunit.cache/test-results b/.phpunit.cache/test-results
index a4fbe1c..bd7d8f3 100644
--- a/.phpunit.cache/test-results
+++ b/.phpunit.cache/test-results
@@ -1 +1 @@
-{"version":"pest_2.34.2","defects":[],"times":{"P\\Tests\\Unit\\Support\\HasSEOTest::__pest_evaluable_it_automatically_associates_a_SEO_model_on_creation":0.017,"P\\Tests\\Feature\\JSONLD\\ArticleTest::__pest_evaluable_it_can_correctly_render_the_JSON_LD_Schema_markup__Article":0.033,"P\\Tests\\Feature\\JSONLD\\ArticleTest::__pest_evaluable_it_does_not_render_by_default_the_JSON_LD_Schema_markup__Article":0.002,"P\\Tests\\Feature\\Tags\\CanonicalTagTest::__pest_evaluable_it_can_display_the_canonical_URL_if_allowed":0.001,"P\\Tests\\Feature\\Tags\\CanonicalTagTest::__pest_evaluable_it_can_display_the_model_level_canonical_url_if_set_on_override":0.002,"P\\Tests\\Feature\\Tags\\CanonicalTagTest::__pest_evaluable_it_cannot_display_the_canonical_url_if_not_allowed":0.001,"P\\Tests\\Feature\\Tags\\CanonicalTagTest::__pest_evaluable_it_will_not_break_if_no_canonical__url_column_exists_in_seo_table":0.003,"P\\Tests\\Feature\\Tags\\CanonicalTagTest::__pest_evaluable_it_can_display_the_model_level_canonical_url_if_set_in_database":0.002,"P\\Tests\\Unit\\Facades\\SEOManagerTest::__pest_evaluable_the_SEOManager_facade_works_as_expected":0,"P\\Tests\\Unit\\Schema\\ArticleSchemaTest::__pest_evaluable_it_can_construct_Schema_Markup__Article":0,"P\\Tests\\Unit\\Schema\\ArticleSchemaTest::__pest_evaluable_it_can_add_multiple_authors_to_Schema_Markup__Article":0,"P\\Tests\\Unit\\Support\\SEODataTest::__pest_evaluable_it_can_determine_the_size_of_an_image":0.001,"P\\Tests\\Unit\\Support\\SEODataTest::__pest_evaluable_it_can_allow_to_prepareForUsage_without_a_model_in_the_database":0.001,"P\\Tests\\Feature\\Tags\\ImageTagTest::__pest_evaluable_it_will_display_the_image_url_if_it_came_from_a_model":0.002,"P\\Tests\\Feature\\Tags\\ImageTagTest::__pest_evaluable_it_will_not_render_the_default_image_if_that_was_disabled":0.001,"P\\Tests\\Feature\\Tags\\ImageTagTest::__pest_evaluable_it_will_display_the_image_url_from_a_model":0.002,"P\\Tests\\Feature\\Tags\\ImageTagTest::__pest_evaluable_it_will_render_the_default_image#('\/public\/test\/image.jpg')":0.001,"P\\Tests\\Feature\\Tags\\ImageTagTest::__pest_evaluable_it_will_render_the_default_image#('public\/test\/image.jpg')":0.001,"P\\Tests\\Feature\\Tags\\SitemapTagTest::__pest_evaluable_it_can_display_the_sitemap_if_path_is_set":0.002,"P\\Tests\\Unit\\Schema\\BreadcrumbListSchemaTest::__pest_evaluable_it_can_construct_Schema_Markup__BreadcrumbList":0,"P\\Tests\\Feature\\Tags\\AuthorTagTest::__pest_evaluable_it_can_override_the_author":0.002,"P\\Tests\\Feature\\Tags\\AuthorTagTest::__pest_evaluable_it_can_display_the_fallback_description_tag":0.001,"P\\Tests\\Feature\\Tags\\AuthorTagTest::__pest_evaluable_it_will_not_display_the_author_tag_if_there_isn_t_a_author":0.001,"P\\Tests\\Feature\\Tags\\AuthorTagTest::__pest_evaluable_it_will_display_the_author_if_the_associated_SEO_model_has_a_author":0.002,"P\\Tests\\Feature\\JSONLD\\BreadcrumbListTest::__pest_evaluable_it_does_not_render_by_default_the_JSON_LD_Schema_markup__BreadcrumbList":0.001,"P\\Tests\\Feature\\JSONLD\\BreadcrumbListTest::__pest_evaluable_it_can_correctly_render_the_JSON_LD_Schema_markup__BreadcrumbList":0.002,"P\\Tests\\Feature\\Tags\\DescriptionTagTest::__pest_evaluable_it_will_display_the_description_if_the_associated_SEO_model_has_a_description":0.002,"P\\Tests\\Feature\\Tags\\DescriptionTagTest::__pest_evaluable_it_can_display_the_fallback_description_tag":0.002,"P\\Tests\\Feature\\Tags\\DescriptionTagTest::__pest_evaluable_it_will_not_display_the_description_tag_if_there_isn_t_a_description":0.001,"P\\Tests\\Feature\\Tags\\TwitterCardSummaryTagsTest::__pest_evaluable_it_will_not_include_the_widths_and_heights_of_Twitter_images_if_the_image_was_overridden_using_a_URL#('summary', 'images\/twitter-1743x1743.jpg', '1743', \u2026)":0.003,"P\\Tests\\Feature\\Tags\\TwitterCardSummaryTagsTest::__pest_evaluable_it_will_not_include_the_widths_and_heights_of_Twitter_images_if_the_image_was_overridden_using_a_URL#('summary_large_image', 'images\/twitter-3597x1799.jpg', '3597', \u2026)":0.003,"P\\Tests\\Feature\\Tags\\TwitterCardSummaryTagsTest::__pest_evaluable_it_can_correctly_render_the_Twitter_Card_summary_with_the_image_on_a_Page#('summary_large_image', 'images\/twitter-3597x1799.jpg', '3597', \u2026)":0.003,"P\\Tests\\Feature\\Tags\\TwitterCardSummaryTagsTest::__pest_evaluable_it_can_correctly_render_the_Twitter_Card_summary_with_the_image_on_a_Page#('summary', 'images\/twitter-1743x1743.jpg', '1743', \u2026)":0.003,"P\\Tests\\Feature\\Tags\\TwitterCardSummaryTagsTest::__pest_evaluable_it_uses_openGraphTitle_over_title":0.003,"P\\Tests\\Feature\\Tags\\TwitterCardSummaryTagsTest::__pest_evaluable_it_will_not_render_the_Twitter_Card_summary__large__image_for_too_large_or_small_images#('images\/twitter-72x72.jpg')":0.002,"P\\Tests\\Feature\\Tags\\TwitterCardSummaryTagsTest::__pest_evaluable_it_will_not_render_the_Twitter_Card_summary__large__image_for_too_large_or_small_images#('images\/twitter-4721x4721.jpg')":0.002,"P\\Tests\\Feature\\Tags\\TwitterCardSummaryTagsTest::__pest_evaluable_it_will_escape_the_title":0.003,"P\\Tests\\Feature\\Tags\\TwitterCardSummaryTagsTest::__pest_evaluable_it_can_correctly_render_the_Twitter_Card_summary_without_the_image":0.002,"P\\Tests\\Feature\\Tags\\FaviconTagTest::__pest_evaluable_it_will_render_the_favicon_if_the_favicon_is_set":0.001,"P\\Tests\\Feature\\Tags\\FaviconTagTest::__pest_evaluable_it_will_not_render_the_favicon_if_the_favicon_is_set_to_null":0.001,"P\\Tests\\Unit\\SEOManagerTest::__pest_evaluable_the_SEOManager_singleton_works_as_expected":0,"P\\Tests\\Feature\\Tags\\AlternateTagTest::__pest_evaluable_it_will_not_display_the_aternates_tags_if_there_isn_t_any_alternate":0.001,"P\\Tests\\Feature\\Tags\\AlternateTagTest::__pest_evaluable_it_will_display_the_alternates_links_if_the_associated_SEO_model_has_alternates_links":0.002,"P\\Tests\\Unit\\HelpersTest::__pest_evaluable_it_can_get_the_TagManager_with_a_SEOData_data_object":0.001,"P\\Tests\\Unit\\HelpersTest::__pest_evaluable_it_can_get_the_TagManager":0,"P\\Tests\\Unit\\HelpersTest::__pest_evaluable_it_can_get_the_TagManager_with_and_without_a_model":0.001,"P\\Tests\\Feature\\Tags\\TitleTagTest::__pest_evaluable_it_will_infer_the_title_from_the_url_if_that_is_allowed":0.002,"P\\Tests\\Feature\\Tags\\TitleTagTest::__pest_evaluable_it_will_escape_the_title":0.001,"P\\Tests\\Feature\\Tags\\TitleTagTest::__pest_evaluable_it_will_display_the_title_if_the_associated_SEO_model_has_a_title":0.002,"P\\Tests\\Feature\\Tags\\TitleTagTest::__pest_evaluable_it_will_infer_the_title_from_the_url_if_that_is_allowed_and_the_model_doesn_t_return_a_title":0.002,"P\\Tests\\Feature\\Tags\\TitleTagTest::__pest_evaluable_it_will_not_infer_the_title_from_the_url_if_that_isn_t_allowed":0.003,"P\\Tests\\Feature\\JSONLD\\FaqPageTest::__pest_evaluable_it_can_correctly_render_the_JSON_LD_Schema_markup__FaqPageTest":0.002,"P\\Tests\\Feature\\JSONLD\\FaqPageTest::__pest_evaluable_it_does_not_render_by_default_the_JSON_LD_Schema_markup__FaqPageTest":0.001,"P\\Tests\\Unit\\Models\\SEOTest::__pest_evaluable_it_can_add_properties_to_a_SEO_model#('description', 'This is a description')":0.001,"P\\Tests\\Unit\\Models\\SEOTest::__pest_evaluable_it_can_add_properties_to_a_SEO_model#('title', 'My Cool Page Title')":0.001,"P\\Tests\\Unit\\Models\\SEOTest::__pest_evaluable_it_can_have_immutable_timestamps":0.001,"P\\Tests\\Unit\\Models\\SEOTest::__pest_evaluable_it_can_override_certain_SEO_Data#('title', 'My Cool Page Title')":0.001,"P\\Tests\\Unit\\Models\\SEOTest::__pest_evaluable_it_can_override_certain_SEO_Data#('description', 'This is a description')":0.001,"P\\Tests\\Unit\\Models\\SEOTest::__pest_evaluable_it_can_morph_a_model_to_the_SEO_model":0,"P\\Tests\\Unit\\Models\\SEOTest::__pest_evaluable_it_can_disable_the_suffix_in_the_page_model":0.002,"P\\Tests\\Unit\\Models\\SEOTest::__pest_evaluable_it_can_give_the_title_of_a_page_a_suffix_it_was_specified":0.001,"P\\Tests\\Unit\\Models\\SEOTest::__pest_evaluable_it_can_disable_the_suffix_in_the_page_model_dynamically_via_a_function":0.001,"P\\Tests\\Unit\\Models\\SEOTest::__pest_evaluable_it_can_prepare_the_SEO_for_use_on_a_page":0.001,"P\\Tests\\Feature\\Tags\\RobotsTagTest::__pest_evaluable_it_cannot_overwrite_the_robots_tag__default__value_with_the_robots_attribute_if__force__default__is_set__DB_Model_":0.007,"P\\Tests\\Feature\\Tags\\RobotsTagTest::__pest_evaluable_it_can_overwrite_the_robots_tag__default__value_with_the_robots_attribute__DB_Model_":0.002,"P\\Tests\\Feature\\Tags\\RobotsTagTest::__pest_evaluable_it_cannot_overwrite_the_robots_tag__default__value_with_the_robots_attribute_if__force__default__is_set__SEOData_":0.001,"P\\Tests\\Feature\\Tags\\RobotsTagTest::__pest_evaluable_it_can_overwrite_the_robots_tag__default__value_with_the_robots_attribute__SEOData_":0.001,"P\\Tests\\Feature\\Tags\\RobotsTagTest::__pest_evaluable_it_can_output_the_robots_tag__default__value":0.001,"P\\Tests\\Feature\\TagManagerTest::__pest_evaluable_it_can_replace_the_title_if_we_re_on_the_homepage#('Custom homepage title', 'Custom homepage title')":0.001,"P\\Tests\\Feature\\TagManagerTest::__pest_evaluable_it_can_replace_the_title_if_we_re_on_the_homepage#(null, '| My Website suffix')":0.001,"P\\Tests\\Feature\\TagManagerTest::__pest_evaluable_it_can_pipe_the_generated_tags_through_the_transformers_just_before_render":0.001,"P\\Tests\\Feature\\TagManagerTest::__pest_evaluable_it_can_pipe_the_SEOData_through_the_transformer_before_putting_it_into_the_collection":0.002,"P\\Tests\\Feature\\TagManagerTest::__pest_evaluable_can_render_the_SEOData_from_an_object_that_s_directly_passed_in":0.001,"P\\Tests\\Feature\\Tags\\OpenGraphTagsTest::__pest_evaluable_it_uses_openGraphTitle_over_title":0.003,"P\\Tests\\Feature\\Tags\\OpenGraphTagsTest::__pest_evaluable_it_can_correctly_render_OpenGraph_tags_for_a_post_or_page_with_a_few_additional_overrides":0.003,"P\\Tests\\Feature\\Tags\\OpenGraphTagsTest::__pest_evaluable_it_will_escape_the_title":0.002,"P\\Tests\\Feature\\Tags\\OpenGraphTagsTest::__pest_evaluable_it_can_correctly_render_OpenGraph_tags":0.002,"P\\Tests\\Feature\\Tags\\OpenGraphTagsTest::__pest_evaluable_it_can_correctly_render_OpenGraph_tags_for_a_post_or_page":0.003,"P\\Tests\\Feature\\Tags\\OpenGraphTagsTest::__pest_evaluable_it_can_correctly_render_locale_tags":0.001}}
\ No newline at end of file
+{"version":"pest_2.34.2","defects":[],"times":{"P\\Tests\\Unit\\Support\\HasSEOTest::__pest_evaluable_it_automatically_associates_a_SEO_model_on_creation":0.002,"P\\Tests\\Feature\\JSONLD\\ArticleTest::__pest_evaluable_it_can_correctly_render_the_JSON_LD_Schema_markup__Article":0.005,"P\\Tests\\Feature\\JSONLD\\ArticleTest::__pest_evaluable_it_does_not_render_by_default_the_JSON_LD_Schema_markup__Article":0.032,"P\\Tests\\Feature\\Tags\\CanonicalTagTest::__pest_evaluable_it_can_display_the_canonical_URL_if_allowed":0.001,"P\\Tests\\Feature\\Tags\\CanonicalTagTest::__pest_evaluable_it_can_display_the_model_level_canonical_url_if_set_on_override":0.002,"P\\Tests\\Feature\\Tags\\CanonicalTagTest::__pest_evaluable_it_cannot_display_the_canonical_url_if_not_allowed":0.001,"P\\Tests\\Feature\\Tags\\CanonicalTagTest::__pest_evaluable_it_will_not_break_if_no_canonical__url_column_exists_in_seo_table":0.004,"P\\Tests\\Feature\\Tags\\CanonicalTagTest::__pest_evaluable_it_can_display_the_model_level_canonical_url_if_set_in_database":0.003,"P\\Tests\\Unit\\Facades\\SEOManagerTest::__pest_evaluable_the_SEOManager_facade_works_as_expected":0,"P\\Tests\\Unit\\Schema\\ArticleSchemaTest::__pest_evaluable_it_can_construct_Schema_Markup__Article":0,"P\\Tests\\Unit\\Schema\\ArticleSchemaTest::__pest_evaluable_it_can_add_multiple_authors_to_Schema_Markup__Article":0,"P\\Tests\\Unit\\Support\\SEODataTest::__pest_evaluable_it_can_determine_the_size_of_an_image":0.002,"P\\Tests\\Unit\\Support\\SEODataTest::__pest_evaluable_it_can_allow_to_prepareForUsage_without_a_model_in_the_database":0.002,"P\\Tests\\Feature\\Tags\\ImageTagTest::__pest_evaluable_it_will_display_the_image_url_if_it_came_from_a_model":0.003,"P\\Tests\\Feature\\Tags\\ImageTagTest::__pest_evaluable_it_will_not_render_the_default_image_if_that_was_disabled":0.001,"P\\Tests\\Feature\\Tags\\ImageTagTest::__pest_evaluable_it_will_display_the_image_url_from_a_model":0.003,"P\\Tests\\Feature\\Tags\\ImageTagTest::__pest_evaluable_it_will_render_the_default_image#('\/public\/test\/image.jpg')":0.003,"P\\Tests\\Feature\\Tags\\ImageTagTest::__pest_evaluable_it_will_render_the_default_image#('public\/test\/image.jpg')":0.002,"P\\Tests\\Feature\\Tags\\SitemapTagTest::__pest_evaluable_it_can_display_the_sitemap_if_path_is_set":0.002,"P\\Tests\\Unit\\Schema\\BreadcrumbListSchemaTest::__pest_evaluable_it_can_construct_Schema_Markup__BreadcrumbList":0.001,"P\\Tests\\Feature\\Tags\\AuthorTagTest::__pest_evaluable_it_can_override_the_author":0.004,"P\\Tests\\Feature\\Tags\\AuthorTagTest::__pest_evaluable_it_can_display_the_fallback_description_tag":0.002,"P\\Tests\\Feature\\Tags\\AuthorTagTest::__pest_evaluable_it_will_not_display_the_author_tag_if_there_isn_t_a_author":0.002,"P\\Tests\\Feature\\Tags\\AuthorTagTest::__pest_evaluable_it_will_display_the_author_if_the_associated_SEO_model_has_a_author":0.003,"P\\Tests\\Feature\\JSONLD\\BreadcrumbListTest::__pest_evaluable_it_does_not_render_by_default_the_JSON_LD_Schema_markup__BreadcrumbList":0.002,"P\\Tests\\Feature\\JSONLD\\BreadcrumbListTest::__pest_evaluable_it_can_correctly_render_the_JSON_LD_Schema_markup__BreadcrumbList":0.002,"P\\Tests\\Feature\\Tags\\DescriptionTagTest::__pest_evaluable_it_will_display_the_description_if_the_associated_SEO_model_has_a_description":0.003,"P\\Tests\\Feature\\Tags\\DescriptionTagTest::__pest_evaluable_it_can_display_the_fallback_description_tag":0.001,"P\\Tests\\Feature\\Tags\\DescriptionTagTest::__pest_evaluable_it_will_not_display_the_description_tag_if_there_isn_t_a_description":0.002,"P\\Tests\\Feature\\Tags\\TwitterCardSummaryTagsTest::__pest_evaluable_it_will_not_include_the_widths_and_heights_of_Twitter_images_if_the_image_was_overridden_using_a_URL#('summary', 'images\/twitter-1743x1743.jpg', '1743', \u2026)":0.003,"P\\Tests\\Feature\\Tags\\TwitterCardSummaryTagsTest::__pest_evaluable_it_will_not_include_the_widths_and_heights_of_Twitter_images_if_the_image_was_overridden_using_a_URL#('summary_large_image', 'images\/twitter-3597x1799.jpg', '3597', \u2026)":0.003,"P\\Tests\\Feature\\Tags\\TwitterCardSummaryTagsTest::__pest_evaluable_it_can_correctly_render_the_Twitter_Card_summary_with_the_image_on_a_Page#('summary_large_image', 'images\/twitter-3597x1799.jpg', '3597', \u2026)":0.003,"P\\Tests\\Feature\\Tags\\TwitterCardSummaryTagsTest::__pest_evaluable_it_can_correctly_render_the_Twitter_Card_summary_with_the_image_on_a_Page#('summary', 'images\/twitter-1743x1743.jpg', '1743', \u2026)":0.003,"P\\Tests\\Feature\\Tags\\TwitterCardSummaryTagsTest::__pest_evaluable_it_uses_openGraphTitle_over_title":0.003,"P\\Tests\\Feature\\Tags\\TwitterCardSummaryTagsTest::__pest_evaluable_it_will_not_render_the_Twitter_Card_summary__large__image_for_too_large_or_small_images#('images\/twitter-72x72.jpg')":0.003,"P\\Tests\\Feature\\Tags\\TwitterCardSummaryTagsTest::__pest_evaluable_it_will_not_render_the_Twitter_Card_summary__large__image_for_too_large_or_small_images#('images\/twitter-4721x4721.jpg')":0.003,"P\\Tests\\Feature\\Tags\\TwitterCardSummaryTagsTest::__pest_evaluable_it_will_escape_the_title":0.003,"P\\Tests\\Feature\\Tags\\TwitterCardSummaryTagsTest::__pest_evaluable_it_can_correctly_render_the_Twitter_Card_summary_without_the_image":0.002,"P\\Tests\\Feature\\Tags\\FaviconTagTest::__pest_evaluable_it_will_render_the_favicon_if_the_favicon_is_set":0.002,"P\\Tests\\Feature\\Tags\\FaviconTagTest::__pest_evaluable_it_will_not_render_the_favicon_if_the_favicon_is_set_to_null":0.002,"P\\Tests\\Unit\\SEOManagerTest::__pest_evaluable_the_SEOManager_singleton_works_as_expected":0,"P\\Tests\\Feature\\Tags\\AlternateTagTest::__pest_evaluable_it_will_not_display_the_aternates_tags_if_there_isn_t_any_alternate":0.001,"P\\Tests\\Feature\\Tags\\AlternateTagTest::__pest_evaluable_it_will_display_the_alternates_links_if_the_associated_SEO_model_has_alternates_links":0.003,"P\\Tests\\Unit\\HelpersTest::__pest_evaluable_it_can_get_the_TagManager_with_a_SEOData_data_object":0.006,"P\\Tests\\Unit\\HelpersTest::__pest_evaluable_it_can_get_the_TagManager":0,"P\\Tests\\Unit\\HelpersTest::__pest_evaluable_it_can_get_the_TagManager_with_and_without_a_model":0.011,"P\\Tests\\Feature\\Tags\\TitleTagTest::__pest_evaluable_it_will_infer_the_title_from_the_url_if_that_is_allowed":0.002,"P\\Tests\\Feature\\Tags\\TitleTagTest::__pest_evaluable_it_will_escape_the_title":0.002,"P\\Tests\\Feature\\Tags\\TitleTagTest::__pest_evaluable_it_will_display_the_title_if_the_associated_SEO_model_has_a_title":0.002,"P\\Tests\\Feature\\Tags\\TitleTagTest::__pest_evaluable_it_will_infer_the_title_from_the_url_if_that_is_allowed_and_the_model_doesn_t_return_a_title":0.003,"P\\Tests\\Feature\\Tags\\TitleTagTest::__pest_evaluable_it_will_not_infer_the_title_from_the_url_if_that_isn_t_allowed":0.001,"P\\Tests\\Feature\\JSONLD\\FaqPageTest::__pest_evaluable_it_can_correctly_render_the_JSON_LD_Schema_markup__FaqPageTest":0.002,"P\\Tests\\Feature\\JSONLD\\FaqPageTest::__pest_evaluable_it_does_not_render_by_default_the_JSON_LD_Schema_markup__FaqPageTest":0.002,"P\\Tests\\Unit\\Models\\SEOTest::__pest_evaluable_it_can_add_properties_to_a_SEO_model#('description', 'This is a description')":0.001,"P\\Tests\\Unit\\Models\\SEOTest::__pest_evaluable_it_can_add_properties_to_a_SEO_model#('title', 'My Cool Page Title')":0.001,"P\\Tests\\Unit\\Models\\SEOTest::__pest_evaluable_it_can_have_immutable_timestamps":0.001,"P\\Tests\\Unit\\Models\\SEOTest::__pest_evaluable_it_can_override_certain_SEO_Data#('title', 'My Cool Page Title')":0.001,"P\\Tests\\Unit\\Models\\SEOTest::__pest_evaluable_it_can_override_certain_SEO_Data#('description', 'This is a description')":0.001,"P\\Tests\\Unit\\Models\\SEOTest::__pest_evaluable_it_can_morph_a_model_to_the_SEO_model":0.001,"P\\Tests\\Unit\\Models\\SEOTest::__pest_evaluable_it_can_disable_the_suffix_in_the_page_model":0.001,"P\\Tests\\Unit\\Models\\SEOTest::__pest_evaluable_it_can_give_the_title_of_a_page_a_suffix_it_was_specified":0.001,"P\\Tests\\Unit\\Models\\SEOTest::__pest_evaluable_it_can_disable_the_suffix_in_the_page_model_dynamically_via_a_function":0.001,"P\\Tests\\Unit\\Models\\SEOTest::__pest_evaluable_it_can_prepare_the_SEO_for_use_on_a_page":0.001,"P\\Tests\\Feature\\Tags\\RobotsTagTest::__pest_evaluable_it_cannot_overwrite_the_robots_tag__default__value_with_the_robots_attribute_if__force__default__is_set__DB_Model_":0.003,"P\\Tests\\Feature\\Tags\\RobotsTagTest::__pest_evaluable_it_can_overwrite_the_robots_tag__default__value_with_the_robots_attribute__DB_Model_":0.003,"P\\Tests\\Feature\\Tags\\RobotsTagTest::__pest_evaluable_it_cannot_overwrite_the_robots_tag__default__value_with_the_robots_attribute_if__force__default__is_set__SEOData_":0.001,"P\\Tests\\Feature\\Tags\\RobotsTagTest::__pest_evaluable_it_can_overwrite_the_robots_tag__default__value_with_the_robots_attribute__SEOData_":0.001,"P\\Tests\\Feature\\Tags\\RobotsTagTest::__pest_evaluable_it_can_output_the_robots_tag__default__value":0.002,"P\\Tests\\Feature\\TagManagerTest::__pest_evaluable_it_can_replace_the_title_if_we_re_on_the_homepage#('Custom homepage title', 'Custom homepage title')":0.002,"P\\Tests\\Feature\\TagManagerTest::__pest_evaluable_it_can_replace_the_title_if_we_re_on_the_homepage#(null, '| My Website suffix')":0.001,"P\\Tests\\Feature\\TagManagerTest::__pest_evaluable_it_can_pipe_the_generated_tags_through_the_transformers_just_before_render":0.001,"P\\Tests\\Feature\\TagManagerTest::__pest_evaluable_it_can_pipe_the_SEOData_through_the_transformer_before_putting_it_into_the_collection":0.002,"P\\Tests\\Feature\\TagManagerTest::__pest_evaluable_can_render_the_SEOData_from_an_object_that_s_directly_passed_in":0.001,"P\\Tests\\Feature\\Tags\\OpenGraphTagsTest::__pest_evaluable_it_uses_openGraphTitle_over_title":0.003,"P\\Tests\\Feature\\Tags\\OpenGraphTagsTest::__pest_evaluable_it_can_correctly_render_OpenGraph_tags_for_a_post_or_page_with_a_few_additional_overrides":0.003,"P\\Tests\\Feature\\Tags\\OpenGraphTagsTest::__pest_evaluable_it_will_escape_the_title":0.003,"P\\Tests\\Feature\\Tags\\OpenGraphTagsTest::__pest_evaluable_it_can_correctly_render_OpenGraph_tags":0.002,"P\\Tests\\Feature\\Tags\\OpenGraphTagsTest::__pest_evaluable_it_can_correctly_render_OpenGraph_tags_for_a_post_or_page":0.005,"P\\Tests\\Feature\\Tags\\OpenGraphTagsTest::__pest_evaluable_it_can_correctly_render_locale_tags":0.002,"P\\Tests\\Unit\\Support\\TagTest::__pest_evaluable_it_orders_tag_attributes":0.022,"P\\Tests\\Unit\\Schema\\CustomSchemaTest::__pest_evaluable_it_can_construct_a_custom_faq_schema":0.001,"P\\Tests\\Feature\\JSONLD\\SchemaCollectionTest::__pest_evaluable_it_can_correctly_render_multiple_custom_JSON_LD_Schemas_markup":0.003,"P\\Tests\\Feature\\JSONLD\\SchemaCollectionTest::__pest_evaluable_it_can_correctly_render_the_JSON_LD_Schema_markup__FaqPage":0.002,"P\\Tests\\Feature\\JSONLD\\SchemaCollectionTest::__pest_evaluable_it_can_correctly_render_a_custom_JSON_LD_Schemas_markup":0.002,"P\\Tests\\Feature\\JSONLD\\SchemaCollectionTest::__pest_evaluable_it_can_correctly_render_a_custom_JSON_LD_Schemas_markup_from_a_function":0.002,"P\\Tests\\Feature\\JSONLD\\SchemaCollectionTest::__pest_evaluable_it_can_correctly_render_the_JSON_LD_Schema_markup__BreadcrumbList":0.003,"P\\Tests\\Feature\\JSONLD\\SchemaCollectionTest::__pest_evaluable_it_can_correctly_render_the_JSON_LD_Schema_markup__Article":0.003}}
\ No newline at end of file
diff --git a/src/Support/AlternateTag.php b/src/Support/AlternateTag.php
index 05bc7a9..259c9f5 100644
--- a/src/Support/AlternateTag.php
+++ b/src/Support/AlternateTag.php
@@ -9,6 +9,7 @@ public function __construct(
string $href,
) {
parent::__construct('alternate', $href);
+
$this->attributes['hreflang'] = $hreflang;
}
}
diff --git a/src/Support/SchemaTagCollection.php b/src/Support/SchemaTagCollection.php
index 1f90de8..9dff9ba 100644
--- a/src/Support/SchemaTagCollection.php
+++ b/src/Support/SchemaTagCollection.php
@@ -21,9 +21,7 @@ public static function initialize(?SEOData $SEOData = null): ?static
$collection = new static();
foreach ($schemas as $schema) {
- $collection->push(
- new CustomSchema(value($schema, $SEOData))
- );
+ $collection->push(new CustomSchema(value($schema, $SEOData)));
}
foreach ($schemas->markup as $markupClass => $markupBuilders) {
diff --git a/src/Support/Tag.php b/src/Support/Tag.php
index 25a6191..43f257d 100644
--- a/src/Support/Tag.php
+++ b/src/Support/Tag.php
@@ -7,9 +7,6 @@
use Illuminate\Support\Collection;
use Illuminate\Support\HtmlString;
-/**
- * A representation of a HTML tag
- */
abstract class Tag implements Renderable
{
const ATTRIBUTES_ORDER = ['rel', 'hreflang', 'title', 'name', 'href', 'property', 'description', 'content'];
diff --git a/tests/Feature/JSON-LD/SchemaCollectionTest.php b/tests/Feature/JSON-LD/SchemaCollectionTest.php
index 1e7a773..e1d0aee 100644
--- a/tests/Feature/JSON-LD/SchemaCollectionTest.php
+++ b/tests/Feature/JSON-LD/SchemaCollectionTest.php
@@ -13,7 +13,26 @@
it('can correctly render a custom JSON-LD Schemas markup', function () {
$page = Page::create([]);
- $faqPageSchema = $this->faqTestSchema;
+ $faqPageSchema = [
+ '@context' => 'https://schema.org',
+ '@type' => 'FAQPage',
+ 'mainEntity' => [
+ '@type' => 'Question',
+ 'name' => 'Can this package add FaqPage to the schema?',
+ 'acceptedAnswer' => [
+ '@type' => 'Answer',
+ 'text' => 'Yes!',
+ ],
+ ],
+ [
+ '@type' => 'Question',
+ 'name' => 'Does it support multiple questions?',
+ 'acceptedAnswer' => [
+ '@type' => 'Answer',
+ 'text' => 'Of course.',
+ ],
+ ],
+ ];
$page::$overrides = [
'schema' => SchemaCollection::make()->add($faqPageSchema),
@@ -246,7 +265,26 @@
it('can correctly render multiple custom JSON-LD Schemas markup', function () {
$page = Page::create([]);
- $faqPageSchema = $this->faqTestSchema;
+ $faqPageSchema = [
+ '@context' => 'https://schema.org',
+ '@type' => 'FAQPage',
+ 'mainEntity' => [
+ '@type' => 'Question',
+ 'name' => 'Can this package add FaqPage to the schema?',
+ 'acceptedAnswer' => [
+ '@type' => 'Answer',
+ 'text' => 'Yes!',
+ ],
+ ],
+ [
+ '@type' => 'Question',
+ 'name' => 'Does it support multiple questions?',
+ 'acceptedAnswer' => [
+ '@type' => 'Answer',
+ 'text' => 'Of course.',
+ ],
+ ],
+ ];
$now = now();
$yesterday = now()->yesterday();
diff --git a/tests/TestCase.php b/tests/TestCase.php
index 36bca20..32cdbb4 100644
--- a/tests/TestCase.php
+++ b/tests/TestCase.php
@@ -9,27 +9,6 @@
class TestCase extends Orchestra
{
- public array $faqTestSchema = [
- '@context' => 'https://schema.org',
- '@type' => 'FAQPage',
- 'mainEntity' => [
- '@type' => 'Question',
- 'name' => 'Can this package add FaqPage to the schema?',
- 'acceptedAnswer' => [
- '@type' => 'Answer',
- 'text' => 'Yes!',
- ],
- ],
- [
- '@type' => 'Question',
- 'name' => 'Does it support multiple questions?',
- 'acceptedAnswer' => [
- '@type' => 'Answer',
- 'text' => 'Of course.',
- ],
- ],
- ];
-
protected function setUp(): void
{
parent::setUp();
diff --git a/tests/Unit/Schema/CustomSchemaTest.php b/tests/Unit/Schema/CustomSchemaTest.php
index 89f7232..26626f1 100644
--- a/tests/Unit/Schema/CustomSchemaTest.php
+++ b/tests/Unit/Schema/CustomSchemaTest.php
@@ -3,10 +3,48 @@
use RalphJSmit\Laravel\SEO\Schema\CustomSchema;
it('can construct a custom faq schema', function () {
- $schema = new CustomSchema($this->faqTestSchema);
+ $schema = new CustomSchema([
+ '@context' => 'https://schema.org',
+ '@type' => 'FAQPage',
+ 'mainEntity' => [
+ '@type' => 'Question',
+ 'name' => 'Can this package add FaqPage to the schema?',
+ 'acceptedAnswer' => [
+ '@type' => 'Answer',
+ 'text' => 'Yes!',
+ ],
+ ],
+ [
+ '@type' => 'Question',
+ 'name' => 'Does it support multiple questions?',
+ 'acceptedAnswer' => [
+ '@type' => 'Answer',
+ 'text' => 'Of course.',
+ ],
+ ],
+ ]);
expect((string) $schema->render())
->toBe(
- ''
+ ''
);
});