Gerado a 29 de Dezembro de 2025 00:48 AM
Estatísticas desatualizadas? ATUALIZE !
O resultado é de 47/100
Título
Live Outside the Book | Lingco
Cumprimento : 30
Perfeito, o Título contém entre 10 e 70 caracteres.
Descrição
Delivering the next generation of language learning to schools.
Cumprimento : 63
Idealmente, a Descrição META deve conter entre 70 e 160 caracteres (incluíndo espaços).
Palavras-chave
Mau. Não detetámos palavras-chave META na sua página.
Propriedades Og Meta
Boa! Esta página tira vantagens das propriedades Og.
| Propriedade | Conteúdo |
|---|---|
| title | Lingco - Next Generation Language Learning for Schools |
| description | Discover Lingco, the innovative platform revolutionizing language education with adaptive learning and comprehensive tools for educators and students. |
| url | https://www.lingco.io |
| site_name | Lingco |
| locale | en_US |
| image | https://lingco.io/class%20URL%20%7B%20%20#context%20=%20new%20URLContext();%20%20#searchParams;%20%20#searchParamsModified;%20%20static%20{%20%20%20%20setURLSearchParamsModified%20=%20(obj)%20=%3E%20{%20%20%20%20%20%20/%20When%20URLSearchParams%20changes,%20we%20lazily%20update%20URL%20on%20the%20next%20read/write%20for%20performance.%20%20%20%20%20%20obj.#searchParamsModified%20=%20true;%20%20%20%20%20%20/%20If%20URL%20has%20an%20existing%20search,%20remove%20it%20without%20cascading%20back%20to%20URLSearchParams.%20%20%20%20%20%20/%20Do%20this%20to%20avoid%20any%20internal%20confusion%20about%20whether%20URLSearchParams%20or%20URL%20is%20up-to-date.%20%20%20%20%20%20if%20(obj.#context.hasSearch)%20{%20%20%20%20%20%20%20%20obj.#updateContext(bindingUrl.update(obj.#context.href,%20updateActions.kSearch,%20''));%20%20%20%20%20%20}%20%20%20%20};%20%20}%20%20constructor(input,%20base%20=%20undefined,%20parseSymbol%20=%20undefined)%20{%20%20%20%20markTransferMode(this,%20false,%20false);%20%20%20%20if%20(arguments.length%20===%200)%20{%20%20%20%20%20%20throw%20new%20ERR_MISSING_ARGS('url');%20%20%20%20}%20%20%20%20/%20StringPrototypeToWellFormed%20is%20not%20needed.%20%20%20%20input%20=%20%60${input}%60;%20%20%20%20if%20(base%20!==%20undefined)%20{%20%20%20%20%20%20base%20=%20%60${base}%60;%20%20%20%20}%20%20%20%20let%20href;%20%20%20%20if%20(arguments.length%20%3C%203)%20{%20%20%20%20%20%20href%20=%20bindingUrl.parse(input,%20base,%20true);%20%20%20%20}%20else%20{%20%20%20%20%20%20const%20raiseException%20=%20parseSymbol%20!==%20kParseURLSymbol;%20%20%20%20%20%20const%20interpretAsWindowsPath%20=%20parseSymbol%20===%20kCreateURLFromWindowsPathSymbol;%20%20%20%20%20%20const%20pathToFileURL%20=%20interpretAsWindowsPath%20||%20(parseSymbol%20===%20kCreateURLFromPosixPathSymbol);%20%20%20%20%20%20href%20=%20pathToFileURL%20?%20%20%20%20%20%20%20%20bindingUrl.pathToFileURL(input,%20interpretAsWindowsPath,%20base)%20:%20%20%20%20%20%20%20%20bindingUrl.parse(input,%20base,%20raiseException);%20%20%20%20}%20%20%20%20if%20(href)%20{%20%20%20%20%20%20this.#updateContext(href);%20%20%20%20}%20%20}%20%20static%20parse(input,%20base%20=%20undefined)%20{%20%20%20%20if%20(arguments.length%20===%200)%20{%20%20%20%20%20%20throw%20new%20ERR_MISSING_ARGS('url');%20%20%20%20}%20%20%20%20const%20parsedURLObject%20=%20new%20URL(input,%20base,%20kParseURLSymbol);%20%20%20%20return%20parsedURLObject.href%20?%20parsedURLObject%20:%20null;%20%20}%20%20[inspect.custom](depth,%20opts)%20{%20%20%20%20if%20(typeof%20depth%20===%20'number'%20&&%20depth%20%3C%200)%20%20%20%20%20%20return%20this;%20%20%20%20const%20constructor%20=%20getConstructorOf(this)%20||%20URL;%20%20%20%20const%20obj%20=%20{%20__proto__:%20{%20constructor%20}%20};%20%20%20%20obj.href%20=%20this.href;%20%20%20%20obj.origin%20=%20this.origin;%20%20%20%20obj.protocol%20=%20this.protocol;%20%20%20%20obj.username%20=%20this.username;%20%20%20%20obj.password%20=%20this.password;%20%20%20%20obj.host%20=%20this.host;%20%20%20%20obj.hostname%20=%20this.hostname;%20%20%20%20obj.port%20=%20this.port;%20%20%20%20obj.pathname%20=%20this.pathname;%20%20%20%20obj.search%20=%20this.search;%20%20%20%20obj.searchParams%20=%20this.searchParams;%20%20%20%20obj.hash%20=%20this.hash;%20%20%20%20if%20(opts.showHidden)%20{%20%20%20%20%20%20obj[contextForInspect]%20=%20this.#context;%20%20%20%20}%20%20%20%20return%20%60${constructor.name}%20${inspect(obj,%20opts)}%60;%20%20}%20%20#getSearchFromContext()%20{%20%20%20%20if%20(!this.#context.hasSearch)%20return%20'';%20%20%20%20let%20endsAt%20=%20this.#context.href.length;%20%20%20%20if%20(this.#context.hasHash)%20endsAt%20=%20this.#context.hash_start;%20%20%20%20if%20(endsAt%20-%20this.#context.search_start%20%3C=%201)%20return%20'';%20%20%20%20return%20StringPrototypeSlice(this.#context.href,%20this.#context.search_start,%20endsAt);%20%20}%20%20#getSearchFromParams()%20{%20%20%20%20if%20(!this.#searchParams?.size)%20return%20'';%20%20%20%20return%20%60?${this.#searchParams}%60;%20%20}%20%20#ensureSearchParamsUpdated()%20{%20%20%20%20/%20URL%20is%20updated%20lazily%20to%20greatly%20improve%20performance%20when%20URLSearchParams%20is%20updated%20repeatedly.%20%20%20%20/%20If%20URLSearchParams%20has%20been%20modified,%20reflect%20that%20back%20into%20URL,%20without%20cascading%20back.%20%20%20%20if%20(this.#searchParamsModified)%20{%20%20%20%20%20%20this.#searchParamsModified%20=%20false;%20%20%20%20%20%20this.#updateContext(bindingUrl.update(this.#context.href,%20updateActions.kSearch,%20this.#getSearchFromParams()));%20%20%20%20}%20%20}%20%20/**%20%20%20*%20Update%20the%20internal%20context%20state%20for%20URL.%20%20%20*%20@param%20{string}%20href%20New%20href%20string%20from%20%60bindingUrl.update%60.%20%20%20*%20@param%20{boolean}%20[shouldUpdateSearchParams]%20If%20the%20update%20has%20potential%20to%20update%20search%20params%20(href/search).%20%20%20*/%20%20#updateContext(href,%20shouldUpdateSearchParams%20=%20false)%20{%20%20%20%20const%20previousSearch%20=%20shouldUpdateSearchParams%20&&%20this.#searchParams%20&&%20%20%20%20%20%20(this.#searchParamsModified%20?%20this.#getSearchFromParams()%20:%20this.#getSearchFromContext());%20%20%20%20this.#context.href%20=%20href;%20%20%20%20const%20{%20%20%20%20%20%200:%20protocol_end,%20%20%20%20%20%201:%20username_end,%20%20%20%20%20%202:%20host_start,%20%20%20%20%20%203:%20host_end,%20%20%20%20%20%204:%20port,%20%20%20%20%20%205:%20pathname_start,%20%20%20%20%20%206:%20search_start,%20%20%20%20%20%207:%20hash_start,%20%20%20%20%20%208:%20scheme_type,%20%20%20%20}%20=%20bindingUrl.urlComponents;%20%20%20%20this.#context.protocol_end%20=%20protocol_end;%20%20%20%20this.#context.username_end%20=%20username_end;%20%20%20%20this.#context.host_start%20=%20host_start;%20%20%20%20this.#context.host_end%20=%20host_end;%20%20%20%20this.#context.port%20=%20port;%20%20%20%20this.#context.pathname_start%20=%20pathname_start;%20%20%20%20this.#context.search_start%20=%20search_start;%20%20%20%20this.#context.hash_start%20=%20hash_start;%20%20%20%20this.#context.scheme_type%20=%20scheme_type;%20%20%20%20if%20(this.#searchParams)%20{%20%20%20%20%20%20/%20If%20the%20search%20string%20has%20updated,%20URL%20becomes%20the%20source%20of%20truth,%20and%20we%20update%20URLSearchParams.%20%20%20%20%20%20/%20Only%20do%20this%20when%20we're%20expecting%20it%20to%20have%20changed,%20otherwise%20a%20change%20to%20hash%20etc.%20%20%20%20%20%20/%20would%20incorrectly%20compare%20the%20URLSearchParams%20state%20to%20the%20empty%20URL%20search%20state.%20%20%20%20%20%20if%20(shouldUpdateSearchParams)%20{%20%20%20%20%20%20%20%20const%20currentSearch%20=%20this.#getSearchFromContext();%20%20%20%20%20%20%20%20if%20(previousSearch%20!==%20currentSearch)%20{%20%20%20%20%20%20%20%20%20%20setURLSearchParams(this.#searchParams,%20currentSearch);%20%20%20%20%20%20%20%20%20%20this.#searchParamsModified%20=%20false;%20%20%20%20%20%20%20%20}%20%20%20%20%20%20}%20%20%20%20%20%20/%20If%20we%20have%20a%20URLSearchParams,%20ensure%20that%20URL%20is%20up-to-date%20with%20any%20modification%20to%20it.%20%20%20%20%20%20this.#ensureSearchParamsUpdated();%20%20%20%20}%20%20}%20%20toString()%20{%20%20%20%20/%20Updates%20to%20URLSearchParams%20are%20lazily%20propagated%20to%20URL,%20so%20we%20need%20to%20check%20we're%20in%20sync.%20%20%20%20this.#ensureSearchParamsUpdated();%20%20%20%20return%20this.#context.href;%20%20}%20%20get%20href()%20{%20%20%20%20/%20Updates%20to%20URLSearchParams%20are%20lazily%20propagated%20to%20URL,%20so%20we%20need%20to%20check%20we're%20in%20sync.%20%20%20%20this.#ensureSearchParamsUpdated();%20%20%20%20return%20this.#context.href;%20%20}%20%20set%20href(value)%20{%20%20%20%20value%20=%20%60${value}%60;%20%20%20%20const%20href%20=%20bindingUrl.update(this.#context.href,%20updateActions.kHref,%20value);%20%20%20%20if%20(!href)%20{%20throw%20new%20ERR_INVALID_URL(value);%20}%20%20%20%20this.#updateContext(href,%20true);%20%20}%20%20/%20readonly%20%20get%20origin()%20{%20%20%20%20const%20protocol%20=%20StringPrototypeSlice(this.#context.href,%200,%20this.#context.protocol_end);%20%20%20%20/%20Check%20if%20scheme_type%20is%20not%20%60NOT_SPECIAL%60%20%20%20%20if%20(this.#context.scheme_type%20!==%201)%20{%20%20%20%20%20%20/%20Check%20if%20scheme_type%20is%20%60FILE%60%20%20%20%20%20%20if%20(this.#context.scheme_type%20===%206)%20{%20%20%20%20%20%20%20%20return%20'null';%20%20%20%20%20%20}%20%20%20%20%20%20return%20%60${protocol}/${this.host}%60;%20%20%20%20}%20%20%20%20if%20(protocol%20===%20'blob:')%20{%20%20%20%20%20%20const%20path%20=%20this.pathname;%20%20%20%20%20%20if%20(path.length%20%3E%200)%20{%20%20%20%20%20%20%20%20try%20{%20%20%20%20%20%20%20%20%20%20const%20out%20=%20new%20URL(path);%20%20%20%20%20%20%20%20%20%20/%20Only%20return%20origin%20of%20scheme%20is%20%60http%60%20or%20%60https%60%20%20%20%20%20%20%20%20%20%20/%20Otherwise%20return%20a%20new%20opaque%20origin%20(null).%20%20%20%20%20%20%20%20%20%20if%20(out.#context.scheme_type%20===%200%20||%20out.#context.scheme_type%20===%202)%20{%20%20%20%20%20%20%20%20%20%20%20%20return%20%60${out.protocol}/${out.host}%60;%20%20%20%20%20%20%20%20%20%20}%20%20%20%20%20%20%20%20}%20catch%20{%20%20%20%20%20%20%20%20%20%20/%20Do%20nothing.%20%20%20%20%20%20%20%20}%20%20%20%20%20%20}%20%20%20%20}%20%20%20%20return%20'null';%20%20}%20%20get%20protocol()%20{%20%20%20%20return%20StringPrototypeSlice(this.#context.href,%200,%20this.#context.protocol_end);%20%20}%20%20set%20protocol(value)%20{%20%20%20%20const%20href%20=%20bindingUrl.update(this.#context.href,%20updateActions.kProtocol,%20%60${value}%60);%20%20%20%20if%20(href)%20{%20%20%20%20%20%20this.#updateContext(href);%20%20%20%20}%20%20}%20%20get%20username()%20{%20%20%20%20if%20(this.#context.protocol_end%20+%202%20%3C%20this.#context.username_end)%20{%20%20%20%20%20%20return%20StringPrototypeSlice(this.#context.href,%20this.#context.protocol_end%20+%202,%20this.#context.username_end);%20%20%20%20}%20%20%20%20return%20'';%20%20}%20%20set%20username(value)%20{%20%20%20%20const%20href%20=%20bindingUrl.update(this.#context.href,%20updateActions.kUsername,%20%60${value}%60);%20%20%20%20if%20(href)%20{%20%20%20%20%20%20this.#updateContext(href);%20%20%20%20}%20%20}%20%20get%20password()%20{%20%20%20%20if%20(this.#context.host_start%20-%20this.#context.username_end%20%3E%200)%20{%20%20%20%20%20%20return%20StringPrototypeSlice(this.#context.href,%20this.#context.username_end%20+%201,%20this.#context.host_start);%20%20%20%20}%20%20%20%20return%20'';%20%20}%20%20set%20password(value)%20{%20%20%20%20const%20href%20=%20bindingUrl.update(this.#context.href,%20updateActions.kPassword,%20%60${value}%60);%20%20%20%20if%20(href)%20{%20%20%20%20%20%20this.#updateContext(href);%20%20%20%20}%20%20}%20%20get%20host()%20{%20%20%20%20let%20startsAt%20=%20this.#context.host_start;%20%20%20%20if%20(this.#context.href[startsAt]%20===%20'@')%20{%20%20%20%20%20%20startsAt++;%20%20%20%20}%20%20%20%20/%20If%20we%20have%20an%20empty%20host,%20then%20the%20space%20between%20components.host_end%20and%20%20%20%20/%20components.pathname_start%20may%20be%20occupied%20by%20/.%20%20%20%20if%20(startsAt%20===%20this.#context.host_end)%20{%20%20%20%20%20%20return%20'';%20%20%20%20}%20%20%20%20return%20StringPrototypeSlice(this.#context.href,%20startsAt,%20this.#context.pathname_start);%20%20}%20%20set%20host(value)%20{%20%20%20%20const%20href%20=%20bindingUrl.update(this.#context.href,%20updateActions.kHost,%20%60${value}%60);%20%20%20%20if%20(href)%20{%20%20%20%20%20%20this.#updateContext(href);%20%20%20%20}%20%20}%20%20get%20hostname()%20{%20%20%20%20let%20startsAt%20=%20this.#context.host_start;%20%20%20%20/%20host_start%20might%20be%20%22@%22%20if%20the%20URL%20has%20credentials%20%20%20%20if%20(this.#context.href[startsAt]%20===%20'@')%20{%20%20%20%20%20%20startsAt++;%20%20%20%20}%20%20%20%20return%20StringPrototypeSlice(this.#context.href,%20startsAt,%20this.#context.host_end);%20%20}%20%20set%20hostname(value)%20{%20%20%20%20const%20href%20=%20bindingUrl.update(this.#context.href,%20updateActions.kHostname,%20%60${value}%60);%20%20%20%20if%20(href)%20{%20%20%20%20%20%20this.#updateContext(href);%20%20%20%20}%20%20}%20%20get%20port()%20{%20%20%20%20if%20(this.#context.hasPort)%20{%20%20%20%20%20%20return%20%60${this.#context.port}%60;%20%20%20%20}%20%20%20%20return%20'';%20%20}%20%20set%20port(value)%20{%20%20%20%20const%20href%20=%20bindingUrl.update(this.#context.href,%20updateActions.kPort,%20%60${value}%60);%20%20%20%20if%20(href)%20{%20%20%20%20%20%20this.#updateContext(href);%20%20%20%20}%20%20}%20%20get%20pathname()%20{%20%20%20%20let%20endsAt;%20%20%20%20if%20(this.#context.hasSearch)%20{%20%20%20%20%20%20endsAt%20=%20this.#context.search_start;%20%20%20%20}%20else%20if%20(this.#context.hasHash)%20{%20%20%20%20%20%20endsAt%20=%20this.#context.hash_start;%20%20%20%20}%20%20%20%20return%20StringPrototypeSlice(this.#context.href,%20this.#context.pathname_start,%20endsAt);%20%20}%20%20set%20pathname(value)%20{%20%20%20%20const%20href%20=%20bindingUrl.update(this.#context.href,%20updateActions.kPathname,%20%60${value}%60);%20%20%20%20if%20(href)%20{%20%20%20%20%20%20this.#updateContext(href);%20%20%20%20}%20%20}%20%20get%20search()%20{%20%20%20%20/%20Updates%20to%20URLSearchParams%20are%20lazily%20propagated%20to%20URL,%20so%20we%20need%20to%20check%20we're%20in%20sync.%20%20%20%20this.#ensureSearchParamsUpdated();%20%20%20%20return%20this.#getSearchFromContext();%20%20}%20%20set%20search(value)%20{%20%20%20%20const%20href%20=%20bindingUrl.update(this.#context.href,%20updateActions.kSearch,%20StringPrototypeToWellFormed(%60${value}%60));%20%20%20%20if%20(href)%20{%20%20%20%20%20%20this.#updateContext(href,%20true);%20%20%20%20}%20%20}%20%20/%20readonly%20%20get%20searchParams()%20{%20%20%20%20/%20Create%20URLSearchParams%20on%20demand%20to%20greatly%20improve%20the%20URL%20performance.%20%20%20%20if%20(this.#searchParams%20==%20null)%20{%20%20%20%20%20%20this.#searchParams%20=%20new%20URLSearchParams(this.#getSearchFromContext());%20%20%20%20%20%20setURLSearchParamsContext(this.#searchParams,%20this);%20%20%20%20%20%20this.#searchParamsModified%20=%20false;%20%20%20%20}%20%20%20%20return%20this.#searchParams;%20%20}%20%20get%20hash()%20{%20%20%20%20if%20(!this.#context.hasHash%20||%20(this.#context.href.length%20-%20this.#context.hash_start%20%3C=%201))%20{%20%20%20%20%20%20return%20'';%20%20%20%20}%20%20%20%20return%20StringPrototypeSlice(this.#context.href,%20this.#context.hash_start);%20%20}%20%20set%20hash(value)%20{%20%20%20%20const%20href%20=%20bindingUrl.update(this.#context.href,%20updateActions.kHash,%20%60${value}%60);%20%20%20%20if%20(href)%20{%20%20%20%20%20%20this.#updateContext(href);%20%20%20%20}%20%20}%20%20toJSON()%20{%20%20%20%20/%20Updates%20to%20URLSearchParams%20are%20lazily%20propagated%20to%20URL,%20so%20we%20need%20to%20check%20we're%20in%20sync.%20%20%20%20this.#ensureSearchParamsUpdated();%20%20%20%20return%20this.#context.href;%20%20}%20%20static%20canParse(url,%20base%20=%20undefined)%20{%20%20%20%20if%20(arguments.length%20===%200)%20{%20%20%20%20%20%20throw%20new%20ERR_MISSING_ARGS('url');%20%20%20%20}%20%20%20%20url%20=%20%60${url}%60;%20%20%20%20if%20(base%20!==%20undefined)%20{%20%20%20%20%20%20return%20bindingUrl.canParse(url,%20%60${base}%60);%20%20%20%20}%20%20%20%20/%20It%20is%20important%20to%20differentiate%20the%20canParse%20call%20statements%20%20%20%20/%20since%20they%20resolve%20into%20different%20v8%20fast%20api%20overloads.%20%20%20%20return%20bindingUrl.canParse(url);%20%20}}/og-image.png |
| image:width | 1200 |
| image:height | 630 |
| image:alt | Lingco - Language Learning Platform |
| type | website |
Cabeçalhos
| H1 | H2 | H3 | H4 | H5 | H6 |
| 1 | 2 | 5 | 0 | 0 | 0 |
Imagens
Encontrámos 23 imagens nesta página.
5 atributos ALT estão vazios ou em falta. É recomendado adicionar texto alternativo de modo a que os motores de busca identifiquem melhor o conteúdo das suas imagens.
Rácio Texto/HTML
Rácio : 0%
O rácio de texto para código HTML desta página é menor que 15 porcento, o que significa que provavelmente é necessário de adicionar mais conteúdos em forma de texto.
Flash
Perfeito, não foi encontrado conteúdo Flash nesta página.
Iframe
Excelente, não foram detetadas Iframes nesta página.
Reescrita de URL
Perfeito. As ligações aparentam ser limpas!
Underscores (traços inferiores) nas URLs
Detetámos 'underscores' (traços inferiores) nas suas URLs. O uso hífens é mais eficiente em termos de otimização SEO.
Ligações para a própria página
Encontrámos um total de 8 ligações incluindo 0 ligações a ficheiros
| Âncoras | Tipo | Sumo |
|---|---|---|
| Schedule a Demo | Externas | Passa sumo |
| Support | Internas | Passa sumo |
| Globe | Internas | Passa sumo |
| Team | Internas | Passa sumo |
| Conferences | Internas | Passa sumo |
| Terms of Service | Internas | Passa sumo |
| Privacy Policy | Internas | Passa sumo |
| Acceptable Use Policy | Internas | Passa sumo |
Núvem de palavras-chave
policies terms service company policy conferences globe support team platform
Consistência das Palavras-chave
| Palavra-chave | Conteúdo | Título | Palavras-chave | Descrição | Cabeçalhos |
|---|---|---|---|---|---|
| policy | 2 | ![]() |
![]() |
![]() |
![]() |
| platform | 1 | ![]() |
![]() |
![]() |
![]() |
| support | 1 | ![]() |
![]() |
![]() |
![]() |
| globe | 1 | ![]() |
![]() |
![]() |
![]() |
| company | 1 | ![]() |
![]() |
![]() |
![]() |
Url
Domínio : lingco.io
Cumprimento : 9
Favicon
Ótimo, o site tem um favicon.
Facilidade de Impressão
Não encontrámos CSS apropriado para impressão.
Língua
Otimo! A língua declarada deste site é en.
Dublin Core
Esta página não tira vantagens do Dublin Core.
Tipo de Documento
HTML 5
Codificação
Perfeito. O conjunto de caracteres UTF-8 está declarado.
Validação W3C
Erros : 0
Avisos : 0
Privacidade do Email
Boa! Nenhum endereço de email está declarado sob a forma de texto!
HTML obsoleto
Fantástico! Não detetámos etiquetas HTML obsoletas.
Dicas de Velocidade
![]() |
Excelente, este site não usa tablelas dentro de tabelas. |
![]() |
Oh não, o site usa estilos CSS nas etiquetas HTML. |
![]() |
Boa, o site usa poucos ficheiros CSS. |
![]() |
Oh, não! O site utiliza demasiados ficheiros JavaScript (mais que 6). |
![]() |
Perfeito, o site tira vantagens da compressão gzip. |
Otimização para dispositivos móveis
![]() |
Icon Apple |
![]() |
Meta Viewport Tag |
![]() |
Conteúdo Flash |
XML Sitemap
Em falta
O site não tem um mapa XML do site (sitemap) - isto pode ser problemático.
Um mapa do site identifica todas as URLs que estão disponíveis para rastreio, incluindo informação acerca de atualizações, frequência de alterações ou a importancia de cada URL. Isto contribui para uma maior inteligência e eficiência do rastreio.
Robots.txt
https://lingco.io/robots.txt
Perfeito, o seu site tem um ficheiro robots.txt.
Analytics
Perfeito, o site tem uma ferramenta analítica para a análise de atividade.
Google Analytics |
Free SEO Testing Tool é uma ferramenta gratuita que o ajuda a avaliar o seu site