diff --git a/news/changelog-1.6.md b/news/changelog-1.6.md
index ad50fce2c8c..0b244b74166 100644
--- a/news/changelog-1.6.md
+++ b/news/changelog-1.6.md
@@ -92,6 +92,7 @@ All changes included in 1.6:
- ([#10311](https://github.com/quarto-dev/quarto-cli/issues/10311)): Loosen auto-discovery of images for OpenGraph cards.
- ([#10567](https://github.com/quarto-dev/quarto-cli/issues/10567)): Generate breadcrumbs correctly for documents using a level-1 heading as the title.
- ([#10616](https://github.com/quarto-dev/quarto-cli/issues/10268)): Add a `z-index` setting to the 'back to top' button to ensure it is always visible.
+- ([#10864](https://github.com/quarto-dev/quarto-cli/issues/10864)): Support detection of `og:image:alt` attribute from auto-discovered images.
### Quarto Blog
diff --git a/src/project/types/website/listing/website-listing-feed.ts b/src/project/types/website/listing/website-listing-feed.ts
index 39cf211aa40..b23f144dd73 100644
--- a/src/project/types/website/listing/website-listing-feed.ts
+++ b/src/project/types/website/listing/website-listing-feed.ts
@@ -163,7 +163,7 @@ export async function createFeed(
// Add any image metadata
const image = options.image || format.metadata[kImage] as string ||
- websiteImage(project.config);
+ websiteImage(project.config)?.src;
if (image) {
feed.image = {
title: feedTitle,
diff --git a/src/project/types/website/util/discover-meta.ts b/src/project/types/website/util/discover-meta.ts
index 0b9362b66aa..a69987f1cf5 100644
--- a/src/project/types/website/util/discover-meta.ts
+++ b/src/project/types/website/util/discover-meta.ts
@@ -41,12 +41,16 @@ export function findDescription(doc: Document): string | undefined {
export function findPreviewImg(
doc: Document,
-): string | undefined {
+): { src: string; alt?: string } | undefined {
const imgEl = findPreviewImgEl(doc);
if (imgEl) {
const src = getDecodedAttribute(imgEl, "src");
+ const alt = getDecodedAttribute(imgEl, "alt");
if (src !== null) {
- return src;
+ return {
+ src,
+ alt: alt ?? undefined,
+ };
} else {
return undefined;
}
diff --git a/src/project/types/website/website-config.ts b/src/project/types/website/website-config.ts
index 2a47dac3f8e..6ee462140b4 100644
--- a/src/project/types/website/website-config.ts
+++ b/src/project/types/website/website-config.ts
@@ -50,6 +50,7 @@ import { join } from "../../../deno_ral/path.ts";
type WebsiteConfigKey =
| "title"
| "image"
+ | "image-alt"
| "description"
| "favicon"
| "site-url"
@@ -173,8 +174,16 @@ export function websiteBaseurl(project?: ProjectConfig): string | undefined {
return websiteConfigString(kSiteUrl, project);
}
-export function websiteImage(project?: ProjectConfig): string | undefined {
- return websiteConfigString(kImage, project);
+export function websiteImage(
+ project?: ProjectConfig,
+): { src: string; alt?: string } | undefined {
+ const src = websiteConfigString(kImage, project);
+ if (src) {
+ const alt = websiteConfigString("image-alt", project);
+ return { src, alt };
+ } else {
+ return undefined;
+ }
}
export function websiteDescription(
diff --git a/src/project/types/website/website-meta.ts b/src/project/types/website/website-meta.ts
index 72976545089..7f5afe68658 100644
--- a/src/project/types/website/website-meta.ts
+++ b/src/project/types/website/website-meta.ts
@@ -180,8 +180,9 @@ export function metadataHtmlPostProcessor(
// find a preview image if one is not provided
if (metadata[kImage] === undefined && format.metadata[kImage] !== false) {
- metadata[kImage] = findPreviewImg(doc) ||
- websiteImage(project.config);
+ const previewImg = findPreviewImg(doc) || websiteImage(project.config);
+ metadata[kImage] = previewImg ? previewImg.src : undefined;
+ metadata[kImageAlt] = previewImg ? previewImg.alt : undefined;
}
// cook up a description if one is not provided
diff --git a/tests/docs/smoke-all/2024/10/30/issue-10864/_quarto.yml b/tests/docs/smoke-all/2024/10/30/issue-10864/_quarto.yml
new file mode 100644
index 00000000000..59cb55604e1
--- /dev/null
+++ b/tests/docs/smoke-all/2024/10/30/issue-10864/_quarto.yml
@@ -0,0 +1,20 @@
+project:
+ type: website
+
+website:
+ title: "issue-10864"
+ open-graph: true
+ navbar:
+ left:
+ - href: index.qmd
+ text: Home
+ - about.qmd
+
+format:
+ html:
+ theme: cosmo
+ css: styles.css
+ toc: true
+
+
+
diff --git a/tests/docs/smoke-all/2024/10/30/issue-10864/about.qmd b/tests/docs/smoke-all/2024/10/30/issue-10864/about.qmd
new file mode 100644
index 00000000000..f3c829a946c
--- /dev/null
+++ b/tests/docs/smoke-all/2024/10/30/issue-10864/about.qmd
@@ -0,0 +1,13 @@
+---
+title: "About"
+_quarto:
+ tests:
+ html:
+ ensureFileRegexMatches:
+ - ['']
+ - []
+---
+
+About this site
+
+{fig-alt="Quarto logo" .preview-image}
diff --git a/tests/docs/smoke-all/2024/10/30/issue-10864/index.qmd b/tests/docs/smoke-all/2024/10/30/issue-10864/index.qmd
new file mode 100644
index 00000000000..eb503ba6ce2
--- /dev/null
+++ b/tests/docs/smoke-all/2024/10/30/issue-10864/index.qmd
@@ -0,0 +1,7 @@
+---
+title: "issue-10864"
+---
+
+This is a Quarto website.
+
+To learn more about Quarto websites visit .
diff --git a/tests/docs/smoke-all/2024/10/30/issue-10864/styles.css b/tests/docs/smoke-all/2024/10/30/issue-10864/styles.css
new file mode 100644
index 00000000000..2ddf50c7b42
--- /dev/null
+++ b/tests/docs/smoke-all/2024/10/30/issue-10864/styles.css
@@ -0,0 +1 @@
+/* css styles */