Skip to content

Commit cff1bfb

Browse files
committed
Merge remote-tracking branch 'upstream/main'
2 parents 439197a + 7cf0b27 commit cff1bfb

68 files changed

Lines changed: 1366 additions & 42 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/compress-images.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ jobs:
5353
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
5454
compressOnly: ${{ github.event_name != 'pull_request' }}
5555
jpegProgressive: true
56+
minPctChange: '10.0'
5657
- name: Create Pull Request
5758
# If it's not a pull request then commit any changes as a new PR
5859
if: |

sql/2024/media/video_adoption.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#standardSQL
22
# How many pages use <video>?
33
# video_adoption.sql
4-
# â\x9d• Updated in 2024
4+
# Updated in 2024
55

66
SELECT
77
client,

sql/2025/seo/core-web-vitals-2025.sql

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,24 @@ SELECT
1616
COUNT(DISTINCT IF(IS_GOOD(fast_fid, avg_fid, slow_fid), origin, NULL)),
1717
COUNT(DISTINCT IF(IS_NON_ZERO(fast_fid, avg_fid, slow_fid), origin, NULL))
1818
) AS pct_good_fid,
19+
# Origins with good INP divided by origins with any INP.
20+
SAFE_DIVIDE(
21+
COUNT(DISTINCT IF(IS_GOOD(fast_inp, avg_inp, slow_inp), origin, NULL)),
22+
COUNT(DISTINCT IF(IS_NON_ZERO(fast_inp, avg_inp, slow_inp), origin, NULL))
23+
) AS pct_good_inp,
1924
# Origins with good CLS divided by origins with any CLS.
2025
SAFE_DIVIDE(
2126
COUNT(DISTINCT IF(IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL)),
2227
COUNT(DISTINCT IF(IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL))
2328
) AS pct_good_cls,
24-
# Origins with good LCP, FID, and CLS dividied by origins with any LCP, FID, and CLS.
29+
# Origins with good LCP, FID/INP, and CLS dividied by origins with any LCP, and CLS.
2530
SAFE_DIVIDE(
2631
COUNT(DISTINCT IF(
2732
IS_GOOD(fast_lcp, avg_lcp, slow_lcp) AND
28-
IS_GOOD(fast_fid, avg_fid, slow_fid) IS NOT FALSE AND
33+
(
34+
(date >= '2024-03-01' AND IS_GOOD(fast_inp, avg_inp, slow_inp) IS NOT FALSE) OR
35+
(date < '2024-03-01' AND IS_GOOD(fast_fid, avg_fid, slow_fid) IS NOT FALSE)
36+
) AND
2937
IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL
3038
)),
3139
COUNT(DISTINCT IF(

src/config/2025.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,7 @@
7474
"part": "II",
7575
"chapter_number": "8",
7676
"title": "SEO",
77-
"slug": "seo",
78-
"todo": true
77+
"slug": "seo"
7978
},
8079
{
8180
"part": "II",

src/config/contributors.json

Lines changed: 63 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,17 @@
443443
},
444444
"twitter": "kripken"
445445
},
446+
"Amaka-maxi": {
447+
"avatar_url": "211726608",
448+
"github": "Amaka-maxi",
449+
"name": "Amaka Chulwuma",
450+
"linkedin": "amaka-chukwuma-jubilee",
451+
"teams": {
452+
"2025": [
453+
"authors"
454+
]
455+
}
456+
},
446457
"cyberandy": {
447458
"avatar_url": "837037",
448459
"github": "cyberandy",
@@ -627,6 +638,14 @@
627638
},
628639
"twitter": "arturjanc"
629640
},
641+
"augustin_delport": {
642+
"name": "Augustin Delport",
643+
"teams": {
644+
"2025": [
645+
"analysts"
646+
]
647+
}
648+
},
630649
"ashleyish": {
631650
"avatar_url": "35119235",
632651
"github": "ashleyish",
@@ -659,11 +678,11 @@
659678
"name": "Barry Pollard",
660679
"teams": {
661680
"2019": [
662-
"brainstormers",
663681
"authors",
664-
"reviewers",
682+
"brainstormers",
683+
"developers",
665684
"editors",
666-
"developers"
685+
"reviewers"
667686
],
668687
"2020": [
669688
"analysts",
@@ -1103,6 +1122,21 @@
11031122
]
11041123
}
11051124
},
1125+
"chr156r33n": {
1126+
"avatar_url": "75560394",
1127+
"bluesky": "chris-green.net",
1128+
"github": "chr156r33n",
1129+
"linkedin": "chrisgreenseo",
1130+
"name": "Chris Green",
1131+
"teams": {
1132+
"2025": [
1133+
"analysts",
1134+
"authors"
1135+
]
1136+
},
1137+
"twitter": "chrisgreenseo",
1138+
"website": "https://www.torquepartnership.com/"
1139+
},
11061140
"svgeesus": {
11071141
"avatar_url": "2506926",
11081142
"github": "svgeesus",
@@ -2163,6 +2197,9 @@
21632197
],
21642198
"2024": [
21652199
"authors"
2200+
],
2201+
"2025": [
2202+
"reviewers"
21662203
]
21672204
},
21682205
"twitter": "Jammer_Volts",
@@ -3166,6 +3203,9 @@
31663203
"2024": [
31673204
"authors",
31683205
"editors"
3206+
],
3207+
"2025": [
3208+
"editors"
31693209
]
31703210
},
31713211
"twitter": "MichaelLewittes",
@@ -3268,8 +3308,8 @@
32683308
"authors"
32693309
],
32703310
"2025": [
3271-
"authors",
3272-
"analysts"
3311+
"analysts",
3312+
"authors"
32733313
]
32743314
},
32753315
"website": "https://accessibility.civicactions.com/"
@@ -3347,6 +3387,9 @@
33473387
"teams": {
33483388
"2024": [
33493389
"editors"
3390+
],
3391+
"2025": [
3392+
"editors"
33503393
]
33513394
},
33523395
"website": "https://montserrat-cano.com/"
@@ -4486,6 +4529,9 @@
44864529
"teams": {
44874530
"2022": [
44884531
"authors"
4532+
],
4533+
"2025": [
4534+
"authors"
44894535
]
44904536
},
44914537
"twitter": "SophieBrannon"
@@ -4550,6 +4596,18 @@
45504596
"twitter": "allema_s",
45514597
"website": "https://sebastienallemand.fr/"
45524598
},
4599+
"hello-sharon": {
4600+
"avatar_url": "211817205",
4601+
"github": "hello-sharon",
4602+
"linkedin": "sharonmcclintic",
4603+
"name": "Sharon McClintic",
4604+
"teams": {
4605+
"2025": [
4606+
"editors"
4607+
]
4608+
},
4609+
"website": "https://www.lumar.io/"
4610+
},
45534611
"tjmonsi": {
45544612
"avatar_url": "2645718",
45554613
"github": "tjmonsi",

src/content/en/2021/media.md

Lines changed: 50 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -433,19 +433,59 @@ When browsers pick a resource to load out of a `srcset`, they first assign every
433433

434434
On a 500-CSS-`px`-wide viewport, these resources will be assigned the following densities:
435435

436-
| Resource | Density |
437-
|---|---|
438-
| `large.jpg` | `1000w` ÷ `500px` = 2x |
439-
| `medium.jpg` | `750w` ÷ `500px` = 1.5x |
440-
| `small.jpg` | `500w` ÷ `500px` = 1x |
436+
<figure>
437+
<table>
438+
<thead>
439+
<tr>
440+
<th>Resource</th>
441+
<th>Density</th>
442+
</tr>
443+
</thead>
444+
<tbody>
445+
<tr>
446+
<td><code>large.jpg</code></td>
447+
<td><code>1000w</code> ÷ <code>500px</code> = 2x</td>
448+
</tr>
449+
<tr>
450+
<td><code>medium.jpg</code></td>
451+
<td><code>750w</code> ÷ <code>500px</code> = 1.5x</td>
452+
</tr>
453+
<tr>
454+
<td><code>small.jpg</code></td>
455+
<td><code>500w</code> ÷ <code>500px</code> = 1x</td>
456+
</tr>
457+
</tbody>
458+
</table>
459+
<figcaption>{{ figure_link(caption="500px densities") }}</figcaption>
460+
</figure>
441461

442462
However, on a 1000-CSS-`px`-wide viewport, these same resources, marked up with the same `srcset` and `sizes` values, will have different densities:
443463

444-
| Resource | Density |
445-
|---|---|
446-
| `large.jpg` | `1000w` ÷ `1000px` = 1x |
447-
| `medium.jpg` | `750w` ÷ `1000px` = 0.75x |
448-
| `small.jpg` | `500w` ÷ `1000px` = 0.5x |
464+
<figure>
465+
<table>
466+
<thead>
467+
<tr>
468+
<th>Resource</th>
469+
<th>Density</th>
470+
</tr>
471+
</thead>
472+
<tbody>
473+
<tr>
474+
<td><code>large.jpg</code></td>
475+
<td><code>1000w</code> ÷ <code>1000px</code> = 1x</td>
476+
</tr>
477+
<tr>
478+
<td><code>medium.jpg</code></td>
479+
<td><code>750w</code> ÷ <code>1000px</code> = 0.75x</td>
480+
</tr>
481+
<tr>
482+
<td><code>small.jpg</code></td>
483+
<td><code>500w</code> ÷ <code>1000px</code> = 0.5x</td>
484+
</tr>
485+
</tbody>
486+
</table>
487+
<figcaption>{{ figure_link(caption="1000px densities") }}</figcaption>
488+
</figure>
449489

450490
After these densities are calculated, browsers pick the resource with the density that's the best match for the current browsing context. It's safe to say that in this example, the `srcset` did not contain a wide-enough range of resources. Viewports measuring more than 1,000 CSS `px` across, with higher than `1x` densities, are not uncommon; if you're reading this on a laptop, you're probably browsing in such a context, right now. And in these contexts, the best browsers can do is pick `large.jpg`, whose 1x density will still appear blurry on the high-density display.
451491

0 commit comments

Comments
 (0)