diff --git a/core/fpdfdoc/cpdf_structelement.cpp b/core/fpdfdoc/cpdf_structelement.cpp
index 1e7e5dc..89a5e39 100644
--- a/core/fpdfdoc/cpdf_structelement.cpp
+++ b/core/fpdfdoc/cpdf_structelement.cpp
@@ -17,6 +17,21 @@
 #include "core/fpdfapi/parser/cpdf_stream.h"
 #include "core/fpdfdoc/cpdf_structtree.h"
 
+namespace {
+
+ByteString GetStructElementType(CPDF_StructTree* pTree,
+                                const CPDF_Dictionary* pDict) {
+  ByteString type = pDict->GetStringFor("S");
+  if (pTree->GetRoleMap()) {
+    ByteString mapped = pTree->GetRoleMap()->GetStringFor(type);
+    if (!mapped.IsEmpty())
+      type = std::move(mapped);
+  }
+  return type;
+}
+
+}  // namespace
+
 CPDF_StructKid::CPDF_StructKid()
     : m_Type(Invalid),
       m_PageObjNum(0),
@@ -33,17 +48,16 @@
     : m_pTree(pTree),
       m_pParent(pParent),
       m_pDict(pDict),
-      m_Type(pDict->GetStringFor("S")) {
-  if (pTree->GetRoleMap()) {
-    ByteString mapped = pTree->GetRoleMap()->GetStringFor(m_Type);
-    if (!mapped.IsEmpty())
-      m_Type = std::move(mapped);
-  }
-  LoadKids(pDict);
+      m_Type(GetStructElementType(m_pTree.Get(), m_pDict.Get())) {
+  LoadKids(m_pDict.Get());
 }
 
 CPDF_StructElement::~CPDF_StructElement() = default;
 
+WideString CPDF_StructElement::GetAltText() const {
+  return GetDict()->GetUnicodeTextFor("Alt");
+}
+
 WideString CPDF_StructElement::GetTitle() const {
   return GetDict()->GetUnicodeTextFor("T");
 }
diff --git a/core/fpdfdoc/cpdf_structelement.h b/core/fpdfdoc/cpdf_structelement.h
index 359662e..d4981a5 100644
--- a/core/fpdfdoc/cpdf_structelement.h
+++ b/core/fpdfdoc/cpdf_structelement.h
@@ -39,6 +39,7 @@
   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
 
   ByteString GetType() const { return m_Type; }
+  WideString GetAltText() const;
   WideString GetTitle() const;
 
   // Never returns nullptr.
@@ -62,7 +63,7 @@
   UnownedPtr<CPDF_StructTree> const m_pTree;
   UnownedPtr<CPDF_StructElement> const m_pParent;
   UnownedPtr<const CPDF_Dictionary> const m_pDict;
-  ByteString m_Type;
+  const ByteString m_Type;
   std::vector<CPDF_StructKid> m_Kids;
 };
 
diff --git a/fpdfsdk/fpdf_structtree.cpp b/fpdfsdk/fpdf_structtree.cpp
index d0b0972..cfd57a8 100644
--- a/fpdfsdk/fpdf_structtree.cpp
+++ b/fpdfsdk/fpdf_structtree.cpp
@@ -74,9 +74,7 @@
                               unsigned long buflen) {
   CPDF_StructElement* elem =
       CPDFStructElementFromFPDFStructElement(struct_element);
-  return elem ? WideStringToBuffer(elem->GetDict()->GetUnicodeTextFor("Alt"),
-                                   buffer, buflen)
-              : 0;
+  return elem ? WideStringToBuffer(elem->GetAltText(), buffer, buflen) : 0;
 }
 
 FPDF_EXPORT int FPDF_CALLCONV
