My SEO audit of wayse.pt

I. Analysis

1


The website runs on React 18.3.1:

curl -s "https://wayse.pt$(curl -s https://wayse.pt | grep -o '/assets/index-[^"]*\.js')" \
  | grep -o 're\.version="[^"]*"'

re.version="18.3.1"

2

2.1


The website's server response to requests for its pages does not contain the meaningful text of the website.

2.1.1


In particular, the following code proves that the server response to the request for the main page of the website does not contain the word «Lunos» (the name of the trademark you distribute).

curl -s https://wayse.pt | grep -i Lunos  

<empty response>

2.2


§2.1 → the website uses client-side rendering: web.dev/articles/rendering-on-the-web#client-side

3

3.1


The website is implemented as a Single Page App (SPA): reactrouter.com/how-to/spa

curl -s https://wayse.pt/ | md5sum
curl -s https://wayse.pt/ventilacao | md5sum
curl -s https://wayse.pt/climatizacao | md5sum

0d11dc5ec269e4ee0f7a41aba4d5e72b *-
0d11dc5ec269e4ee0f7a41aba4d5e72b *-
0d11dc5ec269e4ee0f7a41aba4d5e72b *-

This code proves that when different pages of the website are requested, the server returns the same response: an HTML skeleton.

3.2


This skeleton can be seen here: validator.schema.org#url=https://wayse.pt

4

4.1


The IP address of the website server: 185.158.133.1:

curl -so /dev/null -w '%{remote_ip}\n' https://wayse.pt

185.158.133.1

4.2


The address §4.1 belongs to Cloudflare:

curl -s https://ipinfo.io/185.158.133.1/org

AS13335 Cloudflare, Inc.

4.3


§4.2 → the website is served through Cloudflare CDN.

5

5.1


The address §4.1 is allocated by Cloudflare for the websites of Lovable hosting clients:

curl -s https://ipinfo.io/185.158.133.1/hostname

lovable-app-cd-1-4.p.l5e.io

5.2


§5.1 → the website is deployed on a Lovable server → the website is developed on the Lovable platform.

6


The DNS zone of the website domain is delegated to Bluehost:

curl -s "https://dns.google/resolve?name=wayse.pt&type=NS" \
  | grep -o 'ns[0-9]\.bluehost\.com'

ns1.bluehost.com
ns2.bluehost.com

7

7.1


{§4.1, §5.1, §6} → the website does not have its own reverse proxy in front of the Lovable hosting.

7.2


§7.1 → under the current architecture, you are not able to manage server redirects and status codes at the edge level.

8

8.1


On 2026-02-07 the website was still running on WordPress 6.9.1:

curl -sL "https://web.archive.org/web/20260207034122/https://wayse.pt" \
  | grep -m1 -o 'WordPress [0-9.]*'

WordPress 6.9.1

8.2

8.2.1


The transition of the website to a React SPA occurred no later than 2026-04-16:

curl -sL "https://web.archive.org/web/20260416085716/https://wayse.pt" \
  | grep -E -o '<div id="root"></div>|assets/index-[^"]*\.js'

assets/index-D4wjvod4.js
<div id="root"></div>

8.2.2


<div id="root"></div> — this is React's root element (which is empty in the HTML skeleton §3.2 due to §2.1): react.dev/reference/react-dom/client/createRoot

9

9.1


As a workaround for §2.1, Lovable applies «on-request pre-rendering» to client-side rendered (§2.2) React apps (§1), and the pre-rendered content is «served only to verified search and AI crawlers (Google, Bing, social-preview bots, and AI engines like ChatGPT, Perplexity, Claude, Gemini)»: docs.lovable.dev/features/seo-aeo#before-you-begin

9.2


The execution of «on-request pre-rendering» (§9.1) for the website is proven by developers.facebook.com/tools/debug/?q=https://wayse.pt/ventilacao

9.3


For user agents that Lovable does not classify as «verified search and AI crawlers» (§9.1), it returns the same HTML skeleton §3.2.

10

10.1


The meaningful text of the page is mounted into React's root element (§8.2.2) after the production JavaScript bundle (§1) is downloaded and executed.

10.2


§9.3 → for human visitors, §10.1 occurs in their browsers.

11

11.1


§10.1 adds 3 Schema.org structured data tags to the pages of the website:

curl -sL https://raw.githubusercontent.com/wayse-pt/_/refs/tags/2026-10-06--6/schema.org.sh | bash

11.1.1

FAQPage

11.1.2

Organization

11.1.3

VideoObject

11.2


Due to §9.1, Google processes the §11.1 tags for the website.

11.3


Google does not consider the §11.1.1 tag for the website when displaying rich results, because since 2023 rich results for FAQPage are shown only for authoritative government and health websites:

Going forward, FAQ (from FAQPage structured data) rich results will only be shown for well-known, authoritative government and health websites.
For all other sites, this rich result will no longer be shown regularly.
Sites may automatically be considered for this treatment depending on their eligibility.

developers.google.com/search/blog/2023/08/howto-faq-changes#overview-of-the-changes

12


In the application's production JavaScript bundle, 53 React Router routes are declared (§1):

curl -sL https://raw.githubusercontent.com/wayse-pt/_/refs/tags/2026-10-06--5/routes/count.sh | bash

53

The types of these routes:

12.1. Pages (15)

curl -sL https://raw.githubusercontent.com/wayse-pt/_/refs/tags/2026-10-06--4/routes/pages.sh | bash
  1. /
  2. /avaliacao
  3. /contactos
  4. /humidade-condensacao-ar-viciado
  5. /lps/tektonica2026
  6. /mensagem-enviada
  7. /obrigado
  8. /politica-privacidade
  9. /profissionais
  10. /sobre
  11. /termos-utilizacao
  12. /ventilacao
  13. /ventilacao/quanto-custa
  14. /ventilacao/recuperacao-de-calor
  15. /ventilacao/vmc-vs-ventilacao-descentralizada

12.2. Client redirects (26)

12.2.1. Redirects to the main page (16)

12.2.1.1. Redirects to the header (9)

curl -sL https://raw.githubusercontent.com/wayse-pt/_/refs/tags/2026-10-06--3/routes/home/.sh | bash
  1. /bolor
  2. /casos
  3. /humidade-condensacao
  4. /particulares
  5. /particulares/casos
  6. /portefolio/
  7. /portefolio
  8. /profissionais/casos
  9. /qualidade-do-ar-ar-viciado
12.2.1.2. Redirects to anchor blocks (7)

curl -sL https://raw.githubusercontent.com/wayse-pt/_/refs/tags/2026-10-06--3/routes/home/anchor.sh | bash
  1. /como-funciona → /#como-funciona
  2. /faq → /#faq
  3. /particulares/faq → /#faq
  4. /particulares/solucao → /#solucao
  5. /profissionais/faq → /#faq
  6. /profissionais/solucoes → /#solucao
  7. /solucao → /#solucao

12.2.2. Redirects to other pages (10)

curl -sL https://raw.githubusercontent.com/wayse-pt/_/refs/tags/2026-10-06--3/routes/other.sh | bash
  1. /contacto → /contactos
  2. /contactob2b → /contactos?tipo=profissional
  3. /particulares/avaliacao → /avaliacao
  4. /particulares/contacto → /contactos
  5. /particulares/obrigado → /obrigado
  6. /particulares/sobre → /sobre
  7. /profissionais/contacto → /contactos?tipo=profissional
  8. /profissionais/obrigado → /obrigado
  9. /sobre-nos/ → /sobre
  10. /sobre-nos → /sobre

12.3. Routes leading to the 404 page (12)

curl -sL https://raw.githubusercontent.com/wayse-pt/_/refs/tags/2026-10-06--3/routes/404.sh | bash

12.3.1. Wildcard (1)

  1. *

12.3.2. Others (11)

  1. /aqs
  2. /bombas-de-calor
  3. /climatizacao
  4. /climatizacao-e-aqs
  5. /climatizacao-e-aqs/
  6. /energia
  7. /energia-solar
  8. /fotovoltaico
  9. /solar-fotovoltaico
  10. /solar-fotovoltaico/
  11. /solar-termico

13


In addition to the 53 explicit rules of the routing table <Routes> (§12), the global trailing slash normalization component inside <BrowserRouter> removes the trailing slash (pathname.length > 1 && pathname.endsWith("/")) before matching against routes and performs a client redirect via <Navigate replace to="{...}"/> to the canonical address without a slash (for example, /ventilacao/ → /ventilacao, /contactos/ → /contactos).

14

14.1


The routes §12.3.2 correspond to the sections of the website on WordPress (§8.1), closed during the transition to React SPA (§8.2.1).

14.2


For the routes §12.3.2 there is no thematic equivalent on the website → redirecting a user agent to a page with the noindex directive (in this case: 404, §12.3) complies with Google guidelines (while Google considers redirecting such pages to an irrelevant main page a soft 404):

14.3


The declaration of the routes §12.3.2 in React Router (§12) is pointless:

  • the routes with a trailing / are unreachable due to §13
  • the routes without a trailing / duplicate the route §12.3.1

15

15.1


3 pages of the website (out of the 15 pages of §12.1) are excluded from indexing by means of <meta name="robots" content="noindex, nofollow">:

curl -sL https://raw.githubusercontent.com/wayse-pt/_/refs/tags/2026-10-06--1/noindex.sh | bash
  1. /lps/tektonica2026
  2. /mensagem-enviada
  3. /obrigado

15.2


{§12.1, §15.1} → 12 pages of §I.12.1 are indexable.
All of them are declared in sitemap.xml.

16


Unlike the routes §12.3.2, the routes §12.2.1.1 are divided into 3 groups based on the presence of a thematic equivalent:

16.1


Routes on humidity, mold, and air quality:

16.1.1


They have a thematic equivalent — the page /humidade-condensacao-ar-viciado (§12.1): redirecting to the main page creates a soft 404 risk (§14.2, §II.5.1).

16.2


Portfolio and case routes:

16.2.1


They do not have a direct thematic equivalent among the 15 pages of §12.1: redirecting to the main page distorts the visitors' intent and creates a soft 404 risk (§14.2, §II.5.2).

16.3


The route /particulares — an alias of the private customers section of the main page (/): the soft 404 risk is absent.

17. Processing of non-existent HTTP target resources

17.1

17.1.1


If the origin server of the Lovable hosting (p.l5e.io) considers a non-existent target resource a file, then it returns HTTP 404 («Not Found»).

17.1.2


The origin server of the Lovable hosting qualifies the target resource as a file by the presence of a dot in the final path segment of the target resource URL.

17.2


If the origin server of the Lovable hosting does not consider a non-existent target resource a file, then it returns HTTP 200 («OK») and the HTML skeleton §3.2.

17.2.1


For the website, the §17.2 case is implemented, in particular, for the routes §12.3.2.

17.3


Lovable does not document the behavior §§17.1-17.2: I established this behavior empirically.

18


The website processes the §17.2 case as follows:

18.1


If the user agent (a crawler or a browser) is capable of interpreting the JavaScript version on which React 18.3.1 runs or falls under the §9.1 case → the user agent will receive:

18.1.1


The message «A página que procura não foi encontrada».

18.1.2


The directive <meta name="robots" content="noindex, nofollow">.

18.1.2.1


This directive complies with the Google recommendation for SPAs: developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics?hl=en#avoid-soft-404s

18.2


In other cases, the user agent will not receive the §18.1 information.

19


Due to §18.1.2, Googlebot does not encounter a soft 404: in the «Page Indexing» report in Google Search Console, the soft 404 section is absent.

20


§17.2 forces crawlers that do not belong to §9.1 to download the HTML skeleton §3.2 and interpret JavaScript to detect §18.1.2 instead of receiving an instant server response: HTTP 404 («Not Found») for unknown addresses and HTTP 410 («Gone») for the closed routes §12.3.2.

21


According to the «Page Indexing» report in Google Search Console, the routes §12.3.2 are not in the Google index:

21.1


4 were crawled by Googlebot and excluded by the noindex tag (§18.1.2):

search.google.com/search-console/index/drilldown?resource_id=sc-domain:wayse.pt&item_key=CAMYCCAC

21.2


7 were not crawled by Googlebot:

22

22.1


The redirect from www.wayse.pt to wayse.pt (built into the Lovable hosting) is performed with the 302 HTTP status code («Found», temporary):

curl -sI https://www.wayse.pt | grep -Ei '^(HTTP/|location:)'

HTTP/1.1 302 Found
Location: https://wayse.pt/

22.2


Due to §22.1, in the Google Search Console «Performance» report, the non-canonical mirrors http://www.wayse.pt/ and https://www.wayse.pt/ still receive impressions:

22.3


§22.1 splits the Google analytics of the main page into 3 addresses: https://wayse.pt/, http://www.wayse.pt/ and https://www.wayse.pt/: in particular, Google independently calculates impressions, clicks, CTR for them.

22.4


§22.1 signals to search engines that the redirect is temporary, prompting Googlebot to keep the non-canonical URLs in the search results and preventing the consolidation of link signals to the canonical address https://wayse.pt/:

22.5


Browsers do not cache the HTTP 302 response by default (unlike HTTP 301, RFC 9110 §15.4.3) → each request to www. requires a new network request to the server.
datatracker.ietf.org/doc/html/rfc9110#section-15.4.3

23

23.1


In the HTML skeleton §3.2, the og:image meta tag refers to a non-working Google Cloud Storage address:

curl -sL https://wayse.pt | grep 'property="og:image"' | head -n 1 | sed -n 's/.*content="\([^"]*\)".*/\1/p'

storage.googleapis.com/gpt-engineer-file-uploads/attachments/og-images/5f03182e-b623-4b0a-b1f1-50a670014bbf?Expires=1775559603&GoogleAccessId=go-api-on-aws%40gpt-engineer-390607.iam.gserviceaccount.com&Signature=<…>

23.2


The URL §23.1 does not work because Google Cloud Storage returns HTTP 403 («Forbidden») due to an invalid signature (the Signature parameter in the URL):

curl -sI "$(curl -sL https://wayse.pt | grep -m1 'property="og:image"' | sed -n 's/.*content="\([^"]*\)".*/\1/p' | sed 's/&amp;/\&/g' | tr -d '\r')" \
  | head -n1

HTTP/1.1 403 Forbidden

23.3


For user agents belonging to §9.1 or capable of interpreting JavaScript, React overrides the og:image URL with the correct one: wayse.pt/og-image.png

23.4


Due to §23.2, other user agents will not receive og:image for the website.

24

24.1


In the «Core Web Vitals» report for the «Mobile» mode, all 10 evaluated URLs have the «Need improvement» status due to «INP issue: longer than 200ms (mobile)».

24.2


§24.1 indicates long main thread tasks when processing interactions on mobile devices.

24.3


The production JavaScript bundle (§1) is the probable source of the §24.2 tasks.

24.4


«Core Web Vitals» is a ranking factor for websites on Google: developers.google.com/search/docs/appearance/page-experience?hl=en

25

25.1


The «Page Indexing» report in Google Search Console contains 11 indexed URLs: 10 of the 12 URLs present in sitemap.xml (§15.2), and /portefolio (§12.2.1.1).
search.google.com/search-console/index/drilldown?resource_id=sc-domain:wayse.pt&pages=ALL_URLS

25.2

25.2.1


/portefolio (§12.2.1.1) has been retained in the search index since the last crawl on 2026-07-07:
search.google.com/search-console/inspect?resource_id=sc-domain:wayse.pt&id=xP_JqJRfwvbqe63c4HFlzw

25.2.2


Upon navigating from search, a client redirect to the main page (§12.2.1.1) is triggered according to the scenario §16.2.

25.2.3


Unlike /portefolio, Googlebot crawled /portefolio/ (the related address with a slash) on 2026-06-23 and excluded it from the search index (§26.2):
search.google.com/search-console/inspect?resource_id=sc-domain:wayse.pt&id=yqWBYbUghJcUm64Pi4RTRA

26. «Excluded by ‘noindex’ tag» (7 URLs)


search.google.com/search-console/index/drilldown?resource_id=sc-domain:wayse.pt&item_key=CAMYCCAC
This report includes 7 historical WordPress URLs, which are divided into 2 groups:

26.1. Archive resources without a thematic equivalent (5)

26.1.1. List

26.1.1.1 (4)

26.1.1.2 (1)

26.1.2


The website processes §26.1 according to the scenario §18:

26.1.3


Googlebot excluded §26.1 from the index due to §18.1.2 (without a soft 404, §19).

26.1.4


Half of §26.1.1.1 are duplicates with a trailing slash (§12.3.2), which the server does not normalize via HTTP 301 to the canonical addresses without a trailing slash.

26.2. Archive addresses with configured client redirects (2 URLs)

26.2.1


In the current React Router code, client redirects operate on these addresses (§12.2.1.1, §12.2.2), and the noindex tag is absent from them.

26.2.2


The «Excluded by ‘noindex’ tag» report for these 2 URLs is outdated: it reflects the crawl from June 2026 (June 13 for /sobre-nos/, June 23 for /portefolio/), performed before the appearance of the current redirect rules in the code.

26.2.3


Upon crawling the address without a slash /sobre-nos, Googlebot recorded a client redirect to/sobre (§27.2).

26.2.4


The noindex directive recorded during the outdated crawls of the redirect addresses blocks the consolidation of search signals on the target pages (/sobrefor/sobre-nos/and/portefoliofor/portefolio/, §II.5.2.4).

27. «Page with redirect» (6 URLs)


search.google.com/search-console/index/drilldown?resource_id=sc-domain:wayse.pt&item_key=CAMYCyAC
These are:

27.1


3 server redirects:

  • with the 301 HTTP status code: [http://wayse.pt/](http://wayse.pt/)
  • with the 302 HTTP status code («Moved Temporarily», §22): https://www.wayse.pt/ and http://www.wayse.pt/

27.1.1


With the shared gateway IP address (§4.1):

  • Cloudflare Edge redirects http://wayse.pt/ with the 301 HTTP status code;
  • the platform router of the Lovable hosting redirects www. with the 302 HTTP status code (§22.1).

27.2


3 client redirects:

  • /contactos/ (crawl on 2026-08-08)
  • /sobre-nos (crawl on 2026-07-26, §26.2.3)
  • /ventilacao/ (crawl on 2026-09-17)

Google recognizes client redirects of React SPAs: support.google.com/webmasters/answer/7440203?hl=en#page_with_redirect

27.2.1


Googlebot recorded these redirects during the actual crawl:

  • /sobre-nos — by the route §12.2.2;
  • /contactos/ and /ventilacao/ — by the slash normalization rule (§13).

27.2.2


Of the remaining 25 redirect routes in the table §12.2:

  • the indexed pages report retains /portefolio (§25.2);
  • the noindex report (§26.2) retains /portefolio/ and /sobre-nos/;
  • the remaining 22 URLs are absent from Search Console: there are no links to them in sitemap.xml (§15.2), the DOM interface, and the external link profile (§31).

28. «Discovered - currently not indexed» (2 URLs)


search.google.com/search-console/index/drilldown?resource_id=sc-domain:wayse.pt&item_key=CAMYFiAC
These are service URLs:

They are linked from the footer of every page, but Google postponed crawling them («Last crawled: N/A»); this does not affect organic traffic.
support.google.com/webmasters/answer/7440203?hl=en#discovered__unclear_status

29


According to the «Crawl Stats» report in Google Search Console, over the last 90 days Googlebot made 907 requests:

95% of the requests constituted a repeat crawl (Refresh), 5% — discovery of new URLs (Discovery); 35% of the requests were performed by AdsBot.
search.google.com/search-console/settings/crawl-stats?resource_id=sc-domain:wayse.pt

30


According to Google Analytics, the «Página Não Encontrada» screen is the 8th most popular page of the website in its entire history (~ 4.6% of views, ~ 10.7% of users: 776 views, 765 users).
The majority of the traffic to it is generated by requests to the historical addresses of the removed sections (§12.3.2, in particular /climatizacao-e-aqs).
analytics.google.com/analytics/web/#/a141206161p530340527/reports/explorer?params=_r.explorerCard..selmet%3D%5B%22screenPageViews%22%5D%26_r.explorerCard..seldim%3D%5B%22unifiedScreenClass%22%5D%26_u.dateOption%3DyearToDate%26_u.comparisonOption%3Ddisabled&r=all-pages-and-screens

31


According to the «Links» report in Google Search Console, 110 external backlinks lead to the website (notably, from the architectural catalog homify.pt and the corporate directory iberinmo.com).
External links lead only to 2 URLs: the main page (84 links) and /ventilacao (26 links).
search.google.com/search-console/links?resource_id=sc-domain:wayse.pt

32


Contextual links within meaningful text blocks connect the pages of the /ventilacao section, but /humidade-condensacao-ar-viciado — the content page with the best average position (2.8) — has few contextual links pointing to it.

33


Search visibility is limited by link authority and content relevance, not by indexing: brand queries bring more than 85% of identified clicks, while category queries (ventilação mecânica controlada, sistemas de condutas, sistema de ventilação para casas) are at positions 71–91.
Impressions for irrelevant queries of former business lines (fornecedores de soluções de energia: 152 impressions, average position 7.2) do not yield clicks.
search.google.com/search-console/performance/search-analytics?resource_id=sc-domain:wayse.pt

II. Recommendations

1


§I.7.2 → configure a reverse proxy in front of the Lovable hosting.

1.1


Lovable supports §1 via the option «Uses Cloudflare or similar proxy»: docs.lovable.dev/features/custom-domain#advanced-use-a-cdn-or-reverse-proxy

2


Do not use caching on the reverse proxy §1 for 2 reasons:

2.1


Caching of static resources already works in §I.4.3.

2.2


HTML caching before §I.4.3 will break the operation of §I.9.1.

3


Implement §1 based on the free Cloudflare plan:
developers.cloudflare.com/dns/zone-setups/full-setup/setup#3-change-your-nameservers

3.1


Delegate the management of the domain's DNS zone from Bluehost (§I.6) to Cloudflare.
developers.cloudflare.com/dns/proxy-status#cname-records

3.2


Point the CNAME record with proxying enabled to the Lovable project and activate the option §1.1.
developers.cloudflare.com/dns/proxy-status#cname-records

3.3


Configure a cache bypass rule («Bypass Cache») in Cloudflare Cache Rules for HTML requests (§2).
developers.cloudflare.com/cache/how-to/cache-rules/settings#bypass-cache

3.4


Process server redirects with the HTTP 301 status code through Cloudflare Redirect Rules (Bulk Redirects).
developers.cloudflare.com/rules/url-forwarding/bulk-redirects/create-dashboard#1-create-a-bulk-redirect-list

3.5


Process the return of the server status codes HTTP 404 and HTTP 410 (§7) through a serverless Cloudflare Workers function.

4


Redirect user agents with the 301 HTTP status code instead of 302 (§I.22) by means of §1: www.wayse.pt → wayse.pt.

5


Differentiate the processing of the routes §I.12.2.1.1 based on the presence of a thematic equivalent (§I.16):

5.1


Redirect user agents with the 301 HTTP status code by means of §1: the routes §I.16.1 → the URL §I.16.1.1.

5.2


For the routes §I.16.2, create at the address /portefolio (§I.25.2.1) a landing page for Lunos decentralized ventilation cases:

5.2.1


Replace the client redirect with a page of cases with photos of equipment installations, reviews, and site parameters.

5.2.2


Utilize the routes /particulares/casos and /profissionais/casos as audience filters (B2C / B2B).

5.2.3


Include /portefolio in sitemap.xml (§I.15.2), the header and the footer of the website.

5.2.4


Redirect user agents with the 301 HTTP status code by means of §1: /casos → /portefolio.

5.2.5


Request a recrawl of the page in the URL Inspection tool of Google Search Console.

5.3


Redirect user agents with the 301 HTTP status code by means of §1: the routes §I.16.3 → the main page.

6


Redirect user agents with the 301 HTTP status code by means of §1: URLs with a trailing / (except /) → URLs without a trailing / (§I.13, §I.26.1.4, §I.27.2.1).

7


Process non-existent routes by means of §1 with server status codes (§I.20):

7.1


Return the 410 HTTP status code for closed archive routes:

7.2


Return the 404 HTTP status code for other unknown addresses (the route §I.12.3.1).

8


Remove the redirect to the main page for WordPress date and category archive URLs (/^\/\d{4}\/\d{1,2}\/.*$/, /^\/\d{4}\/\d{1,2}\/?$/, /^\/category(\/.*)?$/), because such a redirect creates a soft 404 (§I.14.2).

9


§I.14.3 → remove the routes §I.12.3.2 from React Router (§I.12).

10


Replace the URL in the og:image meta tag in the HTML skeleton §I.3.2 with https://wayse.pt/og-image.png (§I.23).

11


Add contextual links:

11.1


To the page /humidade-condensacao-ar-viciado (§I.32): from the main page and the pages of the /ventilacao section.

11.2


To the page /portefolio (§5.2.3):

11.2.1


From the page /humidade-condensacao-ar-viciado.

11.2.2


From the pages of the /ventilacao section.

12

12.1


Find interactions with a delay above 200 ms on mobile devices (§I.24) through the «Performance» panel in Chrome DevTools with CPU throttling to identify the source of the long tasks:
web.dev/articles/optimize-inp

12.2


If the bottleneck of §12.1 turns out to be script execution → break up the long tasks and split the production JavaScript bundle by route:
web.dev/articles/reduce-javascript-payloads-with-code-splitting

13


Focus search engine optimization on expanding the semantic core, content, and external links for category queries of the ventilation section (§I.33).