Catalog / sofiashendi.com
65

SEO audit for sofiashendi.com

Sofia Shendi | Engineering Leader & Full-Stack Engineer

other

Health 65/100 (fair) · 50 pages crawled · generated 2026-08-26

Download Markdown report (feed to ChatGPT / Claude / Cursor)

Hands-on engineering leader building accessible, high-performance web apps.

50
pages crawled
50
indexable pages
0
errors
181
warnings
308
notices
0
orphan pages
0
broken links
Category breakdown
CategoryScoreErrorsWarningsNotices
Content 70 0 50 0
Headings 70 0 50 0
Rendering 70 0 50 0
Canonical 92 0 14 0
Duplicate 92 0 14 14
Titles 98 0 3 0
Cache 100 0 0 50
Crawlability 100 0 0 36
Geo 100 0 0 1
Meta Description 100 0 0 7
Performance 100 0 0 100
Security 100 0 0 50
Structured Data 100 0 0 50
Findings

Warnings (6 rules)

warning Thin content (low word count)

Rule content.thin · Content · 50 occurrence(s)

warning Duplicate <title> across pages

Rule duplicate.title · Duplicate · 14 occurrence(s)

warning Content only rendered by JavaScript (invisible to non-JS crawlers & AI)

Rule rendering.js_shell · Rendering · 50 occurrence(s)

  • https://sofiashendi.com/ — Raw HTML has 0 words and 0 links — this page is built by JavaScript in the browser. Googlebot renders JS but delays it, and most crawlers and AI assistants (ChatGPT, Perplexity, Claude) don't run JavaScript at all, so to them the page looks empty. Server-render or pre-render your main content and navigation.
  • https://sofiashendi.com/blog — Raw HTML has 0 words and 0 links — this page is built by JavaScript in the browser. Googlebot renders JS but delays it, and most crawlers and AI assistants (ChatGPT, Perplexity, Claude) don't run JavaScript at all, so to them the page looks empty. Server-render or pre-render your main content and navigation.
  • https://sofiashendi.com/blog/back-with-the-montreal-builder-community — Raw HTML has 0 words and 0 links — this page is built by JavaScript in the browser. Googlebot renders JS but delays it, and most crawlers and AI assistants (ChatGPT, Perplexity, Claude) don't run JavaScript at all, so to them the page looks empty. Server-render or pre-render your main content and navigation.
  • https://sofiashendi.com/blog/free-contemporary-art-in-montreal — Raw HTML has 0 words and 0 links — this page is built by JavaScript in the browser. Googlebot renders JS but delays it, and most crawlers and AI assistants (ChatGPT, Perplexity, Claude) don't run JavaScript at all, so to them the page looks empty. Server-render or pre-render your main content and navigation.
  • https://sofiashendi.com/blog/how-i-vibe-coded-my-website-as-a-20-year-senior-engineer — Raw HTML has 0 words and 0 links — this page is built by JavaScript in the browser. Googlebot renders JS but delays it, and most crawlers and AI assistants (ChatGPT, Perplexity, Claude) don't run JavaScript at all, so to them the page looks empty. Server-render or pre-render your main content and navigation.
  • https://sofiashendi.com/blog/kayaking-at-low-cost-around-montreal — Raw HTML has 0 words and 0 links — this page is built by JavaScript in the browser. Googlebot renders JS but delays it, and most crawlers and AI assistants (ChatGPT, Perplexity, Claude) don't run JavaScript at all, so to them the page looks empty. Server-render or pre-render your main content and navigation.
  • https://sofiashendi.com/blog/leaving-google-for-proton-or-the-case-for-taking-ownership-of-our-privacy — Raw HTML has 0 words and 0 links — this page is built by JavaScript in the browser. Googlebot renders JS but delays it, and most crawlers and AI assistants (ChatGPT, Perplexity, Claude) don't run JavaScript at all, so to them the page looks empty. Server-render or pre-render your main content and navigation.
  • https://sofiashendi.com/blog/looking-back-at-2025 — Raw HTML has 0 words and 0 links — this page is built by JavaScript in the browser. Googlebot renders JS but delays it, and most crawlers and AI assistants (ChatGPT, Perplexity, Claude) don't run JavaScript at all, so to them the page looks empty. Server-render or pre-render your main content and navigation.
  • https://sofiashendi.com/blog/recycling-electronics-in-montreal — Raw HTML has 0 words and 0 links — this page is built by JavaScript in the browser. Googlebot renders JS but delays it, and most crawlers and AI assistants (ChatGPT, Perplexity, Claude) don't run JavaScript at all, so to them the page looks empty. Server-render or pre-render your main content and navigation.
  • https://sofiashendi.com/blog/starting-2023-with-more-things-to-know-about-our-city — Raw HTML has 0 words and 0 links — this page is built by JavaScript in the browser. Googlebot renders JS but delays it, and most crawlers and AI assistants (ChatGPT, Perplexity, Claude) don't run JavaScript at all, so to them the page looks empty. Server-render or pre-render your main content and navigation.
  • https://sofiashendi.com/blog/tag/birthday — Raw HTML has 0 words and 0 links — this page is built by JavaScript in the browser. Googlebot renders JS but delays it, and most crawlers and AI assistants (ChatGPT, Perplexity, Claude) don't run JavaScript at all, so to them the page looks empty. Server-render or pre-render your main content and navigation.
  • https://sofiashendi.com/blog/tag/city-life — Raw HTML has 0 words and 0 links — this page is built by JavaScript in the browser. Googlebot renders JS but delays it, and most crawlers and AI assistants (ChatGPT, Perplexity, Claude) don't run JavaScript at all, so to them the page looks empty. Server-render or pre-render your main content and navigation.
  • https://sofiashendi.com/blog/tag/creative — Raw HTML has 0 words and 0 links — this page is built by JavaScript in the browser. Googlebot renders JS but delays it, and most crawlers and AI assistants (ChatGPT, Perplexity, Claude) don't run JavaScript at all, so to them the page looks empty. Server-render or pre-render your main content and navigation.
  • https://sofiashendi.com/blog/tag/engineering — Raw HTML has 0 words and 0 links — this page is built by JavaScript in the browser. Googlebot renders JS but delays it, and most crawlers and AI assistants (ChatGPT, Perplexity, Claude) don't run JavaScript at all, so to them the page looks empty. Server-render or pre-render your main content and navigation.
  • https://sofiashendi.com/blog/tag/leadership — Raw HTML has 0 words and 0 links — this page is built by JavaScript in the browser. Googlebot renders JS but delays it, and most crawlers and AI assistants (ChatGPT, Perplexity, Claude) don't run JavaScript at all, so to them the page looks empty. Server-render or pre-render your main content and navigation.
  • https://sofiashendi.com/blog/tag/privacy — Raw HTML has 0 words and 0 links — this page is built by JavaScript in the browser. Googlebot renders JS but delays it, and most crawlers and AI assistants (ChatGPT, Perplexity, Claude) don't run JavaScript at all, so to them the page looks empty. Server-render or pre-render your main content and navigation.
  • https://sofiashendi.com/blog/tag/slow-travel — Raw HTML has 0 words and 0 links — this page is built by JavaScript in the browser. Googlebot renders JS but delays it, and most crawlers and AI assistants (ChatGPT, Perplexity, Claude) don't run JavaScript at all, so to them the page looks empty. Server-render or pre-render your main content and navigation.
  • https://sofiashendi.com/blog/tag/sustainability — Raw HTML has 0 words and 0 links — this page is built by JavaScript in the browser. Googlebot renders JS but delays it, and most crawlers and AI assistants (ChatGPT, Perplexity, Claude) don't run JavaScript at all, so to them the page looks empty. Server-render or pre-render your main content and navigation.
  • https://sofiashendi.com/blog/tag/wellbeing — Raw HTML has 0 words and 0 links — this page is built by JavaScript in the browser. Googlebot renders JS but delays it, and most crawlers and AI assistants (ChatGPT, Perplexity, Claude) don't run JavaScript at all, so to them the page looks empty. Server-render or pre-render your main content and navigation.
  • https://sofiashendi.com/blog/tag/wordpress — Raw HTML has 0 words and 0 links — this page is built by JavaScript in the browser. Googlebot renders JS but delays it, and most crawlers and AI assistants (ChatGPT, Perplexity, Claude) don't run JavaScript at all, so to them the page looks empty. Server-render or pre-render your main content and navigation.
  • https://sofiashendi.com/blog/taking-control-of-my-home-network-and-saving-216 — Raw HTML has 0 words and 0 links — this page is built by JavaScript in the browser. Googlebot renders JS but delays it, and most crawlers and AI assistants (ChatGPT, Perplexity, Claude) don't run JavaScript at all, so to them the page looks empty. Server-render or pre-render your main content and navigation.
  • https://sofiashendi.com/blog/the-arrival-of-spring-and-seed-libraries — Raw HTML has 0 words and 0 links — this page is built by JavaScript in the browser. Googlebot renders JS but delays it, and most crawlers and AI assistants (ChatGPT, Perplexity, Claude) don't run JavaScript at all, so to them the page looks empty. Server-render or pre-render your main content and navigation.
  • https://sofiashendi.com/blog/walking-through-ottawa-and-thinking-about-what-weve-become — Raw HTML has 0 words and 0 links — this page is built by JavaScript in the browser. Googlebot renders JS but delays it, and most crawlers and AI assistants (ChatGPT, Perplexity, Claude) don't run JavaScript at all, so to them the page looks empty. Server-render or pre-render your main content and navigation.
  • https://sofiashendi.com/contact — Raw HTML has 0 words and 0 links — this page is built by JavaScript in the browser. Googlebot renders JS but delays it, and most crawlers and AI assistants (ChatGPT, Perplexity, Claude) don't run JavaScript at all, so to them the page looks empty. Server-render or pre-render your main content and navigation.
  • https://sofiashendi.com/hush — Raw HTML has 0 words and 0 links — this page is built by JavaScript in the browser. Googlebot renders JS but delays it, and most crawlers and AI assistants (ChatGPT, Perplexity, Claude) don't run JavaScript at all, so to them the page looks empty. Server-render or pre-render your main content and navigation.

warning Title likely truncated in SERP (too wide)

Rule title.too_long · Titles · 3 occurrence(s)

Notices (10 rules)

notice Page served uncached (no-store/private or CDN bypass)

Rule cache.not_cacheable · Cache · 50 occurrence(s)

notice Duplicate meta description across pages

Rule duplicate.meta_desc · Duplicate · 14 occurrence(s)

notice robots.txt blocks AI search/citation crawlers

Rule geo.ai_bots_blocked · Geo · 1 occurrence(s)

  • https://sofiashendi.com/ — robots.txt disallows AI search crawler(s): perplexitybot (Perplexity). These fetch pages to cite in AI answers, so blocking them removes you from that citation pool. Allowing them is required for AI citations (though not a guarantee of them); blocking training bots like GPTBot/ClaudeBot is a separate, valid choice.

notice No ETag header (no conditional GET for unchanged pages)

Rule perf.no_etag · Performance · 50 occurrence(s)

  • https://sofiashendi.com/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://sofiashendi.com/blog — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://sofiashendi.com/blog/back-with-the-montreal-builder-community — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://sofiashendi.com/blog/free-contemporary-art-in-montreal — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://sofiashendi.com/blog/how-i-vibe-coded-my-website-as-a-20-year-senior-engineer — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://sofiashendi.com/blog/kayaking-at-low-cost-around-montreal — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://sofiashendi.com/blog/leaving-google-for-proton-or-the-case-for-taking-ownership-of-our-privacy — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://sofiashendi.com/blog/looking-back-at-2025 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://sofiashendi.com/blog/recycling-electronics-in-montreal — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://sofiashendi.com/blog/starting-2023-with-more-things-to-know-about-our-city — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://sofiashendi.com/blog/tag/birthday — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://sofiashendi.com/blog/tag/city-life — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://sofiashendi.com/blog/tag/creative — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://sofiashendi.com/blog/tag/engineering — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://sofiashendi.com/blog/tag/leadership — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://sofiashendi.com/blog/tag/privacy — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://sofiashendi.com/blog/tag/slow-travel — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://sofiashendi.com/blog/tag/sustainability — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://sofiashendi.com/blog/tag/wellbeing — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://sofiashendi.com/blog/tag/wordpress — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://sofiashendi.com/blog/taking-control-of-my-home-network-and-saving-216 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://sofiashendi.com/blog/the-arrival-of-spring-and-seed-libraries — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://sofiashendi.com/blog/walking-through-ottawa-and-thinking-about-what-weve-become — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://sofiashendi.com/contact — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://sofiashendi.com/hush — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.

notice No Last-Modified header (no conditional GET for unchanged pages)

Rule perf.no_last_modified · Performance · 50 occurrence(s)

  • https://sofiashendi.com/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://sofiashendi.com/blog — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://sofiashendi.com/blog/back-with-the-montreal-builder-community — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://sofiashendi.com/blog/free-contemporary-art-in-montreal — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://sofiashendi.com/blog/how-i-vibe-coded-my-website-as-a-20-year-senior-engineer — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://sofiashendi.com/blog/kayaking-at-low-cost-around-montreal — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://sofiashendi.com/blog/leaving-google-for-proton-or-the-case-for-taking-ownership-of-our-privacy — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://sofiashendi.com/blog/looking-back-at-2025 — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://sofiashendi.com/blog/recycling-electronics-in-montreal — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://sofiashendi.com/blog/starting-2023-with-more-things-to-know-about-our-city — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://sofiashendi.com/blog/tag/birthday — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://sofiashendi.com/blog/tag/city-life — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://sofiashendi.com/blog/tag/creative — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://sofiashendi.com/blog/tag/engineering — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://sofiashendi.com/blog/tag/leadership — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://sofiashendi.com/blog/tag/privacy — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://sofiashendi.com/blog/tag/slow-travel — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://sofiashendi.com/blog/tag/sustainability — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://sofiashendi.com/blog/tag/wellbeing — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://sofiashendi.com/blog/tag/wordpress — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://sofiashendi.com/blog/taking-control-of-my-home-network-and-saving-216 — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://sofiashendi.com/blog/the-arrival-of-spring-and-seed-libraries — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://sofiashendi.com/blog/walking-through-ottawa-and-thinking-about-what-weve-become — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://sofiashendi.com/contact — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://sofiashendi.com/hush — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.

notice URL redirects to another URL

Rule redirect.single · Crawlability · 36 occurrence(s)

notice Missing recommended security headers

Rule security.missing_headers · Security · 50 occurrence(s)

Pages (showing 50 of 50)
URLStatusIndexableWordsIn-links
https://sofiashendi.com/
Sofia Shendi | Engineering Leader & Full-Stack Engineer
200 yes 0 0
https://sofiashendi.com/blog
Sofia Shendi | Engineering Leader & Full-Stack Engineer
200 yes 0 0
https://sofiashendi.com/blog/2017-06-22-turn-32-today
I Turn 32 Today — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/2017-06-23-c2-montreal-2017
My Takeaway From Attending C2 Montréal For The First Time — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/2017-07-04-6-places-tried-may-june-montreal
6 Places I Tried in May & June in Montreal — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/2017-07-09-10-things-must-vancouver
10 Things I Must Do In Vancouver — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/2017-08-13-11-addresses-tested-vancouver-summer
11 Addresses Tested In Vancouver This Summer — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/2017-09-25-digital-nomad-guide-vancouver-canada
Digital Nomad Guide: Vancouver, Canada — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/2017-10-24-36-hours-new-york-city
36 Hours In New York City — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/2017-11-08-5-places-visited-september-october-montreal
5 Places I Visited In September & October In Montreal — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/2017-12-30-im-ready-2018
I'm Ready For You 2018! — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/2018-01-21-maximizing-productivity-2-0
Maximizing Productivity 2.0 — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/2018-03-06-seattle-36-hours
Seattle in 36 Hours — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/2018-03-08-getting-the-best-out-of-san-diego-newport-beach
Getting The Best Out Of San Diego & Newport Beach — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/2018-04-09-spending-the-winter-away-in-south-east-asia
Spending The Winter Away In Southeast Asia — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/2018-06-22-this-is-33
This is 33? — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/2018-10-16-planning-next-summers-getaway
Planning Next Summer's Getaway — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/2018-11-03-5-things-to-do-in-new-york-city
5 Things To Do In New York City — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/2018-11-20-digital-nomad-guide-bali-indonesia
Digital Nomad Guide: Bali, Indonesia — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/2018-11-23-3-montreal-cafes-cool-with-you-working
3 Montreal Cafés Cool With You Working — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/2019-01-02-my-2018-review
My 2018 Review — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/2019-06-25-here-comes-another-year
Here comes another year 🎂 — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/2019-07-28-spring-in-lake-louise-and-banff-alberta
Spring in Lake Louise & Banff, Alberta — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/2019-08-12-dealing-with-my-anxiety-from-climate-change
Dealing With My Anxiety From Climate Change — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/2019-08-15-day-trip-to-les-de-boucherville-national-park
Day Trip To Îles-de-Boucherville National Park — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/2019-09-10-day-trip-to-cap-saint-jacques-nature-park
Day Trip To Cap-Saint-Jacques Nature Park — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/2019-10-19-making-up-with-morocco
Making Up With Morocco — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/back-with-the-montreal-builder-community
Back with the Montreal Builder Community — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/free-contemporary-art-in-montreal
Free Contemporary Art in Montreal — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/how-i-vibe-coded-my-website-as-a-20-year-senior-engineer
How I Vibe Coded My Website as a 20+ Year Senior Engineer — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/kayaking-at-low-cost-around-montreal
Kayaking at low cost around Montreal — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/leaving-google-for-proton-or-the-case-for-taking-ownership-of-our-privacy
Leaving Google for Proton, or the Case for Taking Ownership of Our Privacy — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/looking-back-at-2025
Looking Back at 2025 — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/recycling-electronics-in-montreal
Recycling electronics in Montreal — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/starting-2023-with-more-things-to-know-about-our-city
Starting 2023 with more things to know about our city! — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/tag/birthday
Sofia Shendi | Engineering Leader & Full-Stack Engineer
200 yes 0 0
https://sofiashendi.com/blog/tag/city-life
Sofia Shendi | Engineering Leader & Full-Stack Engineer
200 yes 0 0
https://sofiashendi.com/blog/tag/creative
Sofia Shendi | Engineering Leader & Full-Stack Engineer
200 yes 0 0
https://sofiashendi.com/blog/tag/engineering
Sofia Shendi | Engineering Leader & Full-Stack Engineer
200 yes 0 0
https://sofiashendi.com/blog/tag/leadership
Sofia Shendi | Engineering Leader & Full-Stack Engineer
200 yes 0 0
https://sofiashendi.com/blog/tag/privacy
Sofia Shendi | Engineering Leader & Full-Stack Engineer
200 yes 0 0
https://sofiashendi.com/blog/tag/slow-travel
Sofia Shendi | Engineering Leader & Full-Stack Engineer
200 yes 0 0
https://sofiashendi.com/blog/tag/sustainability
Sofia Shendi | Engineering Leader & Full-Stack Engineer
200 yes 0 0
https://sofiashendi.com/blog/tag/wellbeing
Sofia Shendi | Engineering Leader & Full-Stack Engineer
200 yes 0 0
https://sofiashendi.com/blog/tag/wordpress
Sofia Shendi | Engineering Leader & Full-Stack Engineer
200 yes 0 0
https://sofiashendi.com/blog/taking-control-of-my-home-network-and-saving-216
Taking Control of My Home Network (and Saving $216) — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/the-arrival-of-spring-and-seed-libraries
The arrival of Spring and Seed libraries — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/blog/walking-through-ottawa-and-thinking-about-what-weve-become
Walking Through Ottawa and Thinking About What We’ve Become — Sofia Shendi
200 yes 0 0
https://sofiashendi.com/contact
Sofia Shendi | Engineering Leader & Full-Stack Engineer
200 yes 0 0
https://sofiashendi.com/hush
Sofia Shendi | Engineering Leader & Full-Stack Engineer
200 yes 0 0

Audit your own site — free

157 checks, internal PageRank, render-diff. No signup, results in ~30s.

Scan your site →