diff --git a/lighthouse-core/audits/seo/canonical.js b/lighthouse-core/audits/seo/canonical.js index b0032aed2a65..a4ddc0877942 100644 --- a/lighthouse-core/audits/seo/canonical.js +++ b/lighthouse-core/audits/seo/canonical.js @@ -10,6 +10,16 @@ const LinkHeader = require('http-link-header'); const URL = require('../../lib/url-shim'); const MainResource = require('../../computed/main-resource.js'); const LINK_HEADER = 'link'; +const i18n = require('../../lib/i18n/i18n.js'); + +const UIStrings = { + title: 'Document has a valid `rel=canonical`', + failureTitle: 'Document does not have a valid `rel=canonical`', + description: 'Canonical links suggest which URL to show in search results. ' + + '[Learn more](https://developers.google.com/web/tools/lighthouse/audits/canonical).', +} + +const str_ = i18n.createMessageInstanceIdFn(__filename, UIStrings); /** * @param {string} headerValue @@ -62,10 +72,9 @@ class Canonical extends Audit { static get meta() { return { id: 'canonical', - title: 'Document has a valid `rel=canonical`', - failureTitle: 'Document does not have a valid `rel=canonical`', - description: 'Canonical links suggest which URL to show in search results. ' + - '[Learn more](https://developers.google.com/web/tools/lighthouse/audits/canonical).', + title: str_(UIStrings.title), + failureTitle: str_(UIStrings.failureTitle), + description: str_(UIStrings.description), requiredArtifacts: ['Canonical', 'Hreflang', 'URL'], }; } @@ -175,3 +184,4 @@ class Canonical extends Audit { } module.exports = Canonical; +module.exports.UIStrings = UIStrings; \ No newline at end of file diff --git a/lighthouse-core/audits/seo/hreflang.js b/lighthouse-core/audits/seo/hreflang.js index 2c1784171391..a1e77d8a2b00 100644 --- a/lighthouse-core/audits/seo/hreflang.js +++ b/lighthouse-core/audits/seo/hreflang.js @@ -11,6 +11,17 @@ const MainResource = require('../../computed/main-resource.js'); const VALID_LANGS = importValidLangs(); const LINK_HEADER = 'link'; const NO_LANGUAGE = 'x-default'; +const i18n = require('../../lib/i18n/i18n.js'); + +const UIStrings = { + title: 'Document has a valid `hreflang`', + failureTitle: 'Document doesn\'t have a valid `hreflang`', + description: 'hreflang links tell search engines what version of a page they should ' + + 'list in search results for a given language or region. [Learn more]' + + '(https://developers.google.com/web/tools/lighthouse/audits/hreflang).', +} + +const str_ = i18n.createMessageInstanceIdFn(__filename, UIStrings); /** * Import list of valid languages from axe core without including whole axe-core package @@ -65,11 +76,9 @@ class Hreflang extends Audit { static get meta() { return { id: 'hreflang', - title: 'Document has a valid `hreflang`', - failureTitle: 'Document doesn\'t have a valid `hreflang`', - description: 'hreflang links tell search engines what version of a page they should ' + - 'list in search results for a given language or region. [Learn more]' + - '(https://developers.google.com/web/tools/lighthouse/audits/hreflang).', + title: str_(UIStrings.title), + failureTitle: str_(UIStrings.failureTitle), + description: str_(UIStrings.description), requiredArtifacts: ['Hreflang', 'URL'], }; } @@ -119,3 +128,4 @@ class Hreflang extends Audit { } module.exports = Hreflang; +module.exports.UIStrings = UIStrings; \ No newline at end of file diff --git a/lighthouse-core/audits/seo/http-status-code.js b/lighthouse-core/audits/seo/http-status-code.js index cf80dc5252ab..a3cdb17f6cd0 100644 --- a/lighthouse-core/audits/seo/http-status-code.js +++ b/lighthouse-core/audits/seo/http-status-code.js @@ -9,6 +9,17 @@ const Audit = require('../audit'); const MainResource = require('../../computed/main-resource.js'); const HTTP_UNSUCCESSFUL_CODE_LOW = 400; const HTTP_UNSUCCESSFUL_CODE_HIGH = 599; +const i18n = require('../../lib/i18n/i18n.js'); + +const UIStrings = { + title: 'Page has successful HTTP status code', + failureTitle: 'Page has unsuccessful HTTP status code', + description: 'Pages with unsuccessful HTTP status codes may not be indexed properly. ' + + '[Learn more]' + + '(https://developers.google.com/web/tools/lighthouse/audits/successful-http-code).', +} + +const str_ = i18n.createMessageInstanceIdFn(__filename, UIStrings); class HTTPStatusCode extends Audit { /** @@ -17,11 +28,9 @@ class HTTPStatusCode extends Audit { static get meta() { return { id: 'http-status-code', - title: 'Page has successful HTTP status code', - failureTitle: 'Page has unsuccessful HTTP status code', - description: 'Pages with unsuccessful HTTP status codes may not be indexed properly. ' + - '[Learn more]' + - '(https://developers.google.com/web/tools/lighthouse/audits/successful-http-code).', + title: str_(UIStrings.title), + failureTitle: str_(UIStrings.failureTitle), + description: str_(UIStrings.description), requiredArtifacts: ['devtoolsLogs', 'URL'], }; } @@ -55,3 +64,4 @@ class HTTPStatusCode extends Audit { } module.exports = HTTPStatusCode; +module.exports.UIStrings = UIStrings; \ No newline at end of file diff --git a/lighthouse-core/audits/seo/is-crawlable.js b/lighthouse-core/audits/seo/is-crawlable.js index 12454799f3d8..36f78733568e 100644 --- a/lighthouse-core/audits/seo/is-crawlable.js +++ b/lighthouse-core/audits/seo/is-crawlable.js @@ -15,6 +15,17 @@ const BLOCKLIST = new Set([ ]); const ROBOTS_HEADER = 'x-robots-tag'; const UNAVAILABLE_AFTER = 'unavailable_after'; +const i18n = require('../../lib/i18n/i18n.js'); + +const UIStrings = { + title: 'Page isn’t blocked from indexing', + failureTitle: 'Page is blocked from indexing', + description: 'Search engines are unable to include your pages in search results ' + + 'if they don\'t have permission to crawl them. [Learn ' + + 'more](https://developers.google.com/web/tools/lighthouse/audits/indexing).', +} + +const str_ = i18n.createMessageInstanceIdFn(__filename, UIStrings); /** * Checks if given directive is a valid unavailable_after directive with a date in the past @@ -64,11 +75,9 @@ class IsCrawlable extends Audit { static get meta() { return { id: 'is-crawlable', - title: 'Page isn’t blocked from indexing', - failureTitle: 'Page is blocked from indexing', - description: 'Search engines are unable to include your pages in search results ' + - 'if they don\'t have permission to crawl them. [Learn ' + - 'more](https://developers.google.com/web/tools/lighthouse/audits/indexing).', + title: str_(UIStrings.title), + failureTitle: str_(UIStrings.failureTitle), + description: str_(UIStrings.description), requiredArtifacts: ['MetaElements', 'RobotsTxt', 'URL'], }; } @@ -134,3 +143,4 @@ class IsCrawlable extends Audit { } module.exports = IsCrawlable; +module.exports.UIStrings = UIStrings; diff --git a/lighthouse-core/audits/seo/link-text.js b/lighthouse-core/audits/seo/link-text.js index d979e96fe13e..8f08826ab11e 100644 --- a/lighthouse-core/audits/seo/link-text.js +++ b/lighthouse-core/audits/seo/link-text.js @@ -18,6 +18,16 @@ const BLOCKLIST = new Set([ 'more', 'learn more', ]); +const i18n = require('../../lib/i18n/i18n.js'); + +const UIStrings = { + title: 'Links have descriptive text', + failureTitle: 'Links do not have descriptive text', + description: 'Descriptive link text helps search engines understand your content. ' + + '[Learn more](https://developers.google.com/web/tools/lighthouse/audits/descriptive-link-text).', +} + +const str_ = i18n.createMessageInstanceIdFn(__filename, UIStrings); class LinkText extends Audit { /** @@ -26,10 +36,9 @@ class LinkText extends Audit { static get meta() { return { id: 'link-text', - title: 'Links have descriptive text', - failureTitle: 'Links do not have descriptive text', - description: 'Descriptive link text helps search engines understand your content. ' + - '[Learn more](https://developers.google.com/web/tools/lighthouse/audits/descriptive-link-text).', + title: str_(UIStrings.title), + failureTitle: str_(UIStrings.failureTitle), + description: str_(UIStrings.description), requiredArtifacts: ['URL', 'CrawlableLinks'], }; } @@ -81,3 +90,4 @@ class LinkText extends Audit { } module.exports = LinkText; +module.exports.UIStrings = UIStrings; \ No newline at end of file diff --git a/lighthouse-core/audits/seo/meta-description.js b/lighthouse-core/audits/seo/meta-description.js index cc9c93c5545a..76b4f37b1cee 100644 --- a/lighthouse-core/audits/seo/meta-description.js +++ b/lighthouse-core/audits/seo/meta-description.js @@ -6,6 +6,17 @@ 'use strict'; const Audit = require('../audit'); +const i18n = require('../../lib/i18n/i18n.js'); + +const UIStrings = { + title: 'Document has a meta description', + failureTitle: 'Document does not have a meta description', + description: 'Meta descriptions may be included in search results to concisely summarize ' + + 'page content. ' + + '[Learn more](https://developers.google.com/web/tools/lighthouse/audits/description).', +} + +const str_ = i18n.createMessageInstanceIdFn(__filename, UIStrings); class Description extends Audit { /** @@ -14,11 +25,9 @@ class Description extends Audit { static get meta() { return { id: 'meta-description', - title: 'Document has a meta description', - failureTitle: 'Document does not have a meta description', - description: 'Meta descriptions may be included in search results to concisely summarize ' + - 'page content. ' + - '[Learn more](https://developers.google.com/web/tools/lighthouse/audits/description).', + title: str_(UIStrings.title), + failureTitle: str_(UIStrings.failureTitle), + description: str_(UIStrings.description), requiredArtifacts: ['MetaElements'], }; } @@ -50,3 +59,4 @@ class Description extends Audit { } module.exports = Description; +module.exports.UIStrings = UIStrings; diff --git a/lighthouse-core/audits/seo/plugins.js b/lighthouse-core/audits/seo/plugins.js index 30eff7e93adf..7c56a6239537 100644 --- a/lighthouse-core/audits/seo/plugins.js +++ b/lighthouse-core/audits/seo/plugins.js @@ -31,6 +31,17 @@ const SOURCE_PARAMS = new Set([ 'source', 'src', ]); +const i18n = require('../../lib/i18n/i18n.js'); + +const UIStrings = { + title: 'Document avoids plugins', + failureTitle: 'Document uses plugins', + description: 'Search engines can\'t index plugin content, and ' + + 'many devices restrict plugins or don\'t support them. ' + + '[Learn more](https://developers.google.com/web/tools/lighthouse/audits/plugins).', +} + +const str_ = i18n.createMessageInstanceIdFn(__filename, UIStrings); /** * Verifies if given MIME type matches any known plugin MIME type @@ -73,11 +84,9 @@ class Plugins extends Audit { static get meta() { return { id: 'plugins', - title: 'Document avoids plugins', - failureTitle: 'Document uses plugins', - description: 'Search engines can\'t index plugin content, and ' + - 'many devices restrict plugins or don\'t support them. ' + - '[Learn more](https://developers.google.com/web/tools/lighthouse/audits/plugins).', + title: str_(UIStrings.title), + failureTitle: str_(UIStrings.failureTitle), + description: str_(UIStrings.description), requiredArtifacts: ['EmbeddedContent'], }; } @@ -154,3 +163,4 @@ class Plugins extends Audit { } module.exports = Plugins; +module.exports.UIStrings = UIStrings; \ No newline at end of file diff --git a/lighthouse-core/audits/seo/robots-txt.js b/lighthouse-core/audits/seo/robots-txt.js index bc7cdd25ede6..ae55e7bc27f2 100644 --- a/lighthouse-core/audits/seo/robots-txt.js +++ b/lighthouse-core/audits/seo/robots-txt.js @@ -31,6 +31,16 @@ const DIRECTIVE_SAFELIST = new Set([ 'request-rate', 'visit-time', 'noindex', // not officially supported, but used in the wild ]); const SITEMAP_VALID_PROTOCOLS = new Set(['https:', 'http:', 'ftp:']); +const i18n = require('../../lib/i18n/i18n.js'); + +const UIStrings = { + title: 'robots.txt is valid', + failureTitle: 'robots.txt is not valid', + description: 'If your robots.txt file is malformed, crawlers may not be able to understand ' + + 'how you want your website to be crawled or indexed.', +} + +const str_ = i18n.createMessageInstanceIdFn(__filename, UIStrings); /** * @param {string} directiveName @@ -161,10 +171,9 @@ class RobotsTxt extends Audit { static get meta() { return { id: 'robots-txt', - title: 'robots.txt is valid', - failureTitle: 'robots.txt is not valid', - description: 'If your robots.txt file is malformed, crawlers may not be able to understand ' + - 'how you want your website to be crawled or indexed.', + title: str_(UIStrings.title), + failureTitle: str_(UIStrings.failureTitle), + description: str_(UIStrings.description), requiredArtifacts: ['RobotsTxt'], }; } @@ -228,3 +237,4 @@ class RobotsTxt extends Audit { } module.exports = RobotsTxt; +module.exports.UIStrings = UIStrings; \ No newline at end of file diff --git a/lighthouse-core/audits/seo/tap-targets.js b/lighthouse-core/audits/seo/tap-targets.js index d71dbe38581a..e8867323f6ce 100644 --- a/lighthouse-core/audits/seo/tap-targets.js +++ b/lighthouse-core/audits/seo/tap-targets.js @@ -24,7 +24,17 @@ const FINGER_SIZE_PX = 48; // to the finger area tapping on the intended element const MAX_ACCEPTABLE_OVERLAP_SCORE_RATIO = 0.25; +const i18n = require('../../lib/i18n/i18n.js'); + +const UIStrings = { + title: 'Tap targets are sized appropriately', + failureTitle: 'Tap targets are not sized appropriately', + description:'Interactive elements like buttons and links should be large enough (48x48px), and have enough space around them,' + + 'to be easy enough to tap without overlapping onto other elements. ' + + '[Learn more](https://developers.google.com/web/fundamentals/accessibility/accessible-styles#multi-device_responsive_design).', +} +const str_ = i18n.createMessageInstanceIdFn(__filename, UIStrings); /** * @param {LH.Artifacts.Rect} cr */ @@ -244,10 +254,9 @@ class TapTargets extends Audit { static get meta() { return { id: 'tap-targets', - title: 'Tap targets are sized appropriately', - failureTitle: 'Tap targets are not sized appropriately', - description: - 'Interactive elements like buttons and links should be large enough (48x48px), and have enough space around them, to be easy enough to tap without overlapping onto other elements. [Learn more](https://developers.google.com/web/fundamentals/accessibility/accessible-styles#multi-device_responsive_design).', + title: str_(UIStrings.title), + failureTitle: str_(UIStrings.failureTitle), + description: str_(UIStrings.description), requiredArtifacts: ['MetaElements', 'TapTargets'], }; } @@ -298,7 +307,7 @@ class TapTargets extends Audit { TapTargets.FINGER_SIZE_PX = FINGER_SIZE_PX; module.exports = TapTargets; - +module.exports.UIStrings = UIStrings; /** @typedef {{ overlapScoreRatio: number; diff --git a/lighthouse-core/lib/i18n/en-US.json b/lighthouse-core/lib/i18n/en-US.json index dd83a7ce4455..921b13dcae3c 100644 --- a/lighthouse-core/lib/i18n/en-US.json +++ b/lighthouse-core/lib/i18n/en-US.json @@ -1,4 +1,85 @@ { + "lighthouse-core/audits/seo/tap-targets.js | description": { + "message": "Interactive elements like buttons and links should be large enough (48x48px), and have enough space around them, to be easy enough to tap without overlapping onto other elements. [Learn more](https://developers.google.com/web/fundamentals/accessibility/accessible-styles#multi-device_responsive_design)." + }, + "lighthouse-core/audits/seo/tap-targets.js | failureTitle": { + "message": "Tap targets are not sized appropriately" + }, + "lighthouse-core/audits/seo/tap-targets.js | title": { + "message": "Tap targets are sized appropriately" + }, + "lighthouse-core/audits/seo/robots-txt.js | description": { + "message": "If your robots.txt file is malformed, crawlers may not be able to understand how you want your website to be crawled or indexed." + }, + "lighthouse-core/audits/seo/robots-txt.js | failureTitle": { + "message": "robots.txt is not valid" + }, + "lighthouse-core/audits/seo/robots-txt.js | title": { + "message": "robots.txt is valid" + }, + "lighthouse-core/audits/seo/plugins.js | description": { + "message": "Search engines can't index plugin content, and many devices restrict plugins or don't support them. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/plugins)." + }, + "lighthouse-core/audits/seo/plugins.js | failureTitle": { + "message": "Document uses plugins" + }, + "lighthouse-core/audits/seo/plugins.js | title": { + "message": "Document avoids plugins" + }, + "lighthouse-core/audits/seo/meta-description.js | description": { + "message": "Meta descriptions may be included in search results to concisely summarize page content. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/description)." + }, + "lighthouse-core/audits/seo/meta-description.js | failureTitle": { + "message": "Document does not have a meta description" + }, + "lighthouse-core/audits/seo/meta-description.js | title": { + "message": "Document has a meta description" + }, + "lighthouse-core/audits/seo/link-text.js | description": { + "message": "Descriptive link text helps search engines understand your content. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/descriptive-link-text)." + }, + "lighthouse-core/audits/seo/link-text.js | failureTitle": { + "message": "Links do not have descriptive text" + }, + "lighthouse-core/audits/seo/link-text.js | title": { + "message": "Links have descriptive text" + }, + "lighthouse-core/audits/seo/is-crawlable.js | description": { + "message": "Search engines are unable to include your pages in search results if they don't have permission to crawl them. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/indexing)." + }, + "lighthouse-core/audits/seo/is-crawlable.js | failureTitle": { + "message": "Page is blocked from indexing" + }, + "lighthouse-core/audits/seo/is-crawlable.js | title": { + "message": "Page isn’t blocked from indexing" + }, + "lighthouse-core/audits/seo/http-status-code.js | description": { + "message": "Pages with unsuccessful HTTP status codes may not be indexed properly. [Learn more] (https://developers.google.com/web/tools/lighthouse/audits/successful-http-code)" + }, + "lighthouse-core/audits/seo/http-status-code.js | failureTitle": { + "message": "Page has unsuccessful HTTP status code" + }, + "lighthouse-core/audits/seo/http-status-code.js | title": { + "message": "Page has successful HTTP status code" + }, + "lighthouse-core/audits/seo/hreflang.js | description": { + "message": "hreflang links tell search engines what version of a page they should list in search results for a given language or region. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/hreflang)." + }, + "lighthouse-core/audits/seo/hreflang.js | failureTitle": { + "message": "Document doesn't have a valid `hreflang`" + }, + "lighthouse-core/audits/seo/hreflang.js | title": { + "message": "Document has a valid `hreflang`" + }, + "lighthouse-core/audits/seo/canonical.js | description": { + "message": "Canonical links suggest which URL to show in search results. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/canonical)." + }, + "lighthouse-core/audits/seo/canonical.js | failureTitle": { + "message": "Document does not have a valid `rel=canonical`" + }, + "lighthouse-core/audits/seo/canonical.js | title": { + "message": "Document has a valid `rel=canonical`" + }, "lighthouse-core/audits/accessibility/aria-allowed-attr.js | description": { "message": "Each ARIA `role` supports a specific subset of `aria-*` attributes. Mismatching these invalidates the `aria-*` attributes. [Learn more](https://dequeuniversity.com/rules/axe/3.1/aria-allowed-attr?application=lighthouse).", "description": "Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. 'Learn More' becomes link text to additional documentation." diff --git a/lighthouse-core/lib/i18n/locales/pl.json b/lighthouse-core/lib/i18n/locales/pl.json index e12c43c3e09d..adb068fb4ec5 100644 --- a/lighthouse-core/lib/i18n/locales/pl.json +++ b/lighthouse-core/lib/i18n/locales/pl.json @@ -1,4 +1,85 @@ { + "lighthouse-core/audits/seo/tap-targets.js | description": { + "message": "Elementy interaktywne, takie jak przyciski i łącza, powinny być wystarczająco duże (48 x 48 pikseli) i mieć wystarczająco dużo miejsca wokół nich, być łatwym do dotknięcia bez nakładania się na inne elementy. [Więcej informacji](https://developers.google.com/web/fundamentals/accessibility/accessible-styles#multi-device_responsive_design)." + }, + "lighthouse-core/audits/seo/tap-targets.js | failureTitle": { + "message": "Elementy dotykowe mają nieodpowiedni rozmiar" + }, + "lighthouse-core/audits/seo/tap-targets.js | title": { + "message": "Elementy dotykowe mają odpowiedni rozmiar" + }, + "lighthouse-core/audits/seo/robots-txt.js | description": { + "message": "Jeśli plik robots.txt jest zniekształcony, roboty mogą nie być w stanie zrozumieć, w jaki sposób ma zostać zaindeksowane lub zaindeksowane witryna." + }, + "lighthouse-core/audits/seo/robots-txt.js | failureTitle": { + "message": "Plik robots.txt nie jest prawidłowy" + }, + "lighthouse-core/audits/seo/robots-txt.js | title": { + "message": "Plik robots.txt jest prawidłowy" + }, + "lighthouse-core/audits/seo/plugins.js | description": { + "message": "Wyszukiwarki nie mogą indeksować treści wtyczek, a wiele urządzeń ogranicza wtyczki lub ich nie obsługuje.[Więcej informacji](https://developers.google.com/web/tools/lighthouse/audits/plugins)." + }, + "lighthouse-core/audits/seo/plugins.js | failureTitle": { + "message": "Dokument używa wtyczek" + }, + "lighthouse-core/audits/seo/plugins.js | title": { + "message": "Dokument unika wtyczek" + }, + "lighthouse-core/audits/seo/meta-description.js | description": { + "message": "Meta-opisy mogą być zawarte w wynikach wyszukiwania w celu podsumowania zawartości strony.[Więcej informacji](https://developers.google.com/web/tools/lighthouse/audits/description)." + }, + "lighthouse-core/audits/seo/meta-description.js | failureTitle": { + "message": "Dokument nie posiada opis meta" + }, + "lighthouse-core/audits/seo/meta-description.js | title": { + "message": "Dokument posiada opis meta" + }, + "lighthouse-core/audits/seo/link-text.js | description": { + "message": "Opisowy tekst linku ułatwia wyszukiwarkom zrozumienie treści.[Więcej informacji](https://developers.google.com/web/tools/lighthouse/audits/descriptive-link-text)." + }, + "lighthouse-core/audits/seo/link-text.js | failureTitle": { + "message": "Linki nie mają tekstu opisowego" + }, + "lighthouse-core/audits/seo/link-text.js | title": { + "message": "Linki mają opisowy tekst" + }, + "lighthouse-core/audits/seo/is-crawlable.js | description": { + "message": "Wyszukiwarki nie mogą uwzględnić Twoich stron w wynikach wyszukiwania, jeśli nie mają uprawnień do ich zaindeksowania.[Więcej informacji](https://developers.google.com/web/tools/lighthouse/audits/indexing)." + }, + "lighthouse-core/audits/seo/is-crawlable.js | failureTitle": { + "message": "Strona jest zablokowana przed indeksowaniem" + }, + "lighthouse-core/audits/seo/is-crawlable.js | title": { + "message": "Strona nie jest blokowana przed indeksowaniem" + }, + "lighthouse-core/audits/seo/http-status-code.js | description": { + "message": "Strony z nieprawidłowymi kodami statusu HTTP mogą nie być poprawnie indeksowane.[Więcej informacji] (https://developers.google.com/web/tools/lighthouse/audits/successful-http-code)" + }, + "lighthouse-core/audits/seo/http-status-code.js | failureTitle": { + "message": "Strona zwraca nieprawidłowy kod statusu HTTP" + }, + "lighthouse-core/audits/seo/http-status-code.js | title": { + "message": "Strona zwraca odpowiedni kod statusu HTTP" + }, + "lighthouse-core/audits/seo/hreflang.js | description": { + "message": "Linki hreflang informują wyszukiwarki, jaka wersja strony powinna być wyświetlana w wynikach wyszukiwania dla danego języka lub regionu. [Więcej informacji](https://developers.google.com/web/tools/lighthouse/audits/hreflang)." + }, + "lighthouse-core/audits/seo/hreflang.js | failureTitle": { + "message": "Dokument nie posiada prawidłowego `hreflang`" + }, + "lighthouse-core/audits/seo/hreflang.js | title": { + "message": "Dokument posiada prawdiłowy `hreflang`" + }, + "lighthouse-core/audits/seo/canonical.js | description": { + "message": "Kanoniczne linki sugerują, który adres URL wyświetlać w wynikach wyszukiwania. [Więcej informacji](https://developers.google.com/web/tools/lighthouse/audits/canonical)." + }, + "lighthouse-core/audits/seo/canonical.js | failureTitle": { + "message": "Dokument nie posiada prawidłowego `rel=canonical`" + }, + "lighthouse-core/audits/seo/canonical.js | title": { + "message": "Dokument posiada prawidłowy `rel=canonical`" + }, "lighthouse-core/audits/accessibility/accesskeys.js | description": { "message": "Klawisze dostępu umożliwiają szybkie ustawienie fokusu na określonej części strony. Aby nawigacja działała dobrze, każdy klawisz dostępu musi być unikalny. [Więcej informacji](https://dequeuniversity.com/rules/axe/2.2/accesskeys?application=lighthouse)." },